Sfoglia il codice sorgente

beresin context di login & qr

Yulian 2 mesi fa
parent
commit
e715330edc

+ 1 - 1
lib/main.dart

@@ -161,7 +161,7 @@ class _HomeGuardPageState extends State<HomeGuardPage> {
   Widget build(BuildContext context) {
     eventBus.on().listen((event) {
       if(event.toString() == 'logout') {
-        UIService.navigateTo('/end-session');
+        UIService.navigateNamed('/end-session');
         // context.navigateToPath('/end-session');
       }
     });

+ 9 - 4
lib/src/api/jwt_token.dart

@@ -10,6 +10,7 @@ import 'package:easy_localization/easy_localization.dart';
 import 'package:path_provider/path_provider.dart';
 import 'package:telnow_mobile_new/src/utils/U.dart';
 import 'package:telnow_mobile_new/src/utils/cache_manager.dart';
+import 'package:telnow_mobile_new/src/utils/ui_service.dart';
 import 'api_auth_provider.dart';
 
 class JwtToken{
@@ -70,6 +71,10 @@ class JwtToken{
     String token = _sharedPreferencesManager.getString(SharedPreferencesManager.keyAccessToken)!;
     String username = _sharedPreferencesManager.getString(SharedPreferencesManager.keyUsername)!;
 
+    void setLocale(code){
+      context.setLocale(Locale(code));
+    }
+
     if(isTokenExist && token != ''){
       var jwt = parseJwtPayLoad(token);
       var url = '/api/informants/${jwt['userId']}';
@@ -86,13 +91,13 @@ class JwtToken{
       }
 
       if((user != null && user['userId'].toLowerCase() != username.toLowerCase())){
-        U.getChangedPassword() ? handlingError(context, 3) : (){}; //invalid user
+        if (U.getChangedPassword()) UIService.handlingError(ErrorType.invalidAccount);
         return null;
       } else if(user != null && user['dateExpired'] != null){
         final dateToCheck = DateTime.parse(user['dateExpired']);
         final now = DateTime.now();
         if(now.isAfter(dateToCheck)){
-          handlingError(context, 4); //expired
+          UIService.handlingError(ErrorType.expiredAccount); //expired
           return null;
         }
       }
@@ -100,9 +105,9 @@ class JwtToken{
       if(user != null){
         if(U.newServerVersion(1754624839)){
           var code = U.getLang(user['language']).toLowerCase();
-          context.setLocale(Locale(code));
+          setLocale(code);
         } else {
-          context.setLocale(Locale(user['language'].toLowerCase()));
+          setLocale(user['language'].toLowerCase());
         }
       }
 

+ 1 - 1
lib/src/bloc/login/login_bloc.dart

@@ -30,7 +30,7 @@ class LoginBloc extends Bloc<LoginEvent, LoginState> {
   final ApiAuthRepository apiAuthRepository = ApiAuthRepository();
   final SharedPreferencesManager sharedPreferencesManager = locator<SharedPreferencesManager>();
 
-  LoginBloc(LoginState initialState) : super(initialState);
+  LoginBloc(super.initialState);
 
   // @override
   Stream<LoginState> mapEventToState(LoginEvent event) async* {

+ 11 - 8
lib/src/layouts/auth/change_code.dart

@@ -8,6 +8,7 @@ import 'package:telnow_mobile_new/src/api/jwt_token.dart';
 import 'package:telnow_mobile_new/src/injector/injector.dart';
 import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
 import 'package:telnow_mobile_new/src/utils/U.dart';
+import 'package:telnow_mobile_new/src/utils/ui_service.dart';
 import 'package:toggle_switch/toggle_switch.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:http/http.dart' as http;
@@ -164,22 +165,23 @@ class _ChangeCodePageState extends State<ChangeCodePage> {
                                     var tkn = await U.getFcmToken();
                                     if (tkn == null) {
                                       token.logout();
-                                      context.router.removeLast();
-                                      context.navigateToPath("/app/$rawPid/login");
+                                      // context.router.removeLast();
+                                      UIService.navigateNamed("/app/$rawPid/login");
                                     } else {
                                       var param = {'token': tkn, 'whiteListToken': false};
                                       var res = await _apiAuthProvider.postData('/api/fcmTokens/remove/', null, param);
                                       if (res != null && res['success']) {
                                         token.logout();
-                                        context.router.removeLast();
-                                        context.navigateToPath("/app/$rawPid/login");
+                                        // context.router.removeLast();
+                                        UIService.navigateNamed("/app/$rawPid/login");
                                       }
                                     }
                                   }
                                   else{
                                     token.logout();
-                                    context.router.removeLast();
-                                    context.navigateToPath("/app/$rawPid/login");
+                                    UIService.navigateNamed("/app/$rawPid/login");
+                                    // context.router.removeLast();
+                                    // context.navigateToPath("/app/$rawPid/login");
                                   }
                                 } catch(e) {
                                   debugPrint(e.toString());
@@ -187,8 +189,9 @@ class _ChangeCodePageState extends State<ChangeCodePage> {
                                   await _sharedPreferencesManager.clearKey(SharedPreferencesManager.keySerialCode);
                                   await _sharedPreferencesManager.clearKey(SharedPreferencesManager.version);
                                   token.logout();
-                                  context.router.removeLast();
-                                  context.navigateToPath("/qr");
+                                  UIService.navigateNamed("/qr");
+                                  // context.router.removeLast();
+                                  // context.navigateToPath("/qr");
                                 }
                               },
                             ),

+ 24 - 19
lib/src/layouts/auth/login.dart

@@ -248,6 +248,7 @@ class _LoginPageState extends State<LoginPage> {
   }
 
   loginAction() async{
+    final languageTag = context.locale.toLanguageTag();
     if(!loading){
       setState(()=>loading = true);
 
@@ -267,48 +268,51 @@ class _LoginPageState extends State<LoginPage> {
 
       Token token = await apiAuthRepository.postLoginUser(LoginBody(username.trim(), password.trim(), "password"));
       if (token.error != null) {
-        showError(context, token.error);
+        UIService.showError(token.error.toString());
         setState(()=>loading = false);
         return;
       }
 
-      var pid = U.getPidFromUrl(context.router.currentUrl);
+      var pid = U.getPidFromUrl(UIService.getCurrentUrl());
       await sharedPreferencesManager.putString(SharedPreferencesManager.keyAccessToken, token.accessToken!);
       await sharedPreferencesManager.putString(SharedPreferencesManager.keyRefreshToken, token.refreshToken!);
 
-      // print(JwtDecoder.decode(token.accessToken!));
       var accTkn = JwtDecoder.decode(token.accessToken!);
-      switchLang(context, context.locale.toLanguageTag(), accTkn);
+      switchLang(languageTag, accTkn);
 
-      if(await setUsername()){
+      if(await setUsername() && mounted){
         var data = {
           'username': username.trim(),
           'password': password.trim()
         };
-        Navigator.push(context, MaterialPageRoute(builder: (context) => ForceChgPassPage(data: data))).then((value) async {
+        Navigator.push(
+          context,
+          MaterialPageRoute(builder: (_) => ForceChgPassPage(data: data)),
+        ).then((_) async {
           if (!U.getChangedPassword()) {
             await U.clearPreferences();
             U.setHidePayload(true);
-            context.router.removeLast();
-            context.navigateToPath("/app/$pid/menu");
-            return;
+            UIService.navigateNamed("/app/$pid/menu");
           }
         });
-      }
-      else{
+
+      } else {
         await sharedPreferencesManager.putBool(SharedPreferencesManager.keyIsLogin, true);
         await sharedPreferencesManager.putString(SharedPreferencesManager.keyScoope, 'INSIDE');
         await sharedPreferencesManager.putInt(SharedPreferencesManager.keyCountRefreshToken, 0);
         await sharedPreferencesManager.putString(SharedPreferencesManager.keyPendingData, jsonEncode([]));
         U.setHidePayload(true);
-        context.router.removeLast();
-        context.navigateToPath("/app/$pid/menu");
+        UIService.navigateNamed("/app/$pid/menu");
+        // context.router.removeLast();
+        // context.navigateToPath("/app/$pid/menu");
       }
     }
   }
 
-  switchLang(BuildContext context, code, tkn) async {
-    // print("switchLang called");
+  switchLang(code, tkn) async {
+    // final ctx = UIService.context;
+    // if(ctx == null) return;
+
     var lg = code.toUpperCase();
     if(lang.indexOf(code) > 1){
       lg = lang.indexOf(code) - 1;
@@ -641,7 +645,7 @@ class _ForceChgPassPageState extends State<ForceChgPassPage> {
           try {
             var res = await apiAuthProvider.patchData('/api/informants/${tokenData['userId']}/changePassword', data, context);
             if (res != null) {
-              String password = tokenData['related'] && tokenData['tenantCode'] != null && tokenData['tenantCode'] != '' ?  tokenData['tenantCode'] + ' ' + data['password'] : data['password'];
+              String password = tokenData['related'] && tokenData['tenantCode'] != null && tokenData['tenantCode'] != '' ?  tokenData['tenantCode'] + ' ${data['password']}' : data['password'];
 
               LoginBody loginBody = LoginBody(widget.data['username']!, password, 'password');
               Token token = await apiAuthRepository.postLoginUser(loginBody);
@@ -661,9 +665,10 @@ class _ForceChgPassPageState extends State<ForceChgPassPage> {
                 await sharedPreferencesManager.putString(SharedPreferencesManager.keyPendingData, jsonEncode([]));
                 U.setHidePayload(true);
                 // var pid = U.getAccessCode();
-                var pid = U.getPidFromUrl(context.router.currentUrl);
-                context.router.removeLast();
-                context.navigateToPath("/app/$pid/menu");
+                var pid = U.getPidFromUrl(UIService.getCurrentUrl());
+                UIService.navigateNamed("/app/$pid/menu");
+                // context.router.removeLast();
+                // context.navigateToPath("/app/$pid/menu");
               }
             }
           } catch(e) {

+ 17 - 20
lib/src/layouts/auth/qr.dart

@@ -14,6 +14,7 @@ import 'package:telnow_mobile_new/src/layouts/components/template.dart';
 import 'package:telnow_mobile_new/src/layouts/auth/login.dart';
 import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
 import 'package:telnow_mobile_new/src/utils/U.dart';
+import 'package:telnow_mobile_new/src/utils/ui_service.dart';
 import 'package:toggle_switch/toggle_switch.dart';
 import 'package:url_launcher/url_launcher.dart';
 import 'package:http/http.dart' as http;
@@ -229,12 +230,11 @@ class _NewQrPageState extends State<NewQrPage> {
   Future scanDialog() async {
     try {
       final result = await InternetAddress.lookup('google.com');
-      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
-        // String barcode = await FlutterBarcodeScanner.scanBarcode('#ff6666', 'Cancel', true, ScanMode.QR);
+      if (result.isNotEmpty && result[0].rawAddress.isNotEmpty && mounted) {
         showModalBottomSheet<void>(
           context: context,
           backgroundColor: Colors.white,
-          builder: (BuildContext contextt) {
+          builder: (BuildContext ctx) {
             return SafeArea(
               child: Column(
                 mainAxisSize: MainAxisSize.min,
@@ -250,7 +250,7 @@ class _NewQrPageState extends State<NewQrPage> {
                     leading: Icon(Icons.image),
                     title: Text('fromGallery'.tr(), style: TextStyle(color: textColor)),
                     onTap: () async{
-                      Navigator.of(contextt).pop();
+                      Navigator.of(ctx).pop();
                       XFile? file = await ImagePicker().pickImage(source: ImageSource.gallery);
                       if(file != null){
                         final BarcodeCapture? barcodeCapture = await MobileScannerController().analyzeImage(file.path);
@@ -259,7 +259,7 @@ class _NewQrPageState extends State<NewQrPage> {
                           scan(str);
                         }
                         else{
-                          showError(context, 'messageInvalidCode'.tr());
+                          UIService.showError('messageInvalidCode'.tr());
                         }
                       }
                     },
@@ -268,7 +268,7 @@ class _NewQrPageState extends State<NewQrPage> {
                     leading: Icon(Icons.camera),
                     title: Text('fromCamera'.tr(), style: TextStyle(color: textColor)),
                     onTap: () async{
-                      Navigator.of(contextt).pop();
+                      Navigator.of(ctx).pop();
                       Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanBarcodePage())).then((barcode){
                         if(barcode != null){
                           scan(barcode);
@@ -283,26 +283,23 @@ class _NewQrPageState extends State<NewQrPage> {
         );
       }
     } on SocketException catch (_) {
-      handlingError(context, 0); //no internet
+      UIService.handlingError(ErrorType.noInternet); //no internet
     } on PlatformException catch (e) {
       if (e.code != '') {
-        showError(context, 'messageCamPermission'.tr());
+        UIService.showError('messageCamPermission'.tr());
       } else {
-        showError(context, 'messageInvalidCode'.tr());
+        UIService.showError('messageInvalidCode'.tr());
       }
     } catch (e) {
-      showError(context, 'messageInvalidCode'.tr());
+      UIService.showError('messageInvalidCode'.tr());
     }
   }
 
   Future scan(String barcode) async {
-// print("called scan()");
     try {
       var pidString = barcode.split("app/").last;
       var pid = Uri.decodeComponent(pidString.split('/').first);
       var splitPID = pid.split('#');
-// print(splitPID);
-// print(U.decodeBase64Url(splitPID[1]));
 
       await _sharedPreferencesManager.clearKey(SharedPreferencesManager.version);
       await _sharedPreferencesManager.putString(SharedPreferencesManager.keyBaseUrl, U.rewriteUrl(splitPID[1]));
@@ -311,15 +308,17 @@ class _NewQrPageState extends State<NewQrPage> {
       apiAuthRepository.init();
 
       if (!pidString.contains('loginme')) {
-        context.router.removeLast();
-        context.navigateToPath("/app/${Uri.encodeComponent(splitPID[0])}/login");
+        UIService.navigateNamed("/app/${Uri.encodeComponent(splitPID[0])}/login");
+        // context.router.removeLast();
+        // context.navigateToPath("/app/${Uri.encodeComponent(splitPID[0])}/login");
       } else {
-        context.router.removeLast();
-        context.navigateToPath("/app/${Uri.encodeComponent(splitPID[0])}/loginme${pidString.split("/loginme").last}");
+        UIService.navigateNamed("/app/${Uri.encodeComponent(splitPID[0])}/loginme${pidString.split("/loginme").last}");
+        // context.router.removeLast();
+        // context.navigateToPath("/app/${Uri.encodeComponent(splitPID[0])}/loginme${pidString.split("/loginme").last}");
       }
     } catch (e) {
       debugPrint(e.toString());
-      if(mounted) showError(context, 'messageInvalidCode'.tr());
+      UIService.showError('messageInvalidCode'.tr());
     }
   }
 }
@@ -338,8 +337,6 @@ class _ScanBarcodePageState extends State<ScanBarcodePage> {
     return Scaffold(
       body: MobileScanner(
         onDetect: (barcodes) {
-          // print('sini');
-          // print(barcodes.barcodes.singleOrNull?.displayValue);
           Navigator.of(context).pop(barcodes.barcodes.firstOrNull?.displayValue);
         },
       ),

+ 14 - 0
lib/src/utils/ui_service.dart

@@ -59,6 +59,14 @@ class UIService {
     }
   }
 
+  static void navigateNamed(String routePath) {
+    final ctx = context;
+    if (ctx != null) {
+      AutoRouter.of(ctx).removeLast();
+      AutoRouter.of(ctx).navigatePath(routePath);
+    }
+  }
+
   static void showError(String message) {
     final ctx = context;
     if (ctx != null) {
@@ -207,4 +215,10 @@ class UIService {
         );
       });
   }
+
+  static String getCurrentUrl(){
+    final ctx = context;
+    if(ctx == null) return '';
+    return ctx.router.currentUrl;
+  }
 }