107 lines
3.1 KiB
Dart
107 lines
3.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:lottie/lottie.dart';
|
|
import 'package:taafee_mobile/common/extensions/widget_extension.dart';
|
|
import 'package:taafee_mobile/common/widgets/loader.dart';
|
|
import 'package:taafee_mobile/common/widgets/text.dart';
|
|
import 'package:rx_future/rx_future.dart';
|
|
|
|
import '../const/const.dart';
|
|
|
|
// ignore: must_be_immutable
|
|
class RxViewer extends StatelessWidget {
|
|
final RxFuture rxFuture;
|
|
final double? width;
|
|
final double? height;
|
|
final double? loaderWidth;
|
|
final double? loaderHeight;
|
|
final double? errorWidth;
|
|
final double? errorHeight;
|
|
final bool? withSizedBox;
|
|
final Color? color;
|
|
final Function() child;
|
|
final Widget? errorWidget;
|
|
final Widget? customLoader;
|
|
bool _isLoading = false;
|
|
final bool? withPagination;
|
|
RxViewer(
|
|
{super.key,
|
|
required this.rxFuture,
|
|
this.color,
|
|
this.height,
|
|
this.width,
|
|
this.loaderHeight,
|
|
this.loaderWidth,
|
|
this.errorHeight,
|
|
this.errorWidth,
|
|
this.withSizedBox,
|
|
this.errorWidget,
|
|
this.customLoader,
|
|
this.withPagination,
|
|
required this.child});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Obx(() {
|
|
if (withPagination != null) {
|
|
if (withPagination!) {
|
|
_isLoading = rxFuture.loading && rxFuture.result.isFirstPage;
|
|
} else {
|
|
_isLoading = rxFuture.loading;
|
|
}
|
|
} else {
|
|
_isLoading = rxFuture.loading;
|
|
}
|
|
if (_isLoading) {
|
|
return (customLoader != null)
|
|
? customLoader!
|
|
: (withSizedBox ?? false)
|
|
? SizedBox(
|
|
width: loaderWidth,
|
|
height: loaderHeight,
|
|
child: Loader(
|
|
width: width,
|
|
height: height,
|
|
color: color,
|
|
).center(),
|
|
)
|
|
: SizedBox(
|
|
width: width,
|
|
height: height,
|
|
child: Loader(
|
|
width: width,
|
|
height: height,
|
|
color: color,
|
|
).center(),
|
|
);
|
|
}
|
|
if (rxFuture.hasError) {
|
|
return errorWidget ??
|
|
SizedBox(
|
|
width: errorWidth,
|
|
height: errorHeight,
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
Lottie.asset(
|
|
'assets/animations/Wifi.json',
|
|
repeat: false,
|
|
width: 120,
|
|
).paddingAll(5),
|
|
RegularTextWidget(
|
|
'you_have_no_internet_connection'.tr,
|
|
textAlign: TextAlign.center,
|
|
color: AppColors.textColor,
|
|
fontSize: 18.0,
|
|
)
|
|
],
|
|
).center(),
|
|
);
|
|
} else {
|
|
return child();
|
|
}
|
|
});
|
|
}
|
|
}
|