feat : role And permission
This commit is contained in:
@@ -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<String, String?> 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};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,11 @@ import 'package:rasadyar_core/core.dart';
|
||||
GetIt diChicken = GetIt.asNewInstance();
|
||||
|
||||
Future<void> setupChickenDI() async {
|
||||
if (diChicken.isRegistered<DioErrorHandler>()) {
|
||||
await diChicken.unregister<DioErrorHandler>();
|
||||
}
|
||||
diChicken.registerSingleton(DioErrorHandler());
|
||||
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
|
||||
diChicken.registerLazySingleton<AppInterceptor>(
|
||||
@@ -23,10 +27,10 @@ Future<void> 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<void> newSetupAuthDI(String newUrl) async {
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
|
||||
// همیشه baseUrl جدید رو ذخیره کن
|
||||
await tokenService.saveBaseUrl(newUrl);
|
||||
await tokenService.saveBaseUrl(Module.chicken, newUrl);
|
||||
|
||||
// Re-register AppInterceptor
|
||||
if (diChicken.isRegistered<AppInterceptor>(instanceName: 'chickenInterceptor')) {
|
||||
@@ -79,10 +83,10 @@ Future<void> 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);
|
||||
},
|
||||
),
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class ChickenStorageService extends GetxService {
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -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<FormState> formKey = GlobalKey<FormState>();
|
||||
|
||||
late AnimationController _textAnimationController;
|
||||
late Animation<double> 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<GService>();
|
||||
TokenStorageService tokenStorageService = Get.find<TokenStorageService>();
|
||||
|
||||
Rx<AuthType> 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<AuthRepository>();
|
||||
isLoading.value = true;
|
||||
await safeCall<UserProfileModel?>(
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,19 @@
|
||||
|
||||
|
||||
import 'package:rasadyar_core/core.dart';
|
||||
|
||||
class RoleLogic extends GetxController {
|
||||
TokenStorageService tokenService = Get.find<TokenStorageService>();
|
||||
GService gService = Get.find<GService>();
|
||||
RxList<String> roles = <String>[].obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
List<String> items = tokenService.getUserLocal(Module.chicken)!.roles ?? [];
|
||||
if (items.isNotEmpty ?? false) {
|
||||
roles.assignAll(items);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
// TODO: implement onReady
|
||||
|
||||
@@ -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<RoleLogic> {
|
||||
|
||||
@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<RoleLogic> {
|
||||
'انتخاب نقش',
|
||||
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<RoleLogic> {
|
||||
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)),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -613,7 +613,7 @@ class ProfilePage extends GetView<ProfileLogic> {
|
||||
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);
|
||||
});
|
||||
|
||||
@@ -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) {},
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
61
packages/core/lib/data/model/local/app_model/app_model.dart
Normal file
61
packages/core/lib/data/model/local/app_model/app_model.dart
Normal file
@@ -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<TargetPage>? targetPages;
|
||||
|
||||
AppModel({this.isFirstRun, this.isDarkMode, this.selectedModule, this.targetPages});
|
||||
|
||||
AppModel copyWith({
|
||||
bool? isFirstRun,
|
||||
bool? isDarkMode,
|
||||
Module? selectedModule,
|
||||
List<TargetPage>? 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<String>? functions;
|
||||
|
||||
@HiveField(2)
|
||||
Module? module;
|
||||
|
||||
TargetPage({required this.route, this.functions, this.module});
|
||||
|
||||
TargetPage copyWith({String? route, List<String>? functions, Module? module}) {
|
||||
return TargetPage(
|
||||
route: route ?? this.route,
|
||||
functions: functions ?? this.functions,
|
||||
module: module ?? this.module,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'app_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class AppModelAdapter extends TypeAdapter<AppModel> {
|
||||
@override
|
||||
final typeId = 0;
|
||||
|
||||
@override
|
||||
AppModel read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
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<TargetPage>(),
|
||||
);
|
||||
}
|
||||
|
||||
@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<TargetPage> {
|
||||
@override
|
||||
final typeId = 1;
|
||||
|
||||
@override
|
||||
TargetPage read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return TargetPage(
|
||||
route: fields[0] as String?,
|
||||
functions: (fields[1] as List?)?.cast<String>(),
|
||||
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;
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String>? functions;
|
||||
|
||||
@HiveField(2)
|
||||
Module? module;
|
||||
|
||||
TargetPage({required this.route, this.functions, this.module});
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'target_page.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// TypeAdapterGenerator
|
||||
// **************************************************************************
|
||||
|
||||
class TargetPageAdapter extends TypeAdapter<TargetPage> {
|
||||
@override
|
||||
final typeId = 2;
|
||||
|
||||
@override
|
||||
TargetPage read(BinaryReader reader) {
|
||||
final numOfFields = reader.readByte();
|
||||
final fields = <int, dynamic>{
|
||||
for (int i = 0; i < numOfFields; i++) reader.readByte(): reader.read(),
|
||||
};
|
||||
return TargetPage(
|
||||
route: fields[0] as String,
|
||||
functions: (fields[1] as List?)?.cast<String>(),
|
||||
);
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
@@ -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<String>? 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<String>? 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,
|
||||
|
||||
@@ -8,7 +8,7 @@ part of 'user_local_model.dart';
|
||||
|
||||
class UserLocalModelAdapter extends TypeAdapter<UserLocalModel> {
|
||||
@override
|
||||
final typeId = 0;
|
||||
final typeId = 2;
|
||||
|
||||
@override
|
||||
UserLocalModel read(BinaryReader reader) {
|
||||
@@ -23,13 +23,14 @@ class UserLocalModelAdapter extends TypeAdapter<UserLocalModel> {
|
||||
refreshToken: fields[3] as String?,
|
||||
module: fields[5] as Module?,
|
||||
backend: fields[6] as String?,
|
||||
roles: (fields[7] as List?)?.cast<String>(),
|
||||
);
|
||||
}
|
||||
|
||||
@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<UserLocalModel> {
|
||||
..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<UserLocalModel> {
|
||||
|
||||
class ModuleAdapter extends TypeAdapter<Module> {
|
||||
@override
|
||||
final typeId = 1;
|
||||
final typeId = 3;
|
||||
|
||||
@override
|
||||
Module read(BinaryReader reader) {
|
||||
|
||||
@@ -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';
|
||||
|
||||
58
packages/core/lib/data/services/g_service.dart
Normal file
58
packages/core/lib/data/services/g_service.dart
Normal file
@@ -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<AppModel> box;
|
||||
|
||||
Future<void> init() async {
|
||||
Hive.registerAdapters();
|
||||
box = await Hive.openBox<AppModel>(_boxName);
|
||||
}
|
||||
|
||||
bool isFirstTime() {
|
||||
return box.values.isEmpty;
|
||||
}
|
||||
|
||||
Module? getSelectedModule() {
|
||||
if (isFirstTime()) {
|
||||
return null;
|
||||
}
|
||||
var res = box.values.first.selectedModule;
|
||||
return res;
|
||||
}
|
||||
|
||||
Future<void> 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<void> 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<void> setIsNotFirstTime() async {
|
||||
AppModel model = AppModel(isFirstRun: false);
|
||||
|
||||
await box.add(model);
|
||||
}
|
||||
}
|
||||
24
packages/core/lib/data/services/local_storage_service.dart
Normal file
24
packages/core/lib/data/services/local_storage_service.dart
Normal file
@@ -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<HiveLocalStorage>();
|
||||
|
||||
@override
|
||||
void onInit() async {
|
||||
super.onInit();
|
||||
await _localStorage.openBox<TargetPage>(_targetPageBox);
|
||||
await _localStorage.openBox(_appBoxName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<void> saveTargetPage(TargetPage targetPage) async {
|
||||
await _localStorage.add(boxName: _targetPageBox, value: targetPage);
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -1,2 +1,4 @@
|
||||
export 'auth_middelware.dart';
|
||||
export 'token_storage_service.dart';
|
||||
export 'local_storage_service.dart';
|
||||
export 'g_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<HiveLocalStorage>();
|
||||
@@ -22,8 +14,6 @@ class TokenStorageService extends GetxService {
|
||||
Rxn<Module> appModule = Rxn(null);
|
||||
|
||||
Future<void> 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<UserLocalModel>(_userPassBox);
|
||||
|
||||
accessToken.value = _localStorage.read<String?>(boxName: _tokenBoxName, key: _accessTokenKey);
|
||||
refreshToken.value = _localStorage.read<String?>(boxName: _tokenBoxName, key: _refreshTokenKey);
|
||||
appModule.value = getModule();
|
||||
baseurl.value = _localStorage.read<String?>(boxName: _appBoxName, key: _baseUrlKey);
|
||||
await _localStorage.openBox<UserLocalModel>(
|
||||
_tokenBoxName,
|
||||
encryptionCipher: HiveAesCipher(encryptionKey),
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> saveAccessToken(String token) async {
|
||||
await _localStorage.save(boxName: _tokenBoxName, key: _accessTokenKey, value: token);
|
||||
Future<void> saveAccessToken(Module module, String token) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
user?.token = token;
|
||||
await user?.save();
|
||||
|
||||
accessToken.value = token;
|
||||
accessToken.refresh();
|
||||
}
|
||||
|
||||
Future<void> saveRefreshToken(String token) async {
|
||||
await _localStorage.save(boxName: _tokenBoxName, key: _refreshTokenKey, value: token);
|
||||
Future<void> saveRefreshToken(Module module, String token) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
user?.refreshToken = token;
|
||||
|
||||
await user?.save();
|
||||
|
||||
refreshToken.value = token;
|
||||
refreshToken.refresh();
|
||||
}
|
||||
|
||||
Future<void> 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<Module?>(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<void> deleteTokens() async {
|
||||
Future<void> deleteAllTokens() async {
|
||||
await _localStorage.clear(_tokenBoxName);
|
||||
accessToken.value = null;
|
||||
refreshToken.value = null;
|
||||
}
|
||||
|
||||
Future<void> saveBaseUrl(String url) async {
|
||||
await _localStorage.save(boxName: _appBoxName, key: _baseUrlKey, value: url);
|
||||
Future<void> deleteModuleTokens(Module module) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
await user?.delete();
|
||||
accessToken.value = null;
|
||||
refreshToken.value = null;
|
||||
}
|
||||
|
||||
Future<void> saveBaseUrl(Module module, String url) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
if (user == null) {
|
||||
user = UserLocalModel(module: module, backend: url);
|
||||
await _localStorage.add<UserLocalModel>(
|
||||
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<void> saveApiKey(String key) async {
|
||||
await _localStorage.save(boxName: _tokenBoxName, key: _apiKey, value: key);
|
||||
Future<void> saveUserPass(Module module, String username, String password) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
|
||||
user
|
||||
?..username = username
|
||||
..password = password;
|
||||
|
||||
user?.save();
|
||||
}
|
||||
|
||||
Future<void> saveUserPass(UserLocalModel model) async {
|
||||
await _localStorage.save<UserLocalModel>(
|
||||
boxName: _userPassBox,
|
||||
key: model.module!.name,
|
||||
value: model,
|
||||
);
|
||||
Future<void> saveRoles(Module module, List<String> roles) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
|
||||
user?.roles = roles;
|
||||
user?.save();
|
||||
}
|
||||
|
||||
UserLocalModel? getUserPass(Module module) {
|
||||
Future<void> savePassword(Module module, String password) async {
|
||||
UserLocalModel? user = getUserLocal(module);
|
||||
user?.password = password;
|
||||
await user?.save();
|
||||
}
|
||||
|
||||
UserLocalModel? getUserLocal(Module module) {
|
||||
return _localStorage
|
||||
.readBox<UserLocalModel>(boxName: _userPassBox)
|
||||
.readBox<UserLocalModel>(boxName: _tokenBoxName)
|
||||
?.firstWhereOrNull((element) => element.module == module);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -13,9 +13,6 @@ Future<void> setupAllCoreProvider() async {
|
||||
//max 500MB Map Cashing
|
||||
await FMTCObjectBoxBackend().initialise();
|
||||
|
||||
|
||||
|
||||
|
||||
await diCore.allReady();
|
||||
}
|
||||
|
||||
@@ -24,7 +21,8 @@ Future<void> _setUpLogger() async {
|
||||
}
|
||||
|
||||
Future<void> _setupLocalStorage() async {
|
||||
diCore.registerSingleton<HiveLocalStorage>(HiveLocalStorage());
|
||||
var localStorage = diCore.registerSingleton<HiveLocalStorage>(HiveLocalStorage());
|
||||
await localStorage.init();
|
||||
}
|
||||
|
||||
Future<void> _setupRemote() async {
|
||||
|
||||
@@ -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;
|
||||
// liveStock
|
||||
const int liveStockDataLocalModelTypeId = 6;
|
||||
const int liveStockDataRancherLocalModelTypeId = 7;
|
||||
const int liveStockDataHerdLocalModelTypeId = 8;
|
||||
const int liveStockDataLocationLocalModelTypeId = 9;
|
||||
const int liveStockDataLivestockLocalModelTypeId = 10;
|
||||
|
||||
@@ -15,17 +15,17 @@ Future<void> setupInspectionDI() async {
|
||||
diInspection.registerSingleton(DioErrorHandler());
|
||||
var tokenService = Get.find<TokenStorageService>();
|
||||
if (tokenService.baseurl.value == null) {
|
||||
await tokenService.saveBaseUrl('https://bazrasbackend.rasadyaar.ir/');
|
||||
await tokenService.saveBaseUrl(Module.inspection,'https://bazrasbackend.rasadyaar.ir/');
|
||||
}
|
||||
diInspection.registerLazySingleton<AppInterceptor>(
|
||||
() => 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,
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
@@ -11,7 +11,12 @@ class AuthPage extends GetView<AuthLogic> {
|
||||
@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<AuthLogic> {
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ Future<void> setupLiveStockDI() async {
|
||||
final tokenService = Get.find<TokenStorageService>();
|
||||
|
||||
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<void> 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,
|
||||
|
||||
@@ -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);
|
||||
},
|
||||
|
||||
@@ -11,7 +11,12 @@ class AuthPage extends GetView<AuthLogic> {
|
||||
@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<AuthLogic> {
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -683,7 +683,7 @@ class ProfilePage extends GetView<ProfileLogic> {
|
||||
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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user