diff --git a/lib/infrastructure/service/local_storage_service.dart b/lib/infrastructure/service/local_storage_service.dart deleted file mode 100644 index 498ac4c..0000000 --- a/lib/infrastructure/service/local_storage_service.dart +++ /dev/null @@ -1,77 +0,0 @@ -import 'package:rasadyar_app/presentation/routes/app_pages.dart'; -import 'package:rasadyar_chicken/data/di/chicken_di.dart'; -import 'package:rasadyar_chicken/presentation/routes/routes.dart'; -import 'package:rasadyar_core/core.dart'; -import 'package:rasadyar_core/data/model/local/target_page/target_page.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'; - -class LocalStorageService extends GetxService { - static const String _targetPageBox = 'targetPageBox'; - - final HiveLocalStorage _localStorage = diCore.get(); - - - Future init() async { - await _localStorage.openBox(_targetPageBox); - seedTargetPage(); - - } - - Future seedTargetPage() async { - var existing = getTargetPage(null); - if (existing == null) { - _localStorage.addAll( - boxName: _targetPageBox, - values: [ - TargetPage( - route: InspectionRoutes.init, - module: Module.inspection, - functions: ["setupInspectionDI"], - ), - TargetPage( - route: LiveStockRoutes.init, - module: Module.liveStocks, - functions: ["setupLiveStockDI"], - ), - TargetPage( - route: ChickenRoutes.initSteward, - module: Module.chicken, - functions: ["setupChickenDI"], - ), - TargetPage(route: AppPaths.moduleList), - ], - ); - } - } - - TargetPage? getTargetPage(Module? module) { - var res = _localStorage - .readBox(boxName: _targetPageBox) - ?.firstWhereOrNull((element) => element.module == module); - return res; - } - - Future saveTargetPage(TargetPage targetPage) async { - await _localStorage.add(boxName: _targetPageBox, value: targetPage); - } - - Iterable? getFunctionsList(List? functions) { - return functions?.map((e) async => getFunctionByName(e)); - } - - Future? getFunctionByName(String? name) { - switch (name) { - case "setupInspectionDI": - return setupInspectionDI(); - case "setupLiveStockDI": - return setupLiveStockDI(); - case "setupChickenDI": - return setupChickenDI(); - default: - return null; - } - } -} diff --git a/lib/infrastructure/utils/local_storage_utils.dart b/lib/infrastructure/utils/local_storage_utils.dart new file mode 100644 index 0000000..8df0853 --- /dev/null +++ b/lib/infrastructure/utils/local_storage_utils.dart @@ -0,0 +1,51 @@ +import 'package:rasadyar_app/presentation/routes/app_pages.dart'; +import 'package:rasadyar_chicken/data/di/chicken_di.dart'; +import 'package:rasadyar_chicken/presentation/routes/routes.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'; + +Future seedTargetPage() async { + var box = Hive.box("appBox"); + AppModel appModel = AppModel( + targetPages: [ + TargetPage( + route: InspectionRoutes.init, + module: Module.inspection, + functions: ["setupInspectionDI"], + ), + TargetPage( + route: LiveStockRoutes.init, + module: Module.liveStocks, + functions: ["setupLiveStockDI"], + ), + TargetPage( + route: ChickenRoutes.initSteward, + module: Module.chicken, + functions: ["setupChickenDI"], + ), + TargetPage(route: AppPaths.moduleList), + ], + ); + + box.add(appModel); +} + +Iterable? getFunctionsList(List? functions) { + return functions?.map((e) async => getFunctionByName(e)); +} + +Future? getFunctionByName(String? name) { + switch (name) { + case "setupInspectionDI": + return setupInspectionDI(); + case "setupLiveStockDI": + return setupLiveStockDI(); + case "setupChickenDI": + return setupChickenDI(); + default: + return null; + } +} diff --git a/lib/main.dart b/lib/main.dart index 8026836..cf4f681 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,20 +1,25 @@ import 'package:flutter/material.dart'; import 'package:rasadyar_app/infrastructure/service/app_navigation_observer.dart'; +import 'package:rasadyar_app/infrastructure/utils/local_storage_utils.dart'; import 'package:rasadyar_app/presentation/routes/app_pages.dart'; import 'package:rasadyar_core/core.dart'; -import 'infrastructure/di/di.dart'; -import 'infrastructure/service/local_storage_service.dart'; -import 'presentation/routes/auth_route_resolver_impl.dart'; +import 'infrastructure/di/di.dart'; +import 'presentation/routes/auth_route_resolver_impl.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Hive.initFlutter(); await setupPreInjection(); + Get.put(GService()); + var gService = Get.find(); + await gService.init(); + if (gService.isFirstTime()) { + await seedTargetPage(); + await gService.setIsNotFirstTime(); + } Get.put(TokenStorageService()); await Get.find().init(); - Get.put(LocalStorageService()); - await Get.find().init(); Get.put(AppAuthRouteResolver()); Get.put(AuthMiddleware()); diff --git a/lib/presentation/pages/splash/logic.dart b/lib/presentation/pages/splash/logic.dart index efd507a..2d501cd 100644 --- a/lib/presentation/pages/splash/logic.dart +++ b/lib/presentation/pages/splash/logic.dart @@ -3,7 +3,7 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:rasadyar_app/data/model/app_info_model.dart'; -import 'package:rasadyar_app/infrastructure/service/local_storage_service.dart'; +import 'package:rasadyar_app/infrastructure/utils/local_storage_utils.dart'; import 'package:rasadyar_core/core.dart'; class SplashLogic extends GetxController with GetTickerProviderStateMixin { @@ -17,8 +17,9 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { final RxnString _updateFilePath = RxnString(); final platform = MethodChannel('apk_installer'); final Dio _dio = Dio(); + var gService = Get.find(); var tokenService = Get.find(); - var localService = Get.find(); + AppInfoModel? appInfoModel; @override @@ -153,18 +154,20 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { try { final isUpdateNeeded = await checkVersion(); if (isUpdateNeeded) return; - tokenService.getModule(); - final module = tokenService.appModule.value; - final target = localService.getTargetPage(module); + + final module = gService.getSelectedModule(); + final target = gService.getTargetPage(module); + if (module != null) { + tokenService.setGlobalTokenAndRefToken(module); + } if (target != null) { - var funs = localService.getFunctionsList(target.functions); - await Future.wait(funs ?? []); - + var mFuns = getFunctionsList(target.functions); + await Future.wait(mFuns ?? []); Get.offAndToNamed(target.route!); } } catch (e, st) { - debugPrint("onReady error: $e\n$st"); + eLog("onReady error: $e\n$st"); } }); } @@ -239,11 +242,9 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { Future installApk() async { try { eLog(_updateFilePath.value); - - final dir = await getApplicationDocumentsDirectory(); await platform.invokeMethod('apk_installer', {'appPath': _updateFilePath.value}); } catch (e) { - print("خطا در نصب: $e"); + eLog(e); } } } diff --git a/packages/chicken/lib/data/common/fa_user_role.dart b/packages/chicken/lib/data/common/fa_user_role.dart index 4fafbb1..f237ad4 100644 --- a/packages/chicken/lib/data/common/fa_user_role.dart +++ b/packages/chicken/lib/data/common/fa_user_role.dart @@ -1,3 +1,5 @@ +import 'package:rasadyar_chicken/presentation/routes/routes.dart'; + String getFaUserRole(String? role) { switch (role) { case "Admin": @@ -76,3 +78,83 @@ String getFaUserRole(String? role) { return "نامشخص"; } } + +Map getFaUserRoleWithOnTap(String? role) { + switch (role) { + case "Admin": + return {"ادمین استان": null}; + case "CityOperator": + return {"تعاونی": null}; + case "Poultry": + return {"مرغدار": null}; + case "ProvinceOperator": + return {"مدیر اجرایی": null}; + case "ProvinceFinancial": + return {"مالی اتحادیه": null}; + case "KillHouse": + return {"کشتارگاه": null}; + case "KillHouseVet": + return {"دامپزشک کشتارگاه": null}; + case "VetFarm": + return {"دامپزشک فارم": null}; + case "Driver": + return {"راننده": null}; + case "ProvinceInspector": + return {"بازرس اتحادیه": null}; + case "VetSupervisor": + return {"دامپزشک کل": null}; + case "Jahad": + return {"جهاد کشاورزی استان": null}; + case "CityJahad": + return {"جهاد کشاورزی شهرستان": null}; + case "ProvincialGovernment": + return {"استانداری": null}; + case "Guilds": + return {"صنف": null}; + case "Commerce": + return {"معاونت بازرگانی استان": null}; + case "CityCommerce": + return {"بازرگانی شهرستان": null}; + case "UnitWindow": + return {"پنجره واحد": null}; + case "CityVet": + return {"دامپزشک شهرستان": null}; + case "Observatory": + return {"رصدخانه": null}; + case "ProvinceSupervisor": + return {"ناظر استان": null}; + case "GuildRoom": + return {"اتاق اصناف": null}; + case "PosCompany": + return {"شرکت psp": null}; + case "LiveStockSupport": + return {"پشتیبانی امور دام": null}; + case "SuperAdmin": + return {"ادمین کل": null}; + case "ChainCompany": + return {"شرکت زنجیره": null}; + case "AdminX": + return {"ادمین ایکس": null}; + case "Supporter": + return {"پشتیبان سامانه": null}; + case "Dispenser": + return {"پخش کننده": null}; + case "CityPoultry": + return {"طیور شهرستان": null}; + case "ParentCompany": + return {"شرکت مادر": null}; + case "ColdHouseSteward": + return {"مباشر سردخانه": null}; + case "CityGuild": + return {"اتحادیه پروتئینی": null}; + case "LiveStockProvinceJahad": + return {"جهاد استان": null}; + case "Steward": + return {"مباشر": ChickenRoutes.initSteward}; + case "PoultryScience": + return {"کارشناس طیور": ChickenRoutes.initPoultryScience + }; + default: + return {"نامشخص": null}; + } +} diff --git a/packages/chicken/lib/data/di/chicken_di.dart b/packages/chicken/lib/data/di/chicken_di.dart index 67ea7c9..6b74db6 100644 --- a/packages/chicken/lib/data/di/chicken_di.dart +++ b/packages/chicken/lib/data/di/chicken_di.dart @@ -15,7 +15,11 @@ import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.asNewInstance(); Future setupChickenDI() async { + if (diChicken.isRegistered()) { + await diChicken.unregister(); + } diChicken.registerSingleton(DioErrorHandler()); + var tokenService = Get.find(); diChicken.registerLazySingleton( @@ -23,10 +27,10 @@ Future setupChickenDI() async { // سامانه مرغ فعلاً رفرش توکن ندارد refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { - await tokenService.saveAccessToken(newToken); + await tokenService.saveAccessToken(Module.chicken, newToken); }, clearTokenCallback: () async { - await tokenService.deleteTokens(); + await tokenService.deleteAllTokens(); Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }, ), @@ -69,7 +73,7 @@ Future newSetupAuthDI(String newUrl) async { var tokenService = Get.find(); // همیشه baseUrl جدید رو ذخیره کن - await tokenService.saveBaseUrl(newUrl); + await tokenService.saveBaseUrl(Module.chicken, newUrl); // Re-register AppInterceptor if (diChicken.isRegistered(instanceName: 'chickenInterceptor')) { @@ -79,10 +83,10 @@ Future newSetupAuthDI(String newUrl) async { () => AppInterceptor( refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { - await tokenService.saveAccessToken(newToken); + // await tokenService.saveAccessToken(newToken); }, clearTokenCallback: () async { - await tokenService.deleteTokens(); + await tokenService.deleteAllTokens(); Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }, ), diff --git a/packages/chicken/lib/data/service/chicken_storage_service.dart b/packages/chicken/lib/data/service/chicken_storage_service.dart new file mode 100644 index 0000000..48ce61d --- /dev/null +++ b/packages/chicken/lib/data/service/chicken_storage_service.dart @@ -0,0 +1,8 @@ +import 'package:rasadyar_core/core.dart'; + +class ChickenStorageService extends GetxService { + + + + +} diff --git a/packages/chicken/lib/presentation/pages/auth/logic.dart b/packages/chicken/lib/presentation/pages/auth/logic.dart index 4ba6685..d65daa8 100644 --- a/packages/chicken/lib/presentation/pages/auth/logic.dart +++ b/packages/chicken/lib/presentation/pages/auth/logic.dart @@ -1,12 +1,12 @@ 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/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.dart'; +import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/presentation/widget/captcha/logic.dart'; import 'package:rasadyar_core/core.dart'; @@ -18,7 +18,6 @@ enum OtpStatus { init, sent, verified, reSend } class AuthLogic extends GetxController with GetTickerProviderStateMixin { GlobalKey formKey = GlobalKey(); - late AnimationController _textAnimationController; late Animation textAnimation; RxBool showCard = false.obs; @@ -36,6 +35,8 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { RxnString phoneNumber = RxnString(null); RxBool isLoading = false.obs; RxBool isDisabled = true.obs; + + GService gService = Get.find(); TokenStorageService tokenStorageService = Get.find(); Rx authType = AuthType.useAndPass.obs; @@ -54,21 +55,16 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { super.onInit(); _textAnimationController = - AnimationController(vsync: this, duration: const Duration(milliseconds: 1200)) - ..repeat(reverse: true, count: 2).whenComplete(() { - showCard.value = true; - }); + AnimationController(vsync: this, duration: const Duration(milliseconds: 1200)) + ..repeat(reverse: true, count: 2).whenComplete(() { + showCard.value = true; + }); textAnimation = CurvedAnimation(parent: _textAnimationController, curve: Curves.easeInOut); initUserPassData(); } - @override - void onReady() { - super.onReady(); - } - @override void onClose() { _textAnimationController.dispose(); @@ -110,27 +106,36 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { AuthRepository authTmp = diChicken.get(); isLoading.value = true; await safeCall( - call: () => authTmp.login( - authRequest: { - "username": usernameController.value.text, - "password": passwordController.value.text, - }, - ), + call: () => + authTmp.login( + authRequest: { + "username": usernameController.value.text, + "password": passwordController.value.text, + }, + ), onSuccess: (result) async { + await gService.saveSelectedModule(_module); await tokenStorageService.saveModule(_module); - await tokenStorageService.saveAccessToken(result?.accessToken ?? ''); - await tokenStorageService.saveRefreshToken(result?.accessToken ?? ''); + await tokenStorageService.saveAccessToken(_module, result?.accessToken ?? ''); + await tokenStorageService.saveRefreshToken(_module, result?.accessToken ?? ''); + var tmpRoles = result?.role + ?.where((element) => element == 'PoultryScience' || element == 'Steward') + .toList(); + await tokenStorageService.saveRoles(_module, tmpRoles ?? []); if (rememberMe.value) { await tokenStorageService.saveUserPass( - UserLocalModel( - username: usernameController.value.text, - password: passwordController.value.text, - module: _module, - ), + _module, + usernameController.value.text, + passwordController.value.text, ); } - Get.offAndToNamed(ChickenRoutes.role); + if (tmpRoles!.length > 1) { + Get.offAndToNamed(ChickenRoutes.role); + } else { + Get.offAllNamed(ChickenRoutes.initSteward); + } + }, onError: (error, stackTrace) { if (error is DioException) { @@ -149,8 +154,6 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { onSuccess: (result) async { if (result != null) { await newSetupAuthDI(result.backend ?? ''); - await tokenStorageService.saveApiKey(result.apiKey ?? ''); - await tokenStorageService.saveBaseUrl(result.backend ?? ''); } }, onError: (error, stackTrace) { @@ -164,10 +167,10 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { } void initUserPassData() { - UserLocalModel? userPass = tokenStorageService.getUserPass(_module); - if (userPass != null) { - usernameController.value.text = userPass.username ?? ''; - passwordController.value.text = userPass.password ?? ''; + UserLocalModel? userLocalModel = tokenStorageService.getUserLocal(Module.chicken); + if (userLocalModel?.username != null && userLocalModel?.password != null) { + usernameController.value.text = userLocalModel?.username ?? ''; + passwordController.value.text = userLocalModel?.password ?? ''; rememberMe.value = true; } } diff --git a/packages/chicken/lib/presentation/pages/role/logic.dart b/packages/chicken/lib/presentation/pages/role/logic.dart index 8adfbb6..bec7578 100644 --- a/packages/chicken/lib/presentation/pages/role/logic.dart +++ b/packages/chicken/lib/presentation/pages/role/logic.dart @@ -1,8 +1,19 @@ - - import 'package:rasadyar_core/core.dart'; class RoleLogic extends GetxController { + TokenStorageService tokenService = Get.find(); + GService gService = Get.find(); + RxList roles = [].obs; + + @override + void onInit() { + super.onInit(); + List items = tokenService.getUserLocal(Module.chicken)!.roles ?? []; + if (items.isNotEmpty ?? false) { + roles.assignAll(items); + } + } + @override void onReady() { // TODO: implement onReady diff --git a/packages/chicken/lib/presentation/pages/role/view.dart b/packages/chicken/lib/presentation/pages/role/view.dart index 8653307..fb660f9 100644 --- a/packages/chicken/lib/presentation/pages/role/view.dart +++ b/packages/chicken/lib/presentation/pages/role/view.dart @@ -1,6 +1,6 @@ -import 'dart:ui'; - import 'package:flutter/material.dart'; +import 'package:rasadyar_chicken/data/common/fa_user_role.dart'; +import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart'; import 'package:rasadyar_core/core.dart'; import 'logic.dart'; @@ -10,7 +10,42 @@ class RolePage extends GetView { @override Widget build(BuildContext context) { - return Scaffold( + return BasePage( + hasSearch: true, + hasBack: false, + isBase: true, + routes: ['انتخاب نقش'], + widgets: [ + ObxValue((data) { + return Expanded( + child: GridView.builder( + physics: BouncingScrollPhysics(), + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + mainAxisSpacing: 12.h, + crossAxisSpacing: 12.w, + childAspectRatio: 2, + ), + itemCount: data.length, + hitTestBehavior: HitTestBehavior.opaque, + itemBuilder: (BuildContext context, int index) { + Map role = getFaUserRoleWithOnTap(data[index]); + return roleCard( + title: role.keys.first, + onTap: () async { + String route = role.values.first; + await controller.gService.saveSelectedRole(route); + Get.offAllNamed(route); + }, + ); + }, + ), + ); + }, controller.roles), + ], + ); + + /* return Scaffold( body: Stack( alignment: Alignment.center, children: [ @@ -32,33 +67,37 @@ class RolePage extends GetView { 'انتخاب نقش', style: AppFonts.yekan20Bold.copyWith(color: AppColor.textColor), ), - Expanded( - child: GridView.builder( - physics: BouncingScrollPhysics(), - gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: 250, - mainAxisSpacing: 12, - crossAxisSpacing: 12, - childAspectRatio: 1.5, + ObxValue((data) { + return Expanded( + child: GridView.builder( + physics: BouncingScrollPhysics(), + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: 250, + mainAxisSpacing: 12, + crossAxisSpacing: 12, + childAspectRatio: 1.5, + ), + itemCount: data.length, + hitTestBehavior: HitTestBehavior.opaque, + itemBuilder: (BuildContext context, int index) { + return roleCard(title: getFaUserRole(data[index]), onTap: () {}); + }, ), - itemCount: 3, - hitTestBehavior: HitTestBehavior.opaque, - itemBuilder: (BuildContext context, int index) { - return roleCard(title: index == 0 ? 'نasdsadasdقش $index' : "wlsp", onTap: null); - }, - ), - ), + ); + }, controller.roles), ], ), ), ), ], ), - ); + );*/ } Widget roleCard({required String title, Function()? onTap}) { return Container( + width: 128.w, + height: 48.h, margin: EdgeInsets.all(8.w), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8.r), @@ -67,7 +106,7 @@ class RolePage extends GetView { child: InkWell( onTap: onTap, child: Center( - child: Text(title, style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal)), + child: Text(title, style: AppFonts.yekan12Bold.copyWith(color: AppColor.blueNormal)), ), ), ); diff --git a/packages/chicken/lib/presentation/pages/steward/profile/view.dart b/packages/chicken/lib/presentation/pages/steward/profile/view.dart index 1072469..31d5192 100644 --- a/packages/chicken/lib/presentation/pages/steward/profile/view.dart +++ b/packages/chicken/lib/presentation/pages/steward/profile/view.dart @@ -613,7 +613,7 @@ class ProfilePage extends GetView { text: 'خروج', backgroundColor: AppColor.error, onPressed: () async { - await controller.rootLogic.tokenService.deleteTokens().then((value){ + await controller.rootLogic.tokenService.deleteAllTokens().then((value){ Get.back(); Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }); diff --git a/packages/chicken/lib/presentation/pages/steward/root/logic.dart b/packages/chicken/lib/presentation/pages/steward/root/logic.dart index 8d5096d..26d0dd9 100644 --- a/packages/chicken/lib/presentation/pages/steward/root/logic.dart +++ b/packages/chicken/lib/presentation/pages/steward/root/logic.dart @@ -2,15 +2,12 @@ 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'; import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.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_chicken/presentation/pages/steward/buy/view.dart'; import 'package:rasadyar_chicken/presentation/pages/steward/home/view.dart'; import 'package:rasadyar_chicken/presentation/pages/steward/profile/view.dart'; @@ -53,8 +50,6 @@ class StewardRootLogic extends GetxController { /*localDatasource.openBox().then((value) async { widelyUsedList.value = localDatasource.getAllWidely(); });*/ - - } @override @@ -72,6 +67,7 @@ class StewardRootLogic extends GetxController { } if (widelyUsedList.value?.hasInit != true) { + //TODO localDatasource.initWidleyUsed().then((value) => localDatasource.getAllWidely()); } } @@ -118,7 +114,7 @@ class StewardRootLogic extends GetxController { void rootErrorHandler(DioException error) { handleGeneric(error, () { - tokenService.deleteTokens(); + tokenService.deleteAllTokens(); }); } @@ -158,5 +154,4 @@ class StewardRootLogic extends GetxController { onError: (error, stacktrace) {}, ); } - } diff --git a/packages/core/lib/data/model/local/app_model/app_model.dart b/packages/core/lib/data/model/local/app_model/app_model.dart new file mode 100644 index 0000000..837cec3 --- /dev/null +++ b/packages/core/lib/data/model/local/app_model/app_model.dart @@ -0,0 +1,61 @@ +import 'package:rasadyar_core/core.dart'; + +part 'app_model.g.dart'; + +@HiveType(typeId: appModelTypeId) +class AppModel extends HiveObject { + @HiveField(0, defaultValue: true) + bool? isFirstRun; + + @HiveField(1) + bool? isDarkMode; + + @HiveField(2) + Module? selectedModule; + + @HiveField(3) + List? targetPages; + + AppModel({this.isFirstRun, this.isDarkMode, this.selectedModule, this.targetPages}); + + AppModel copyWith({ + bool? isFirstRun, + bool? isDarkMode, + Module? selectedModule, + List? targetPages, + }) { + return AppModel( + isFirstRun: isFirstRun ?? this.isFirstRun, + isDarkMode: isDarkMode ?? this.isDarkMode, + selectedModule: selectedModule ?? this.selectedModule, + targetPages: targetPages ?? this.targetPages, + ); + } + + @override + String toString() { + return 'AppModel{isFirstRun: $isFirstRun, isDarkMode: $isDarkMode, selectedModule: $selectedModule, targetPages: $targetPages}'; + } +} + +@HiveType(typeId: targetTypeId) +class TargetPage extends HiveObject { + @HiveField(0) + String? route; + + @HiveField(1) + List? functions; + + @HiveField(2) + Module? module; + + TargetPage({required this.route, this.functions, this.module}); + + TargetPage copyWith({String? route, List? functions, Module? module}) { + return TargetPage( + route: route ?? this.route, + functions: functions ?? this.functions, + module: module ?? this.module, + ); + } +} diff --git a/packages/core/lib/data/model/local/app_model/app_model.g.dart b/packages/core/lib/data/model/local/app_model/app_model.g.dart new file mode 100644 index 0000000..d2d338b --- /dev/null +++ b/packages/core/lib/data/model/local/app_model/app_model.g.dart @@ -0,0 +1,90 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'app_model.dart'; + +// ************************************************************************** +// TypeAdapterGenerator +// ************************************************************************** + +class AppModelAdapter extends TypeAdapter { + @override + final typeId = 0; + + @override + AppModel read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return AppModel( + isFirstRun: fields[0] == null ? true : fields[0] as bool?, + isDarkMode: fields[1] as bool?, + selectedModule: fields[2] as Module?, + targetPages: (fields[3] as List?)?.cast(), + ); + } + + @override + void write(BinaryWriter writer, AppModel obj) { + writer + ..writeByte(4) + ..writeByte(0) + ..write(obj.isFirstRun) + ..writeByte(1) + ..write(obj.isDarkMode) + ..writeByte(2) + ..write(obj.selectedModule) + ..writeByte(3) + ..write(obj.targetPages); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AppModelAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} + +class TargetPageAdapter extends TypeAdapter { + @override + final typeId = 1; + + @override + TargetPage read(BinaryReader reader) { + final numOfFields = reader.readByte(); + final fields = { + for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), + }; + return TargetPage( + route: fields[0] as String?, + functions: (fields[1] as List?)?.cast(), + module: fields[2] as Module?, + ); + } + + @override + void write(BinaryWriter writer, TargetPage obj) { + writer + ..writeByte(3) + ..writeByte(0) + ..write(obj.route) + ..writeByte(1) + ..write(obj.functions) + ..writeByte(2) + ..write(obj.module); + } + + @override + int get hashCode => typeId.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is TargetPageAdapter && + runtimeType == other.runtimeType && + typeId == other.typeId; +} diff --git a/packages/core/lib/data/model/local/module/module_model.dart b/packages/core/lib/data/model/local/module/module_model.dart index 2d036cc..37cdcef 100644 --- a/packages/core/lib/data/model/local/module/module_model.dart +++ b/packages/core/lib/data/model/local/module/module_model.dart @@ -1,11 +1,12 @@ -import 'package:rasadyar_core/core.dart'; import 'package:flutter/material.dart'; +import 'package:rasadyar_core/core.dart'; part 'module_model.freezed.dart'; +//این برای صفحه اول لیست ماژول هاست. @freezed -abstract class ModuleModel with _$ModuleModel{ +abstract class ModuleModel with _$ModuleModel { factory ModuleModel({ required String title, required String icon, @@ -14,5 +15,4 @@ abstract class ModuleModel with _$ModuleModel{ required Color titleColor, Module? module, }) = _ModuleModel; - -} \ No newline at end of file +} diff --git a/packages/core/lib/data/model/local/target_page/target_page.dart b/packages/core/lib/data/model/local/target_page/target_page.dart deleted file mode 100644 index ffaf3d9..0000000 --- a/packages/core/lib/data/model/local/target_page/target_page.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:rasadyar_core/core.dart'; - -part 'target_page.g.dart'; - -@HiveType(typeId: targetPageTypeId) -class TargetPage extends HiveObject { - @HiveField(0) - String? route; - - @HiveField(1) - List? functions; - - @HiveField(2) - Module? module; - - TargetPage({required this.route, this.functions, this.module}); -} diff --git a/packages/core/lib/data/model/local/target_page/target_page.g.dart b/packages/core/lib/data/model/local/target_page/target_page.g.dart deleted file mode 100644 index 08e5cd3..0000000 --- a/packages/core/lib/data/model/local/target_page/target_page.g.dart +++ /dev/null @@ -1,44 +0,0 @@ -// GENERATED CODE - DO NOT MODIFY BY HAND - -part of 'target_page.dart'; - -// ************************************************************************** -// TypeAdapterGenerator -// ************************************************************************** - -class TargetPageAdapter extends TypeAdapter { - @override - final typeId = 2; - - @override - TargetPage read(BinaryReader reader) { - final numOfFields = reader.readByte(); - final fields = { - for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(), - }; - return TargetPage( - route: fields[0] as String, - functions: (fields[1] as List?)?.cast(), - ); - } - - @override - void write(BinaryWriter writer, TargetPage obj) { - writer - ..writeByte(2) - ..writeByte(0) - ..write(obj.route) - ..writeByte(1) - ..write(obj.functions); - } - - @override - int get hashCode => typeId.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is TargetPageAdapter && - runtimeType == other.runtimeType && - typeId == other.typeId; -} diff --git a/packages/core/lib/data/model/local/user_local/user_local_model.dart b/packages/core/lib/data/model/local/user_local/user_local_model.dart index d5a4afd..5adc717 100644 --- a/packages/core/lib/data/model/local/user_local/user_local_model.dart +++ b/packages/core/lib/data/model/local/user_local/user_local_model.dart @@ -6,17 +6,25 @@ part 'user_local_model.g.dart'; class UserLocalModel extends HiveObject { @HiveField(0) String? username; + @HiveField(1) String? password; + @HiveField(2) String? token; + @HiveField(3) String? refreshToken; + @HiveField(5) Module? module; + @HiveField(6) String? backend; + @HiveField(7) + List? roles; + UserLocalModel({ this.username, this.password, @@ -24,6 +32,7 @@ class UserLocalModel extends HiveObject { this.refreshToken, this.module, this.backend, + this.roles, }); UserLocalModel copyWith({ @@ -33,6 +42,7 @@ class UserLocalModel extends HiveObject { String? refreshToken, Module? module, String? backend, + List? roles, }) { return UserLocalModel( username: username ?? this.username, @@ -41,11 +51,17 @@ class UserLocalModel extends HiveObject { refreshToken: refreshToken ?? this.refreshToken, module: module ?? this.module, backend: backend ?? this.backend, + roles: roles ?? this.roles, ); } + + @override + String toString() { + return 'UserLocalModel{username: $username, password: $password, token: $token, refreshToken: $refreshToken, module: $module, backend: $backend, roles: $roles}'; + } } -@HiveType(typeId: authModuleTypeId) +@HiveType(typeId: moduleTypeId) enum Module { @HiveField(0) liveStocks, diff --git a/packages/core/lib/data/model/local/user_local/user_local_model.g.dart b/packages/core/lib/data/model/local/user_local/user_local_model.g.dart index cde7c65..5f9ea6f 100644 --- a/packages/core/lib/data/model/local/user_local/user_local_model.g.dart +++ b/packages/core/lib/data/model/local/user_local/user_local_model.g.dart @@ -8,7 +8,7 @@ part of 'user_local_model.dart'; class UserLocalModelAdapter extends TypeAdapter { @override - final typeId = 0; + final typeId = 2; @override UserLocalModel read(BinaryReader reader) { @@ -23,13 +23,14 @@ class UserLocalModelAdapter extends TypeAdapter { refreshToken: fields[3] as String?, module: fields[5] as Module?, backend: fields[6] as String?, + roles: (fields[7] as List?)?.cast(), ); } @override void write(BinaryWriter writer, UserLocalModel obj) { writer - ..writeByte(6) + ..writeByte(7) ..writeByte(0) ..write(obj.username) ..writeByte(1) @@ -41,7 +42,9 @@ class UserLocalModelAdapter extends TypeAdapter { ..writeByte(5) ..write(obj.module) ..writeByte(6) - ..write(obj.backend); + ..write(obj.backend) + ..writeByte(7) + ..write(obj.roles); } @override @@ -57,7 +60,7 @@ class UserLocalModelAdapter extends TypeAdapter { class ModuleAdapter extends TypeAdapter { @override - final typeId = 1; + final typeId = 3; @override Module read(BinaryReader reader) { diff --git a/packages/core/lib/data/model/model.dart b/packages/core/lib/data/model/model.dart index 6d07ea5..93d5138 100644 --- a/packages/core/lib/data/model/model.dart +++ b/packages/core/lib/data/model/model.dart @@ -2,3 +2,4 @@ export 'pagination_model/pagination_model.dart'; export 'local/module/module_model.dart'; export 'local/user_local/user_local_model.dart'; +export 'local/app_model/app_model.dart'; diff --git a/packages/core/lib/data/services/g_service.dart b/packages/core/lib/data/services/g_service.dart new file mode 100644 index 0000000..5659864 --- /dev/null +++ b/packages/core/lib/data/services/g_service.dart @@ -0,0 +1,58 @@ +import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_core/hive_registrar.g.dart'; + +class GService extends GetxService { + final String _boxName = "appBox"; + + late final Box box; + + Future init() async { + Hive.registerAdapters(); + box = await Hive.openBox(_boxName); + } + + bool isFirstTime() { + return box.values.isEmpty; + } + + Module? getSelectedModule() { + if (isFirstTime()) { + return null; + } + var res = box.values.first.selectedModule; + return res; + } + + Future saveSelectedModule(Module module) async { + AppModel model = box.values.first; + model + ..isFirstRun = false + ..selectedModule = module; + + await model.save(); + } + + TargetPage? getTargetPage(Module? module) { + if (isFirstTime()) { + return null; + } + var res = box.values.first.targetPages?.firstWhereOrNull((element) => element.module == module); + return res; + } + + Future saveSelectedRole(String route) async { + AppModel model = box.values.first; + model.targetPages?.first.route = route; + + await model.save(); + AppModel model2 = box.values.first; + + iLog("Saved route: $model2"); + } + + Future setIsNotFirstTime() async { + AppModel model = AppModel(isFirstRun: false); + + await box.add(model); + } +} diff --git a/packages/core/lib/data/services/local_storage_service.dart b/packages/core/lib/data/services/local_storage_service.dart new file mode 100644 index 0000000..6174f0b --- /dev/null +++ b/packages/core/lib/data/services/local_storage_service.dart @@ -0,0 +1,24 @@ +/* +import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_core/data/model/local/target_page/target_page.dart'; + +class LocalStorageService extends GetxService { + static const String _targetPageBox = 'targetPageBox'; + static const String _appBoxName = 'AppBox'; + + final HiveLocalStorage _localStorage = diCore.get(); + + @override + void onInit() async { + super.onInit(); + await _localStorage.openBox(_targetPageBox); + await _localStorage.openBox(_appBoxName); + } + + + + Future saveTargetPage(TargetPage targetPage) async { + await _localStorage.add(boxName: _targetPageBox, value: targetPage); + } +} +*/ diff --git a/packages/core/lib/data/services/services.dart b/packages/core/lib/data/services/services.dart index 893fe8b..c3c7676 100644 --- a/packages/core/lib/data/services/services.dart +++ b/packages/core/lib/data/services/services.dart @@ -1,2 +1,4 @@ export 'auth_middelware.dart'; export 'token_storage_service.dart'; +export 'local_storage_service.dart'; +export 'g_service.dart'; diff --git a/packages/core/lib/data/services/token_storage_service.dart b/packages/core/lib/data/services/token_storage_service.dart index 19a19f2..0e0d3eb 100644 --- a/packages/core/lib/data/services/token_storage_service.dart +++ b/packages/core/lib/data/services/token_storage_service.dart @@ -1,17 +1,9 @@ import 'dart:convert'; import 'package:rasadyar_core/core.dart'; -import 'package:rasadyar_core/hive_registrar.g.dart'; class TokenStorageService extends GetxService { static const String _tokenBoxName = 'TokenBox'; - static const String _userPassBox = 'UserPassBox'; - static const String _appBoxName = 'AppBox'; - static const String _accessTokenKey = 'accessToken'; - static const String _refreshTokenKey = 'refreshToken'; - static const String _baseUrlKey = 'baseUrl'; - static const String _apiKey = 'apiKey'; - static const String _moduleKey = 'moduleSelected'; final FlutterSecureStorage _secureStorage = FlutterSecureStorage(); final HiveLocalStorage _localStorage = diCore.get(); @@ -22,8 +14,6 @@ class TokenStorageService extends GetxService { Rxn appModule = Rxn(null); Future init() async { - Hive.registerAdapters(); - final String? encryptedKey = await _secureStorage.read(key: 'hive_enc_key'); final encryptionKey = encryptedKey != null ? base64Url.decode(encryptedKey) @@ -32,73 +22,106 @@ class TokenStorageService extends GetxService { if (encryptedKey == null) { await _secureStorage.write(key: 'hive_enc_key', value: base64UrlEncode(encryptionKey)); } - - await _localStorage.init(); - await _localStorage.openBox(_tokenBoxName, encryptionCipher: HiveAesCipher(encryptionKey)); - await _localStorage.openBox(_appBoxName); - await _localStorage.openBox(_userPassBox); - - accessToken.value = _localStorage.read(boxName: _tokenBoxName, key: _accessTokenKey); - refreshToken.value = _localStorage.read(boxName: _tokenBoxName, key: _refreshTokenKey); - appModule.value = getModule(); - baseurl.value = _localStorage.read(boxName: _appBoxName, key: _baseUrlKey); + await _localStorage.openBox( + _tokenBoxName, + encryptionCipher: HiveAesCipher(encryptionKey), + ); } - Future saveAccessToken(String token) async { - await _localStorage.save(boxName: _tokenBoxName, key: _accessTokenKey, value: token); + Future saveAccessToken(Module module, String token) async { + UserLocalModel? user = getUserLocal(module); + user?.token = token; + await user?.save(); + accessToken.value = token; accessToken.refresh(); } - Future saveRefreshToken(String token) async { - await _localStorage.save(boxName: _tokenBoxName, key: _refreshTokenKey, value: token); + Future saveRefreshToken(Module module, String token) async { + UserLocalModel? user = getUserLocal(module); + user?.refreshToken = token; + + await user?.save(); + refreshToken.value = token; refreshToken.refresh(); } Future saveModule(Module input) async { - await _localStorage.save(boxName: _tokenBoxName, key: _moduleKey, value: input); + UserLocalModel? user = getUserLocal(input); appModule.value = input; appModule.refresh(); } - Module? getModule() { - return _localStorage.read(boxName: _tokenBoxName, key: _moduleKey); + void setGlobalTokenAndRefToken(Module input) { + UserLocalModel? user = getUserLocal(input); + accessToken.value = user?.token; + refreshToken.value = user?.refreshToken; + baseurl.value = user?.backend; } - Future deleteTokens() async { + Future deleteAllTokens() async { await _localStorage.clear(_tokenBoxName); accessToken.value = null; refreshToken.value = null; } - Future saveBaseUrl(String url) async { - await _localStorage.save(boxName: _appBoxName, key: _baseUrlKey, value: url); + Future deleteModuleTokens(Module module) async { + UserLocalModel? user = getUserLocal(module); + await user?.delete(); + accessToken.value = null; + refreshToken.value = null; + } + + Future saveBaseUrl(Module module, String url) async { + UserLocalModel? user = getUserLocal(module); + if (user == null) { + user = UserLocalModel(module: module, backend: url); + await _localStorage.add( + boxName: _tokenBoxName, + value: UserLocalModel(module: module, backend: url), + ); + } else { + user.backend = url; + await user.save(); + } + baseurl.value = url; baseurl.refresh(); } - void getBaseUrl() { - var url = _localStorage.read(boxName: _appBoxName, key: _baseUrlKey); - baseurl.value = url; + void getBaseUrl(Module module) { + UserLocalModel? user = getUserLocal(module); + baseurl.value = user?.backend; baseurl.refresh(); } - Future saveApiKey(String key) async { - await _localStorage.save(boxName: _tokenBoxName, key: _apiKey, value: key); + Future saveUserPass(Module module, String username, String password) async { + UserLocalModel? user = getUserLocal(module); + + user + ?..username = username + ..password = password; + + user?.save(); } - Future saveUserPass(UserLocalModel model) async { - await _localStorage.save( - boxName: _userPassBox, - key: model.module!.name, - value: model, - ); + Future saveRoles(Module module, List roles) async { + UserLocalModel? user = getUserLocal(module); + + user?.roles = roles; + user?.save(); } - UserLocalModel? getUserPass(Module module) { + Future savePassword(Module module, String password) async { + UserLocalModel? user = getUserLocal(module); + user?.password = password; + await user?.save(); + } + + UserLocalModel? getUserLocal(Module module) { return _localStorage - .readBox(boxName: _userPassBox) + .readBox(boxName: _tokenBoxName) ?.firstWhereOrNull((element) => element.module == module); } } diff --git a/packages/core/lib/hive_registrar.g.dart b/packages/core/lib/hive_registrar.g.dart index b07242d..d576099 100644 --- a/packages/core/lib/hive_registrar.g.dart +++ b/packages/core/lib/hive_registrar.g.dart @@ -3,11 +3,12 @@ // Check in to version control import 'package:hive_ce/hive.dart'; -import 'package:rasadyar_core/data/model/local/target_page/target_page.dart'; +import 'package:rasadyar_core/data/model/local/app_model/app_model.dart'; import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart'; extension HiveRegistrar on HiveInterface { void registerAdapters() { + registerAdapter(AppModelAdapter()); registerAdapter(ModuleAdapter()); registerAdapter(TargetPageAdapter()); registerAdapter(UserLocalModelAdapter()); @@ -16,6 +17,7 @@ extension HiveRegistrar on HiveInterface { extension IsolatedHiveRegistrar on IsolatedHiveInterface { void registerAdapters() { + registerAdapter(AppModelAdapter()); registerAdapter(ModuleAdapter()); registerAdapter(TargetPageAdapter()); registerAdapter(UserLocalModelAdapter()); diff --git a/packages/core/lib/injection/di.dart b/packages/core/lib/injection/di.dart index c7bc829..45228cd 100644 --- a/packages/core/lib/injection/di.dart +++ b/packages/core/lib/injection/di.dart @@ -13,9 +13,6 @@ Future setupAllCoreProvider() async { //max 500MB Map Cashing await FMTCObjectBoxBackend().initialise(); - - - await diCore.allReady(); } @@ -24,7 +21,8 @@ Future _setUpLogger() async { } Future _setupLocalStorage() async { - diCore.registerSingleton(HiveLocalStorage()); + var localStorage = diCore.registerSingleton(HiveLocalStorage()); + await localStorage.init(); } Future _setupRemote() async { diff --git a/packages/core/lib/utils/local/local_utils.dart b/packages/core/lib/utils/local/local_utils.dart index 22a09de..b01a2ab 100644 --- a/packages/core/lib/utils/local/local_utils.dart +++ b/packages/core/lib/utils/local/local_utils.dart @@ -1,16 +1,18 @@ -//Auth -const int authUserLocalModelTypeId = 0; -const int authModuleTypeId = 1; -const int targetPageTypeId = 2; +// app +const int appModelTypeId = 0; +const int targetTypeId = 1; -//chicken -const int chickenWidelyUsedLocalModelTypeId = 3; -const int chickenWidelyUsedLocalItemTypeId = 4; +// auth +const int authUserLocalModelTypeId = 2; +const int moduleTypeId = 3; -//liveStock +// chicken +const int chickenWidelyUsedLocalModelTypeId = 4; +const int chickenWidelyUsedLocalItemTypeId = 5; -const int liveStockDataLocalModelTypeId = 5; -const int liveStockDataRancherLocalModelTypeId = 6; -const int liveStockDataHerdLocalModelTypeId = 7; -const int liveStockDataLocationLocalModelTypeId = 8; -const int liveStockDataLivestockLocalModelTypeId = 9; \ No newline at end of file +// liveStock +const int liveStockDataLocalModelTypeId = 6; +const int liveStockDataRancherLocalModelTypeId = 7; +const int liveStockDataHerdLocalModelTypeId = 8; +const int liveStockDataLocationLocalModelTypeId = 9; +const int liveStockDataLivestockLocalModelTypeId = 10; diff --git a/packages/inspection/lib/injection/inspection_di.dart b/packages/inspection/lib/injection/inspection_di.dart index 3571514..c85d164 100644 --- a/packages/inspection/lib/injection/inspection_di.dart +++ b/packages/inspection/lib/injection/inspection_di.dart @@ -15,17 +15,17 @@ Future setupInspectionDI() async { diInspection.registerSingleton(DioErrorHandler()); var tokenService = Get.find(); if (tokenService.baseurl.value == null) { - await tokenService.saveBaseUrl('https://bazrasbackend.rasadyaar.ir/'); + await tokenService.saveBaseUrl(Module.inspection,'https://bazrasbackend.rasadyaar.ir/'); } diInspection.registerLazySingleton( () => AppInterceptor( //TODO : Update the base URL to the correct one for inspection module refreshTokenCallback: () async => null, saveTokenCallback: (String newToken) async { - await tokenService.saveAccessToken(newToken); + // await tokenService.saveAccessToken(newToken); }, clearTokenCallback: () async { - await tokenService.deleteTokens(); + await tokenService.deleteAllTokens(); Get.offAllNamed(InspectionRoutes.auth, arguments: Module.inspection); }, authArguments: Module.inspection, diff --git a/packages/inspection/lib/presentation/pages/auth/logic.dart b/packages/inspection/lib/presentation/pages/auth/logic.dart index 6b1cfc0..49a2ab4 100644 --- a/packages/inspection/lib/presentation/pages/auth/logic.dart +++ b/packages/inspection/lib/presentation/pages/auth/logic.dart @@ -125,7 +125,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { call: () async => authRepository.login(authRequest: loginRequestModel.toJson()), onSuccess: (result) async { await tokenStorageService.saveModule(_module); - await tokenStorageService.saveRefreshToken(result?.refresh ?? ''); + /*await tokenStorageService.saveRefreshToken(result?.refresh ?? ''); await tokenStorageService.saveAccessToken(result?.access ?? ''); if (rememberMe.value) { await tokenStorageService.saveUserPass( @@ -135,7 +135,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { module: _module, ), ); - } + }*/ Get.offAllNamed(InspectionRoutes.init); }, diff --git a/packages/inspection/lib/presentation/pages/auth/view.dart b/packages/inspection/lib/presentation/pages/auth/view.dart index b0c6431..55ca379 100644 --- a/packages/inspection/lib/presentation/pages/auth/view.dart +++ b/packages/inspection/lib/presentation/pages/auth/view.dart @@ -11,7 +11,12 @@ class AuthPage extends GetView { @override Widget build(BuildContext context) { return Scaffold( - body: Stack( + body:PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, result) { + Get.back(result: -1); + }, + child: Stack( alignment: Alignment.center, fit: StackFit.expand, @@ -98,7 +103,7 @@ class AuthPage extends GetView { ); }), ], - ), + )), ); } diff --git a/packages/livestock/lib/injection/live_stock_di.dart b/packages/livestock/lib/injection/live_stock_di.dart index 7853315..192340c 100644 --- a/packages/livestock/lib/injection/live_stock_di.dart +++ b/packages/livestock/lib/injection/live_stock_di.dart @@ -23,7 +23,7 @@ Future setupLiveStockDI() async { final tokenService = Get.find(); if (tokenService.baseurl.value == null) { - await tokenService.saveBaseUrl('https://api.dam.rasadyar.net/'); + await tokenService.saveBaseUrl(Module.inspection,'https://api.dam.rasadyar.net/'); } // First register AppInterceptor with lazy callbacks @@ -42,10 +42,10 @@ Future setupLiveStockDI() async { return null; }, saveTokenCallback: (String newToken) async { - await tokenService.saveAccessToken(newToken); + // await tokenService.saveAccessToken(newToken); }, clearTokenCallback: () async { - await tokenService.deleteTokens(); + await tokenService.deleteAllTokens(); Get.offAllNamed(LiveStockRoutes.auth, arguments: Module.liveStocks); }, authArguments: Module.liveStocks, diff --git a/packages/livestock/lib/presentation/page/auth/logic.dart b/packages/livestock/lib/presentation/page/auth/logic.dart index a7a1eff..4867a2b 100644 --- a/packages/livestock/lib/presentation/page/auth/logic.dart +++ b/packages/livestock/lib/presentation/page/auth/logic.dart @@ -126,7 +126,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { call: () async => await authRepository.login(authRequest: loginRequestModel.toJson()), onSuccess: (result) async { await tokenStorageService.saveModule(_module); - await tokenStorageService.saveRefreshToken(result?.refresh ?? ''); + /* await tokenStorageService.saveRefreshToken(result?.refresh ?? ''); await tokenStorageService.saveAccessToken(result?.access ?? ''); if (rememberMe.value) { await tokenStorageService.saveUserPass( @@ -136,7 +136,7 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin { module: _module, ), ); - } + }*/ Get.offAllNamed(LiveStockRoutes.init); }, diff --git a/packages/livestock/lib/presentation/page/auth/view.dart b/packages/livestock/lib/presentation/page/auth/view.dart index ea6f953..b17a41b 100644 --- a/packages/livestock/lib/presentation/page/auth/view.dart +++ b/packages/livestock/lib/presentation/page/auth/view.dart @@ -11,7 +11,12 @@ class AuthPage extends GetView { @override Widget build(BuildContext context) { return Scaffold( - body: Stack( + body:PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, result) { + Get.back(result: -1); + }, + child: Stack( alignment: Alignment.center, fit: StackFit.expand, children: [ @@ -97,7 +102,7 @@ class AuthPage extends GetView { ); }), ], - ), + )), ); } diff --git a/packages/livestock/lib/presentation/page/profile/view.dart b/packages/livestock/lib/presentation/page/profile/view.dart index 691088a..1ea95ac 100644 --- a/packages/livestock/lib/presentation/page/profile/view.dart +++ b/packages/livestock/lib/presentation/page/profile/view.dart @@ -683,7 +683,7 @@ class ProfilePage extends GetView { text: 'خروج', backgroundColor: AppColor.error, onPressed: () async { - await controller.rootLogic.tokenService.deleteTokens().then((value) { + await controller.rootLogic.tokenService.deleteAllTokens().then((value) { Get.back(); Get.offAllNamed(LiveStockRoutes.auth, arguments: Module.chicken); });