import 'dart:io'; import 'package:get/get.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:taafee_mobile/common/widgets/toast.dart'; import 'package:taafee_mobile/core/local_storage/local_storage.dart'; import 'package:taafee_mobile/core/routing/routing_manager.dart'; import 'package:taafee_mobile/features/auth/data_layer/source/auth_service.dart'; import 'package:taafee_mobile/features/splash/data%20layer/source/splash_source.dart'; import 'package:rx_future/rx_future.dart'; import '../../auth/data_layer/model/user.dart'; import '../data layer/model/params.dart'; class SplashController extends GetxController { LocalStorage storage = LocalStorage(); AuthService authService = AuthService(); SplashSource splashSource = SplashSource(); RxBool showErrorResult = false.obs; RxFuture paramsState = RxFuture(null); Future getParams({ void Function(Object)? onConnectionError, void Function()? onSessionTerminated, required Future Function(bool) versionAlert, }) async { await paramsState.observe((value) async { return await splashSource.getParams(onConnectionError: onConnectionError); }, onSuccess: (value) async { bool result = await checkVersion(versionAlert: versionAlert); if (result == true) { await checkToken(onSessionTerminated: onSessionTerminated); } }, onError: (err) { showErrorResult.value = true; showErrorResult.refresh(); }); } ///user token state/// RxFuture userTokenState = RxFuture(User.zero()); Future checkToken( {void Function()? onError, void Function()? onSessionTerminated}) async { showErrorResult.value = false; showErrorResult.refresh(); bool firstTimeOpened = storage.getfirstTimeOpened(); String? token = storage.getToken(); bool isGuest = storage.getIsGuest() ?? false; if (firstTimeOpened == true) { RoutingManager.offAll(RouteName.onboarding); return; } else { if (token != null) { if (!isGuest) { userTokenState.observe( (value) async { return await authService.showUser(onConnectionError: (err) { Toast.showToast('you_have_no_internet_connection'.tr); }); }, onSuccess: (value) { storage.saveUser(value); RoutingManager.offAll(RouteName.superHome); return; }, onError: (error) { if (error.toString() == 'you_are_not_authorized') { Toast.showToast('this_session_is_terminated'.tr); onSessionTerminated?.call(); } else { showErrorResult.value = true; showErrorResult.refresh(); } print('err is${error.toString()}'); onError?.call(); }, ); } else { storage.saveUser(User( id: 0, firstName: 'guest', lastName: '', chatUserId: 0, email: '', avatarImage: null)); storage.saveIsGuest(true); RoutingManager.off(RouteName.superHome); } } else { RoutingManager.offAll(RouteName.login); return; } } } Future checkVersion( {required Future Function(bool forced) versionAlert}) async { PackageInfo packageInfo = await PackageInfo.fromPlatform(); String appVersion = packageInfo.version; return true; if (Platform.isAndroid) { if (appVersion != Params.currentAndroidVersion) { return await versionAlert(Params.forceUpdateAndroid); } else { return true; } } if (Platform.isIOS) { if (appVersion != Params.currentIosVersion) { return await versionAlert(Params.forceUpdateIos); } else { return true; } } return false; } }