Files
Fondex/lib/controllers/splash_controller.dart

90 lines
3.3 KiB
Dart

import 'dart:async';
import 'dart:developer';
import 'package:customer/constant/constant.dart';
import 'package:customer/models/user_model.dart';
import 'package:customer/screen_ui/maintenance_mode_screen/maintenance_mode_screen.dart';
import 'package:customer/screen_ui/service_home_screen/service_list_screen.dart';
import 'package:customer/utils/app_router.dart';
import 'package:customer/utils/notification_service.dart';
import 'package:customer/utils/preferences.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../screen_ui/auth_screens/login_screen.dart';
import '../screen_ui/location_enable_screens/location_permission_screen.dart';
import '../screen_ui/on_boarding_screen/on_boarding_screen.dart';
import '../service/fire_store_utils.dart';
class SplashController extends GetxController {
final BuildContext context;
SplashController({required this.context});
@override
void onInit() {
Timer(const Duration(seconds: 2), () => redirectScreen());
super.onInit();
}
Future<void> redirectScreen() async {
if (Constant.isMaintenanceModeForCustomer == true) {
Get.offAll(const MaintenanceModeScreen());
return;
}
if (Preferences.getBoolean(Preferences.isFinishOnBoardingKey) == false) {
Get.offAll(const OnboardingScreen());
} else {
bool isLogin = await FireStoreUtils.isLogin();
if (isLogin == true) {
await FireStoreUtils.getUserProfile(
FireStoreUtils.getCurrentUid(),
).then((value) async {
if (value != null) {
UserModel userModel = value;
log(userModel.toJson().toString());
if (userModel.role == Constant.userRoleCustomer) {
if (userModel.active == true) {
userModel.fcmToken = await NotificationService.getToken();
await FireStoreUtils.updateUser(userModel);
if (userModel.shippingAddress != null &&
userModel.shippingAddress!.isNotEmpty) {
if (userModel.shippingAddress!
.where((element) => element.isDefault == true)
.isNotEmpty) {
Constant.selectedLocation =
userModel.shippingAddress!
.where((element) => element.isDefault == true)
.single;
} else {
Constant.selectedLocation =
userModel.shippingAddress!.first;
}
Get.offAll(const ServiceListScreen());
} else {
Get.offAll(const LocationPermissionScreen());
}
} else {
await FirebaseAuth.instance.signOut();
Get.offAll(const LoginScreen());
}
} else {
await FirebaseAuth.instance.signOut();
Get.offAll(const LoginScreen());
}
}
});
} else {
await FirebaseAuth.instance.signOut();
Get.offAll(const LoginScreen());
}
}
}
void _navigateAndRemoveAll(Widget screen) {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (_) => screen),
(route) => false,
);
}
}