fix : di for Role

This commit is contained in:
2025-09-03 11:43:52 +03:30
parent ebec27b630
commit 8e9768daf6
9 changed files with 74 additions and 86 deletions

View File

@@ -3,7 +3,6 @@ import 'package:rasadyar_chicken/data/di/chicken_di.dart';
import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_chicken/presentation/routes/routes.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'package:rasadyar_core/data/model/local/target_page/target_page.dart'; import 'package:rasadyar_core/data/model/local/target_page/target_page.dart';
import 'package:rasadyar_core/hive_registrar.g.dart';
import 'package:rasadyar_inspection/injection/inspection_di.dart'; import 'package:rasadyar_inspection/injection/inspection_di.dart';
import 'package:rasadyar_inspection/inspection.dart'; import 'package:rasadyar_inspection/inspection.dart';
import 'package:rasadyar_livestock/injection/live_stock_di.dart'; import 'package:rasadyar_livestock/injection/live_stock_di.dart';
@@ -13,20 +12,20 @@ class LocalStorageService extends GetxService {
static const String _targetPageBox = 'targetPageBox'; static const String _targetPageBox = 'targetPageBox';
final HiveLocalStorage _localStorage = diCore.get<HiveLocalStorage>(); final HiveLocalStorage _localStorage = diCore.get<HiveLocalStorage>();
late Box<TargetPage> _targetBox;
Future<void> init() async { Future<void> init() async {
Hive.registerAdapters();
await _localStorage.init();
await _localStorage.openBox<TargetPage>(_targetPageBox); await _localStorage.openBox<TargetPage>(_targetPageBox);
seedTargetPage();
} }
Future<void> seedTargetPage() async { Future<void> seedTargetPage() async {
var existing = getTargetPage(null); var existing = getTargetPage(null);
if (existing == null) { if (existing == null) {
_localStorage.addAll( _localStorage.addAll<TargetPage>(
boxName: _targetPageBox, boxName: _targetPageBox,
values: [ values: <TargetPage>[
TargetPage( TargetPage(
route: InspectionRoutes.init, route: InspectionRoutes.init,
module: Module.inspection, module: Module.inspection,
@@ -59,24 +58,18 @@ class LocalStorageService extends GetxService {
await _localStorage.add(boxName: _targetPageBox, value: targetPage); await _localStorage.add(boxName: _targetPageBox, value: targetPage);
} }
Iterable<Future?>? getFunctionsList(List<String>? functions) { Iterable<Future>? getFunctionsList(List<String>? functions) {
return functions?.map((e) => getFunctionByName(e)); return functions?.map((e) async => getFunctionByName(e));
} }
Future? getFunctionByName(String? name) { Future? getFunctionByName(String? name) {
switch (name) { switch (name) {
case "setupInspectionDI": case "setupInspectionDI":
return setupInspectionDI(); return setupInspectionDI();
case "removeInspectionDI":
return removeInspectionDI();
case "setupLiveStockDI": case "setupLiveStockDI":
return setupLiveStockDI(); return setupLiveStockDI();
case "removeLiveStockDI":
return removeLiveStockDI();
case "setupChickenDI": case "setupChickenDI":
return setupChickenDI(); return setupChickenDI();
case "removeChickenDI":
return removeChickenDI();
default: default:
return null; return null;
} }

View File

@@ -12,8 +12,9 @@ Future<void> main() async {
await Hive.initFlutter(); await Hive.initFlutter();
await setupPreInjection(); await setupPreInjection();
Get.put(TokenStorageService()); Get.put(TokenStorageService());
Get.put(LocalStorageService());
await Get.find<TokenStorageService>().init(); await Get.find<TokenStorageService>().init();
Get.put(LocalStorageService());
await Get.find<LocalStorageService>().init();
Get.put<AuthRouteResolver>(AppAuthRouteResolver()); Get.put<AuthRouteResolver>(AppAuthRouteResolver());
Get.put(AuthMiddleware()); Get.put(AuthMiddleware());

View File

@@ -89,7 +89,7 @@ class ModulesLogic extends GetxController {
selectedIndex.value = index; selectedIndex.value = index;
await Future.delayed(Duration(milliseconds: 300)); await Future.delayed(Duration(milliseconds: 300));
selectedIndex.value = null; selectedIndex.value = null;
saveModule(module); // saveModule(module);
await navigateToModule(module); await navigateToModule(module);
} }
@@ -98,14 +98,14 @@ class ModulesLogic extends GetxController {
if (target.value?[0] != null) { if (target.value?[0] != null) {
isLoading.value = !isLoading.value; isLoading.value = !isLoading.value;
await target.value?[0]; await target.value?[0]?.call();
isLoading.value = !isLoading.value; isLoading.value = !isLoading.value;
} }
await Get.toNamed(target.key, arguments: module); await Get.toNamed(target.key, arguments: module);
if (target.value?[1] != null) { if (target.value?[1] != null) {
await target.value?[1]; await target.value?[1]?.call();
} }
} }

View File

@@ -87,26 +87,25 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
children: [ children: [
const Text('در حال دانلود بروزرسانی برنامه...'), const Text('در حال دانلود بروزرسانی برنامه...'),
Obx( Obx(
() => () => Row(
Row( spacing: 8,
spacing: 8, children: [
children: [ Expanded(
Expanded( child: LinearProgressIndicator(
child: LinearProgressIndicator( value: percent.value,
value: percent.value, color: AppColor.greenNormal,
color: AppColor.greenNormal, minHeight: 4,
minHeight: 4, ),
),
),
SizedBox(
width: 55.w,
child: Text(
'${(percent.value * 100).toStringAsFixed(2)}%',
textAlign: TextAlign.center,
),
),
],
), ),
SizedBox(
width: 55.w,
child: Text(
'${(percent.value * 100).toStringAsFixed(2)}%',
textAlign: TextAlign.center,
),
),
],
),
), ),
Row( Row(
@@ -119,9 +118,9 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
height: 40.h, height: 40.h,
onPressed: data.value != null onPressed: data.value != null
? () { ? () {
installApk(); installApk();
Get.back(); Get.back();
} }
: null, : null,
text: 'نصب', text: 'نصب',
); );
@@ -163,10 +162,7 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin {
await Future.wait(funs ?? []); await Future.wait(funs ?? []);
Get.offAndToNamed(target.route!); Get.offAndToNamed(target.route!);
} }
} catch (e, st) { } catch (e, st) {
debugPrint("onReady error: $e\n$st"); debugPrint("onReady error: $e\n$st");
} }

View File

@@ -44,32 +44,20 @@ sealed class AppPages {
]; ];
} }
Map<String, Future<void>?> getTargetModule(Module? value) {
switch (value) {
case Module.inspection:
return {InspectionRoutes.init: setupInspectionDI()};
case Module.liveStocks:
return {LiveStockRoutes.init: setupLiveStockDI()};
case Module.chicken:
return {ChickenRoutes.initSteward: setupChickenDI()};
default:
return {AppPaths.moduleList: null};
}
}
Map<String, List<Future<void>?>?> getAuthTargetPage(Module? value) { Map<String, List<Future<void> Function()?>?> getAuthTargetPage(Module? value) {
switch (value) { switch (value) {
case Module.inspection: case Module.inspection:
return { return {
InspectionRoutes.auth: [setupInspectionDI(), removeInspectionDI()], InspectionRoutes.auth: [setupInspectionDI, removeInspectionDI],
}; };
case Module.liveStocks: case Module.liveStocks:
return { return {
LiveStockRoutes.auth: [setupLiveStockDI(), removeLiveStockDI()], LiveStockRoutes.auth: [setupLiveStockDI, removeLiveStockDI],
}; };
case Module.chicken: case Module.chicken:
return { return {
ChickenRoutes.auth: [setupChickenDI(), removeChickenDI()], ChickenRoutes.auth: [setupChickenDI, removeChickenDI],
}; };
default: default:
return {AppPaths.moduleList: null}; return {AppPaths.moduleList: null};

View File

@@ -12,7 +12,7 @@ import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository.da
import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart'; import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart';
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
GetIt diChicken = GetIt.instance; GetIt diChicken = GetIt.asNewInstance();
Future<void> setupChickenDI() async { Future<void> setupChickenDI() async {
diChicken.registerSingleton(DioErrorHandler()); diChicken.registerSingleton(DioErrorHandler());
@@ -45,9 +45,7 @@ Future<void> setupChickenDI() async {
final dioRemote = diChicken.get<DioRemote>(); final dioRemote = diChicken.get<DioRemote>();
await dioRemote.init(); await dioRemote.init();
diChicken.registerLazySingleton<AuthRemoteDataSource>( diChicken.registerLazySingleton<AuthRemoteDataSource>(() => AuthRemoteDataSourceImp(dioRemote));
() => AuthRemoteDataSourceImp(dioRemote),
);
diChicken.registerLazySingleton<AuthRepository>( diChicken.registerLazySingleton<AuthRepository>(
() => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>()), () => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>()),
@@ -78,7 +76,7 @@ Future<void> newSetupAuthDI(String newUrl) async {
await diChicken.unregister<AppInterceptor>(instanceName: 'chickenInterceptor'); await diChicken.unregister<AppInterceptor>(instanceName: 'chickenInterceptor');
} }
diChicken.registerLazySingleton<AppInterceptor>( diChicken.registerLazySingleton<AppInterceptor>(
() => AppInterceptor( () => AppInterceptor(
refreshTokenCallback: () async => null, refreshTokenCallback: () async => null,
saveTokenCallback: (String newToken) async { saveTokenCallback: (String newToken) async {
await tokenService.saveAccessToken(newToken); await tokenService.saveAccessToken(newToken);
@@ -96,7 +94,7 @@ Future<void> newSetupAuthDI(String newUrl) async {
await diChicken.unregister<DioRemote>(); await diChicken.unregister<DioRemote>();
} }
diChicken.registerLazySingleton<DioRemote>( diChicken.registerLazySingleton<DioRemote>(
() => DioRemote( () => DioRemote(
baseUrl: newUrl, baseUrl: newUrl,
interceptors: diChicken.get<AppInterceptor>(instanceName: 'chickenInterceptor'), interceptors: diChicken.get<AppInterceptor>(instanceName: 'chickenInterceptor'),
), ),
@@ -109,10 +107,12 @@ Future<void> newSetupAuthDI(String newUrl) async {
await reRegister<AuthRepository>(() => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>())); await reRegister<AuthRepository>(() => AuthRepositoryImpl(diChicken.get<AuthRemoteDataSource>()));
await reRegister<ChickenRemoteDatasource>(() => ChickenRemoteDatasourceImp(dioRemote)); await reRegister<ChickenRemoteDatasource>(() => ChickenRemoteDatasourceImp(dioRemote));
await reRegister<ChickenLocalDataSource>(() => ChickenLocalDataSourceImp()); await reRegister<ChickenLocalDataSource>(() => ChickenLocalDataSourceImp());
await reRegister<ChickenRepository>(() => ChickenRepositoryImp( await reRegister<ChickenRepository>(
remote: diChicken.get<ChickenRemoteDatasource>(), () => ChickenRepositoryImp(
local: diChicken.get<ChickenLocalDataSource>(), remote: diChicken.get<ChickenRemoteDatasource>(),
)); local: diChicken.get<ChickenLocalDataSource>(),
),
);
} }
Future<void> reRegister<T extends Object>(T Function() factory) async { Future<void> reRegister<T extends Object>(T Function() factory) async {
@@ -121,8 +121,11 @@ Future<void> reRegister<T extends Object>(T Function() factory) async {
} }
diChicken.registerLazySingleton<T>(factory); diChicken.registerLazySingleton<T>(factory);
} }
Future<void> removeChickenDI() async { Future<void> removeChickenDI() async {
if (diChicken.isRegistered<DioErrorHandler>()) { eLog("removeChickenDI");
await diChicken.resetScope();
/* if (diChicken.isRegistered<DioErrorHandler>()) {
diChicken.unregister<DioErrorHandler>(); diChicken.unregister<DioErrorHandler>();
} }
if (diChicken.isRegistered<AppInterceptor>(instanceName: 'chickenInterceptor')) { if (diChicken.isRegistered<AppInterceptor>(instanceName: 'chickenInterceptor')) {
@@ -145,5 +148,5 @@ Future<void> removeChickenDI() async {
} }
if (diChicken.isRegistered<ChickenRepository>()) { if (diChicken.isRegistered<ChickenRepository>()) {
diChicken.unregister<ChickenRepository>(); diChicken.unregister<ChickenRepository>();
} }*/
} }

View File

@@ -9,7 +9,7 @@ import 'package:rasadyar_inspection/data/repositories/user/user_repository_imp.d
import 'package:rasadyar_inspection/data/utils/dio_exception_handeler.dart'; import 'package:rasadyar_inspection/data/utils/dio_exception_handeler.dart';
import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; import 'package:rasadyar_inspection/presentation/routes/app_routes.dart';
GetIt diInspection = GetIt.instance; GetIt diInspection = GetIt.asNewInstance();
Future<void> setupInspectionDI() async { Future<void> setupInspectionDI() async {
diInspection.registerSingleton(DioErrorHandler()); diInspection.registerSingleton(DioErrorHandler());
@@ -71,7 +71,9 @@ Future<void> setupInspectionDI() async {
Future<void> removeInspectionDI() async { Future<void> removeInspectionDI() async {
if (diInspection.isRegistered<DioErrorHandler>()) { eLog("removeInspectionDI");
await diInspection.resetScope();
/* if (diInspection.isRegistered<DioErrorHandler>()) {
diInspection.unregister<DioErrorHandler>(); diInspection.unregister<DioErrorHandler>();
} }
if (diInspection.isRegistered<AppInterceptor>()) { if (diInspection.isRegistered<AppInterceptor>()) {
@@ -100,5 +102,5 @@ Future<void> removeInspectionDI() async {
} }
if (diInspection.isRegistered<ImagePicker>()) { if (diInspection.isRegistered<ImagePicker>()) {
diInspection.unregister<ImagePicker>(); diInspection.unregister<ImagePicker>();
} }*/
} }

View File

@@ -19,11 +19,11 @@ extension HiveRegistrar on HiveInterface {
extension IsolatedHiveRegistrar on IsolatedHiveInterface { extension IsolatedHiveRegistrar on IsolatedHiveInterface {
void registerAdapters() { void registerAdapters() {
registerAdapter(HerdLocalAdapter()); registerAdapter(HerdLocalAdapter(), override: true);
registerAdapter(LivestockLocalAdapter()); registerAdapter(LivestockLocalAdapter(), override: true);
registerAdapter(LivestockLocalModelAdapter()); registerAdapter(LivestockLocalModelAdapter(), override: true);
registerAdapter(LocationLocalAdapter()); registerAdapter(LocationLocalAdapter(), override: true);
registerAdapter(RancherLocalAdapter()); registerAdapter(RancherLocalAdapter(), override: true);
registerAdapter(TmpLocationsAdapter()); registerAdapter(TmpLocationsAdapter(), override: true);
} }
} }

View File

@@ -1,5 +1,4 @@
import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_core/core.dart';
import 'package:rasadyar_livestock/data/common/constant.dart';
import 'package:rasadyar_livestock/data/common/dio_exception_handeler.dart'; import 'package:rasadyar_livestock/data/common/dio_exception_handeler.dart';
import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote.dart'; import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote.dart';
import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote_imp.dart'; import 'package:rasadyar_livestock/data/data_source/remote/auth/auth_remote_imp.dart';
@@ -14,10 +13,11 @@ import 'package:rasadyar_livestock/presentation/routes/app_pages.dart';
import '../data/data_source/local/tmp/tmp_local_data-source.dart'; import '../data/data_source/local/tmp/tmp_local_data-source.dart';
GetIt get diLiveStock => GetIt.instance; GetIt diLiveStock= GetIt.asNewInstance();
Future<void> setupLiveStockDI() async { Future<void> setupLiveStockDI() async {
diLiveStock.registerSingleton(DioErrorHandler()); diLiveStock.registerSingleton(DioErrorHandler());
await IsolatedHive.initFlutter(); await IsolatedHive.initFlutter();
IsolatedHive.registerAdapters(); IsolatedHive.registerAdapters();
final tokenService = Get.find<TokenStorageService>(); final tokenService = Get.find<TokenStorageService>();
@@ -30,7 +30,7 @@ Future<void> setupLiveStockDI() async {
diLiveStock.registerLazySingleton<AppInterceptor>( diLiveStock.registerLazySingleton<AppInterceptor>(
() => AppInterceptor( () => AppInterceptor(
refreshTokenCallback: () async { refreshTokenCallback: () async {
// Use lazy access to avoid circular dependency // Use lazy access to avoid circular dependency
final authRepository = diLiveStock.get<AuthRepository>(); final authRepository = diLiveStock.get<AuthRepository>();
final hasAuthenticated = await authRepository.hasAuthenticated(); final hasAuthenticated = await authRepository.hasAuthenticated();
if (hasAuthenticated) { if (hasAuthenticated) {
@@ -95,7 +95,12 @@ Future<void> setupLiveStockDI() async {
} }
Future<void> removeLiveStockDI() async { Future<void> removeLiveStockDI() async {
if (diLiveStock.isRegistered<DioErrorHandler>()) { eLog("removeLiveStockDI");
await diLiveStock.resetScope();
/* if (diLiveStock.isRegistered<DioErrorHandler>()) {
diLiveStock.unregister<DioErrorHandler>(); diLiveStock.unregister<DioErrorHandler>();
} }
if (diLiveStock.isRegistered<AppInterceptor>()) { if (diLiveStock.isRegistered<AppInterceptor>()) {
@@ -121,5 +126,5 @@ Future<void> removeLiveStockDI() async {
} }
if (diLiveStock.isRegistered<ImagePicker>()) { if (diLiveStock.isRegistered<ImagePicker>()) {
diLiveStock.unregister<ImagePicker>(); diLiveStock.unregister<ImagePicker>();
} }*/
} }