diff --git a/lib/infrastructure/service/app_navigation_observer.dart b/lib/infrastructure/service/app_navigation_observer.dart index 9c49563..83851bd 100644 --- a/lib/infrastructure/service/app_navigation_observer.dart +++ b/lib/infrastructure/service/app_navigation_observer.dart @@ -17,7 +17,7 @@ class CustomNavigationObserver extends NavigatorObserver { @override void didPush(Route route, Route? previousRoute) async { final routeName = route.settings.name; - if (!_isWorkDone && (routeName == ChickenRoutes.init || routeName == ChickenRoutes.auth)) { + /* if (!_isWorkDone && (routeName == ChickenRoutes.init || routeName == ChickenRoutes.auth)) { _isWorkDone = true; await setupChickenDI(); } else if (!_isWorkDone && @@ -28,7 +28,7 @@ class CustomNavigationObserver extends NavigatorObserver { } else if (!_isWorkDone && (routeName == LiveStockRoutes.init || routeName == LiveStockRoutes.auth)) { - } + }*/ super.didPush(route, previousRoute); // tLog('CustomNavigationObserver: didPush - $routeName'); } diff --git a/lib/infrastructure/service/token_storage_service.dart b/lib/infrastructure/service/token_storage_service.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/presentation/pages/modules/logic.dart b/lib/presentation/pages/modules/logic.dart index a82f9b1..fb622c6 100644 --- a/lib/presentation/pages/modules/logic.dart +++ b/lib/presentation/pages/modules/logic.dart @@ -28,21 +28,20 @@ class ModulesLogic extends GetxController { tokenService.appModule.value = module; } + void onTapCard(Module module, int index) async { + isLoading.value = !isLoading.value; + selectedIndex.value = index; + await Future.delayed(Duration(milliseconds: 200)); // Simulate loading delay + navigateToModule(module); + } + Future navigateToModule(Module module) async { - var target = getTargetPage(module).entries.first; + var target = getAuthTargetPage(module).entries.first; if (target.value != null) { await target.value; } - - Get.offAllNamed(target.key); - } - - void onTapCard(Module module, int index) async { - isLoading.value = true; - selectedIndex.value = index; - saveModule(module); - await Future.delayed(Duration(milliseconds: 500)); // Simulate loading delay - navigateToModule(module); + isLoading.value = !isLoading.value; + Get.toNamed(target.key, arguments: module); } } diff --git a/lib/presentation/pages/splash/logic.dart b/lib/presentation/pages/splash/logic.dart index 2250dbe..562829a 100644 --- a/lib/presentation/pages/splash/logic.dart +++ b/lib/presentation/pages/splash/logic.dart @@ -154,7 +154,7 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { if (isUpdateNeeded) return; tokenService.getModule(); final module = tokenService.appModule.value; - final target = getTargetPage(module); + final target = getTargetModule(module); if (target.values.first != null) { await target.values.first; } diff --git a/lib/presentation/routes/app_pages.dart b/lib/presentation/routes/app_pages.dart index dbb99f0..66ab559 100644 --- a/lib/presentation/routes/app_pages.dart +++ b/lib/presentation/routes/app_pages.dart @@ -6,6 +6,7 @@ import 'package:rasadyar_app/presentation/pages/system_design/system_design.dart import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/di/chicken_di.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/injection/inspection_di.dart'; import 'package:rasadyar_inspection/inspection.dart'; import 'package:rasadyar_livestock/injection/live_stock_di.dart'; import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; @@ -40,14 +41,28 @@ sealed class AppPages { ]; } -Map?> getTargetPage(Module? value) { + +Map?> getTargetModule(Module? value) { switch (value) { case Module.inspection: - return {InspectionRoutes.init:null}; + return {InspectionRoutes.init:setupInspectionDI()}; case Module.liveStocks: return {LiveStockRoutes.init: setupLiveStockDI()}; case Module.chicken: - return {ChickenRoutes.init : null}; + return {ChickenRoutes.init : setupChickenDI()}; + default: + return {AppPaths.moduleList : null}; + } +} + +Map?> getAuthTargetPage(Module? value) { + switch (value) { + case Module.inspection: + return {InspectionRoutes.auth:setupInspectionDI()}; + case Module.liveStocks: + return {LiveStockRoutes.auth: setupLiveStockDI()}; + case Module.chicken: + return {ChickenRoutes.auth : setupChickenDI()}; default: return {AppPaths.moduleList : null}; } diff --git a/packages/chicken/lib/data/data_source/remote/chicken/chicken_remote_imp.dart b/packages/chicken/lib/data/data_source/remote/chicken/chicken_remote_imp.dart index 57df1fa..4fa0122 100644 --- a/packages/chicken/lib/data/data_source/remote/chicken/chicken_remote_imp.dart +++ b/packages/chicken/lib/data/data_source/remote/chicken/chicken_remote_imp.dart @@ -36,7 +36,6 @@ class ChickenRemoteDatasourceImp implements ChickenRemoteDatasource { required String token, CancelToken? cancelToken, }) async { - eLog(_httpClient.baseUrl); var res = await _httpClient.get( '/roles-products/?role=Steward', headers: {'Authorization': 'Bearer $token'}, diff --git a/packages/chicken/lib/data/di/chicken_di.dart b/packages/chicken/lib/data/di/chicken_di.dart index d85f410..402abce 100644 --- a/packages/chicken/lib/data/di/chicken_di.dart +++ b/packages/chicken/lib/data/di/chicken_di.dart @@ -1,19 +1,27 @@ import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/common/dio_error_handler.dart'; +import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart'; +import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart'; import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote.dart'; import 'package:rasadyar_chicken/data/data_source/remote/auth/auth_remote_imp.dart'; +import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart'; +import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote_imp.dart'; +import 'package:rasadyar_chicken/data/repositories/auth/auth_repository.dart'; import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart'; +import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository.dart'; +import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart'; import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.instance; Future setupChickenDI() async { + tLog("setup 1"); diChicken.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); diChicken.registerLazySingleton( () => AppInterceptor( - //فعلا سامانه مرغ برای رفرش توکن چیزی ندارد + // سامانه مرغ فعلاً رفرش توکن ندارد refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { await tokenService.saveAccessToken(newToken); @@ -26,24 +34,43 @@ Future setupChickenDI() async { instanceName: 'chickenInterceptor', ); + var baseUrl = tokenService.baseurl.value; + diChicken.registerLazySingleton( - () => - DioRemote(interceptors: diChicken.get(instanceName: 'chickenInterceptor')), + () => DioRemote( + baseUrl: baseUrl, + interceptors: diChicken.get(instanceName: 'chickenInterceptor'), + ), ); final dioRemote = diChicken.get(); await dioRemote.init(); - diChicken.registerLazySingleton( + diChicken.registerLazySingleton( () => AuthRemoteDataSourceImp(diChicken.get()), ); - diChicken.registerLazySingleton( - () => AuthRepositoryImpl(diChicken.get()), + diChicken.registerLazySingleton( + () => AuthRepositoryImpl(diChicken.get()), + instanceName: 'oldRepo', + ); + + diChicken.registerLazySingleton( + () => ChickenRemoteDatasourceImp(diChicken.get()), + ); + + diChicken.registerLazySingleton(() => ChickenLocalDataSourceImp()); + + diChicken.registerLazySingleton( + () => ChickenRepositoryImp( + remote: diChicken.get(), + local: diChicken.get(), + ), ); } Future newSetupAuthDI(String newUrl) async { + tLog("setup 2"); var tokenService = Get.find(); if (tokenService.baseurl.value == null) { await tokenService.saveBaseUrl(newUrl); @@ -52,7 +79,10 @@ Future newSetupAuthDI(String newUrl) async { if (diChicken.isRegistered()) { await diChicken.unregister(); diChicken.registerLazySingleton( - () => DioRemote(baseUrl: newUrl, interceptors: diChicken.get()), + () => DioRemote( + baseUrl: newUrl, + interceptors: diChicken.get(instanceName: 'chickenInterceptor'), + ), ); final dioRemote = diChicken.get(); await dioRemote.init(); @@ -60,15 +90,38 @@ Future newSetupAuthDI(String newUrl) async { if (diChicken.isRegistered()) { await diChicken.unregister(); - diChicken.registerLazySingleton( + diChicken.registerLazySingleton( () => AuthRemoteDataSourceImp(diChicken.get()), ); } - if (diChicken.isRegistered()) { - await diChicken.unregister(); - diChicken.registerLazySingleton( + if (diChicken.isRegistered(instanceName: 'oldRepo')) { + await diChicken.unregister(instanceName: 'oldRepo'); + diChicken.registerLazySingleton( () => AuthRepositoryImpl(diChicken.get()), + instanceName: 'newRepo', + ); + } + + if (diChicken.isRegistered()) { + await diChicken.unregister(); + diChicken.registerLazySingleton( + () => ChickenRemoteDatasourceImp(diChicken.get()), + ); + } + + if (diChicken.isRegistered()) { + await diChicken.unregister(); + diChicken.registerLazySingleton(() => ChickenLocalDataSourceImp()); + } + + if (diChicken.isRegistered()) { + await diChicken.unregister(); + diChicken.registerLazySingleton( + () => ChickenRepositoryImp( + remote: diChicken.get(), + local: diChicken.get(), + ), ); } } diff --git a/packages/chicken/lib/data/repositories/chicken/chicken_repository_imp.dart b/packages/chicken/lib/data/repositories/chicken/chicken_repository_imp.dart index d9d829e..63e9545 100644 --- a/packages/chicken/lib/data/repositories/chicken/chicken_repository_imp.dart +++ b/packages/chicken/lib/data/repositories/chicken/chicken_repository_imp.dart @@ -1,5 +1,5 @@ -import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart'; -import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote_imp.dart'; +import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart'; +import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart'; import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart'; import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart'; import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart'; @@ -29,8 +29,8 @@ import 'package:rasadyar_core/core.dart'; import 'chicken_repository.dart'; class ChickenRepositoryImp implements ChickenRepository { - final ChickenRemoteDatasourceImp remote; - final ChickenLocalDataSourceImp local; + final ChickenRemoteDatasource remote; + final ChickenLocalDataSource local; ChickenRepositoryImp({required this.remote, required this.local}); diff --git a/packages/chicken/lib/presentation/pages/auth/logic.dart b/packages/chicken/lib/presentation/pages/auth/logic.dart index bec91ab..a73a304 100644 --- a/packages/chicken/lib/presentation/pages/auth/logic.dart +++ b/packages/chicken/lib/presentation/pages/auth/logic.dart @@ -1,12 +1,13 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/common/dio_error_handler.dart'; import 'package:rasadyar_chicken/data/di/chicken_di.dart'; import 'package:rasadyar_chicken/data/models/request/login_request/login_request_model.dart'; import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart'; import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart'; -import 'package:rasadyar_chicken/data/repositories/auth/auth_repository_imp.dart'; +import 'package:rasadyar_chicken/data/repositories/auth/auth_repository.dart'; import 'package:rasadyar_chicken/presentation/widget/captcha/logic.dart'; import 'package:rasadyar_core/core.dart'; @@ -44,7 +45,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { RxInt secondsRemaining = 120.obs; Timer? _timer; - AuthRepositoryImpl authRepository = diChicken.get(); + AuthRepository authRepository = diChicken.get(instanceName: 'oldRepo'); final Module _module = Get.arguments; @@ -64,7 +65,6 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { @override void onReady() { super.onReady(); - } @override @@ -118,7 +118,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { Future submitLoginForm() async { if (!_isFormValid()) return; - AuthRepositoryImpl authTmp = diChicken.get(instanceName: 'newUrl'); + AuthRepository authTmp = diChicken.get(instanceName: 'newRepo'); isLoading.value = true; await safeCall( call: () => authTmp.login( @@ -131,6 +131,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { await tokenStorageService.saveModule(_module); await tokenStorageService.saveAccessToken(result?.accessToken ?? ''); await tokenStorageService.saveRefreshToken(result?.accessToken ?? ''); + Get.offAndToNamed(ChickenRoutes.init); }, onError: (error, stackTrace) { if (error is DioException) { diff --git a/packages/chicken/lib/presentation/pages/auth/view.dart b/packages/chicken/lib/presentation/pages/auth/view.dart index 1700994..2fb0544 100644 --- a/packages/chicken/lib/presentation/pages/auth/view.dart +++ b/packages/chicken/lib/presentation/pages/auth/view.dart @@ -13,31 +13,34 @@ class AuthPage extends GetView { return Scaffold( body: Stack( alignment: Alignment.center, + fit: StackFit.expand, children: [ Assets.vec.bgAuthSvg.svg(fit: BoxFit.fill), - Padding( - padding: EdgeInsets.symmetric(horizontal: 10.r), - child: FadeTransition( - opacity: controller.textAnimation, - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - spacing: 12, - children: [ - Text( - 'به سامانه رصدیار خوش آمدید!', - textAlign: TextAlign.right, - style: AppFonts.yekan25Bold.copyWith(color: Colors.white), - ), - Text( - 'سامانه رصد و پایش زنجیره تامین، تولید و توزیع کالا های اساسی', - textAlign: TextAlign.center, - style: AppFonts.yekan16.copyWith(color: Colors.white), - ), - ], + Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 10.r), + child: FadeTransition( + opacity: controller.textAnimation, + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + spacing: 12, + children: [ + Text( + 'به سامانه رصدیار خوش آمدید!', + textAlign: TextAlign.right, + style: AppFonts.yekan25Bold.copyWith(color: Colors.white), + ), + Text( + 'سامانه رصد و پایش زنجیره تامین، تولید و توزیع کالا های اساسی', + textAlign: TextAlign.center, + style: AppFonts.yekan16.copyWith(color: Colors.white), + ), + ], + ), ), ), ), diff --git a/packages/chicken/lib/presentation/pages/root/logic.dart b/packages/chicken/lib/presentation/pages/root/logic.dart index 570614a..286803e 100644 --- a/packages/chicken/lib/presentation/pages/root/logic.dart +++ b/packages/chicken/lib/presentation/pages/root/logic.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; +import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart'; import 'package:rasadyar_chicken/data/data_source/local/chicken_local_imp.dart'; import 'package:rasadyar_chicken/data/di/chicken_di.dart'; import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart'; @@ -32,7 +33,7 @@ class RootLogic extends GetxController { late DioRemote dioRemote; var tokenService = Get.find(); late ChickenRepository chickenRepository; - late ChickenLocalDataSourceImp localDatasource; + late ChickenLocalDataSource localDatasource; RxList errorLocationType = RxList(); RxMap inventoryExpandedList = RxMap(); @@ -46,8 +47,9 @@ class RootLogic extends GetxController { @override void onInit() { super.onInit(); - localDatasource = diChicken.get(); - chickenRepository = diChicken.get(); + localDatasource = diChicken.get(); + chickenRepository = diChicken.get(); + localDatasource.openBox().then((value) async { widelyUsedList.value = localDatasource.getAllWidely(); }); diff --git a/packages/core/lib/data/services/token_storage_service.dart b/packages/core/lib/data/services/token_storage_service.dart index 6d0f3c3..a5fb162 100644 --- a/packages/core/lib/data/services/token_storage_service.dart +++ b/packages/core/lib/data/services/token_storage_service.dart @@ -56,9 +56,11 @@ class TokenStorageService extends GetxService { } Future saveModule(Module input) async { + eLog("before saveModule = ${appModule.value} ==> $input"); await _localStorage.save(boxName: _tokenBoxName, key: _moduleKey, value: input); appModule.value = input; appModule.refresh(); + eLog("after saveModule = ${appModule.value} ==> $input"); } Module? getModule() { diff --git a/packages/core/lib/infrastructure/remote/dio_remote.dart b/packages/core/lib/infrastructure/remote/dio_remote.dart index 184595a..6e261c0 100644 --- a/packages/core/lib/infrastructure/remote/dio_remote.dart +++ b/packages/core/lib/infrastructure/remote/dio_remote.dart @@ -10,6 +10,7 @@ class DioRemote implements IHttpClient { @override Future init() async { + fLog(baseUrl); dio = Dio(BaseOptions(baseUrl: baseUrl ?? '')); if (interceptors != null) { interceptors!.dio = dio; diff --git a/packages/livestock/lib/presentation/page/map/widget/map_widget/view.dart b/packages/livestock/lib/presentation/page/map/widget/map_widget/view.dart index 0eafac7..c260bd0 100644 --- a/packages/livestock/lib/presentation/page/map/widget/map_widget/view.dart +++ b/packages/livestock/lib/presentation/page/map/widget/map_widget/view.dart @@ -16,13 +16,6 @@ class MapWidget extends GetView { fit: StackFit.expand, children: [ - Positioned( - top: 10, - right: 0, - left: 0, - child: RMarquee(text: "This is scrolling text from right to left..."), - ), - ObxValue((errorType) { if (errorType.isNotEmpty) {