taafee-mobile/lib/common/widgets/rx_viewer.dart
2023-10-17 17:22:55 +03:00

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 Lottie.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();
}
});
}
}