Browse Source

update lang di web done

Yulian 2 months ago
parent
commit
e204d648c4

+ 5 - 2
lib/src/layouts/functions/account.dart

@@ -7,6 +7,7 @@ import 'package:telnow_mobile_new/src/api/api_auth_provider.dart';
 import 'package:telnow_mobile_new/src/api/jwt_token.dart';
 import 'package:telnow_mobile_new/src/layouts/components/template.dart';
 import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferences_manager.dart';
+import 'package:telnow_mobile_new/src/utils/C.dart';
 import 'package:telnow_mobile_new/src/utils/U.dart';
 import 'package:telnow_mobile_new/src/utils/provider.dart';
 
@@ -38,7 +39,7 @@ class AccountFunction{
     }
     try{
       var p;
-      if(U.newServerVersion(1754624839)){
+      if(U.isCompatibleWith(VKey.multiBahasa)){
         p = {'userId': user['userId'], 'language': 'ID', '_language': code.toUpperCase()};
       } else {
         p = {'userId': user['userId'], 'language': code.toUpperCase()};
@@ -46,9 +47,11 @@ class AccountFunction{
       var res = await apiAuthProvider.patchData('/api/informants/' + user['id'].toString(), p, context);
       if (res != null) {
         closeLoading(context);
+        print("locale ====== $locale");
         context.setLocale(Locale(locale));
         notification.startNotification(context, code: code);
-        Navigator.of(context).pop();
+        // Navigator.of(context).pop();
+        print("here");
       } else {
         closeLoading(context);
       }

+ 2 - 2
lib/src/layouts/mobile/history_detail.dart

@@ -60,7 +60,7 @@ class _MobHistoryDetailPageState extends State<MobHistoryDetailPage> {
           Center(
             child: GestureDetector(
               child: Container(
-                margin: EdgeInsets.only(right: 16),
+                margin: EdgeInsetsDirectional.only(end: 16),
                 padding: EdgeInsets.fromLTRB(16, 9, 16, 9),
                 decoration: BoxDecoration(
                     color: primaryColor.withValues(alpha: 0.1),
@@ -539,7 +539,7 @@ class _MobHistoryDetailPageState extends State<MobHistoryDetailPage> {
     return TimelineTile(
       nodeAlign: TimelineNodeAlign.start,
       contents: Container(
-        margin: EdgeInsets.fromLTRB(15, 10, 0, 10),
+        margin: EdgeInsets.fromLTRB(16, 10, 16, 10),
         child: Row(
           children: [
             Text(label, style: TextStyle(fontSize: 14, color: textColor.withValues(alpha: 0.85))),

+ 8 - 2
lib/src/layouts/mobile/menu_account.dart

@@ -13,6 +13,8 @@ import 'package:telnow_mobile_new/src/utils/U.dart';
 import 'package:telnow_mobile_new/src/utils/provider.dart';
 import 'package:permission_handler/permission_handler.dart';
 
+import '../../utils/C.dart';
+
 class MobAccountPage extends StatefulWidget {
   const MobAccountPage({super.key});
 
@@ -29,7 +31,6 @@ class _MobAccountPageState extends State<MobAccountPage> {
   bool autoTranslate = false;
   List lang = [];
   bool _timeLimit = false;
-  int sv = 0;
   var codeOflang = {};
 
   @override
@@ -60,7 +61,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
       dnd = Provider.of<UserModule>(context, listen: false).dndStatus();
       serDis = U.servantDisplay();
       autoTranslate = U.autoTranslate();
-      if(U.newServerVersion(1754624839)){
+      if(U.isCompatibleWith(VKey.multiBahasa)){
         lang = license['_validLang'] ?? [];
       } else {
         lang = license['languages'] != null ? license['languages'].split(',') : [];
@@ -466,6 +467,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
             trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
             onTap: context.locale.toString() != 'id' ? () async {
               accFunc.switchLang(context, 'id', user);
+              Navigator.of(context).pop();
             } : null,
           ),
           ListTile(
@@ -473,6 +475,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
             trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
             onTap: context.locale.toString() != 'en' ? () async {
               accFunc.switchLang(context, 'en', user);
+              Navigator.of(context).pop();
             } : null,
           ),
           //TODO: kene
@@ -481,6 +484,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
             trailing: Icon(context.locale.toString()==lang[2]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
             onTap: context.locale.toString() != lang[2] ? () async {
               accFunc.switchLang(context, 1, user);
+              Navigator.of(context).pop();
             } : null,
           ) : Container(),
           lang.length - 1 > 2 ? ListTile(
@@ -488,6 +492,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
             trailing: Icon(context.locale.toString()==lang[3]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
             onTap: context.locale.toString() != lang[3] ? () async {
               accFunc.switchLang(context, 2, user);
+              Navigator.of(context).pop();
             } : null,
           ) : Container(),
           lang.length - 1 > 3 ? ListTile(
@@ -495,6 +500,7 @@ class _MobAccountPageState extends State<MobAccountPage> {
             trailing: Icon(context.locale.toString()==lang[4]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
             onTap: context.locale.toString() != lang[4] ? () async {
               accFunc.switchLang(context, 3, user);
+              Navigator.of(context).pop();
             } : null,
           ) : Container(),
         ],

+ 1 - 2
lib/src/layouts/web/history_detail.dart

@@ -257,7 +257,6 @@ class _WebHistoryDetailPageState extends State<WebHistoryDetailPage> {
                               SizedBox(height: 16),
                               Text('timeline'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
                               SizedBox(height: 16),
-
                               Column(
                                 crossAxisAlignment: CrossAxisAlignment.start,
                                 children: [
@@ -549,7 +548,7 @@ class _WebHistoryDetailPageState extends State<WebHistoryDetailPage> {
     return TimelineTile(
       nodeAlign: TimelineNodeAlign.start,
       contents: Container(
-        margin: EdgeInsets.fromLTRB(15, 10, 0, 10),
+        margin: EdgeInsets.fromLTRB(16, 10, 16, 10),
         child: Row(
           children: [
             Text(label, style: TextStyle(fontSize: 14, color: textColor.withValues(alpha: 0.85))),

+ 65 - 46
lib/src/layouts/web/menu_account.dart

@@ -13,6 +13,8 @@ import 'package:telnow_mobile_new/src/utils/U.dart';
 import 'package:telnow_mobile_new/src/utils/provider.dart';
 import 'package:permission_handler/permission_handler.dart';
 
+import '../../utils/C.dart';
+
 class WebAccountPage extends StatefulWidget {
   const WebAccountPage({super.key});
 
@@ -28,6 +30,7 @@ class _WebAccountPageState extends State<WebAccountPage> {
   bool dnd = false;
   bool autoTranslate = false;
   List lang = [];
+  var codeOflang = {};
   bool _timeLimit = false;
 
   @override
@@ -37,7 +40,7 @@ class _WebAccountPageState extends State<WebAccountPage> {
     accFunc.getUser(context);
     setToggle();
     checkPermission(0);
-
+print("load ulang akun web");
     // TODO: implement initState
     super.initState();
   }
@@ -58,18 +61,27 @@ class _WebAccountPageState extends State<WebAccountPage> {
       dnd = Provider.of<UserModule>(context, listen: false).dndStatus();
       serDis = U.servantDisplay();
       autoTranslate = U.autoTranslate();
-      lang = license['languages'] != null ? license['languages'].split(',') : [];
+      if(U.isCompatibleWith(VKey.multiBahasa)){
+        lang = license['_validLang'] ?? [];
+      } else {
+        lang = license['languages'] != null ? license['languages'].split(',') : [];
+      }
     });
   }
 
   @override
   Widget build(BuildContext context) {
-    var codeOflang = {
+    codeOflang = {
       "id": 'bahasa'.tr(),
       "en": 'english'.tr(),
       "ja": 'japanese'.tr(),
       "zh": 'chinese'.tr(),
       "ko": 'korean'.tr(),
+      "ar": 'arabic'.tr(),
+      "de": 'german'.tr(),
+      "fr": 'french'.tr(),
+      "hi": 'hindi'.tr(),
+      "nl": 'dutch'.tr()
     };
     return Provider.of<UserModule>(context).user().isNotEmpty ? Scaffold(
       backgroundColor: backgroundColor,
@@ -267,7 +279,7 @@ class _WebAccountPageState extends State<WebAccountPage> {
                                       ],
                                     ),
                                   ),
-                                  onTap: ()=>changeLang(context, Provider.of<UserModule>(context, listen: false).user()),
+                                  onTap: () => changeLang(context, Provider.of<UserModule>(context, listen: false).user()),
                                 ),
                                 divider(),
                                 Container(
@@ -452,7 +464,7 @@ class _WebAccountPageState extends State<WebAccountPage> {
   changeLang(context, user) {
     showDialog(
         context: context,
-        builder: (BuildContext context) {
+        builder: (BuildContext contextDialog) {
           return AlertDialog(
             contentPadding: EdgeInsets.symmetric(vertical: 0, horizontal: 10),
             content: Column(
@@ -466,7 +478,7 @@ class _WebAccountPageState extends State<WebAccountPage> {
                 ),
                 divider(),
                 SizedBox(height: 16),
-                listOfLang(user),
+                listOfLang(user, contextDialog),
                 SizedBox(height: 16)
               ],
             ),
@@ -475,46 +487,53 @@ class _WebAccountPageState extends State<WebAccountPage> {
     );
   }
 
-  listOfLang(user){
-    return Column(
-      crossAxisAlignment: CrossAxisAlignment.start,
-      children: [
-        ListTile(
-          title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'id' ? () async {
-            accFunc.switchLang(context, 'id', user);
-          } : null,
-        ),
-        ListTile(
-          title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'en' ? () async {
-            accFunc.switchLang(context, 'en', user);
-          } : null,
-        ),
-        lang.contains('ja') ? ListTile(
-          title: Text('japanese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='ja'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'ja' ? () async {
-            accFunc.switchLang(context, 'ja', user);
-          } : null,
-        ) : Container(),
-        lang.contains('zh') ? ListTile(
-          title: Text('chinese'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='zh'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'zh' ? () async {
-            accFunc.switchLang(context, 'zh', user);
-          } : null,
-        ) : Container(),
-        lang.contains('ko') ? ListTile(
-          title: Text('korean'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
-          trailing: Icon(context.locale.toString()=='ko'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
-          onTap: context.locale.toString() != 'ko' ? () async {
-            accFunc.switchLang(context, 'ko', user);
-          } : null,
-        ) : Container()
-      ],
+  listOfLang(user, cd){
+    return !mounted ? SizedBox() : SafeArea(
+      child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          ListTile(
+            title: Text('bahasa'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='id'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'id' ? () async {
+              accFunc.switchLang(context, 'id', user);
+              Navigator.of(cd).pop();
+            } : null,
+          ),
+          ListTile(
+            title: Text('english'.tr(), style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()=='en'?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != 'en' ? () async {
+              accFunc.switchLang(context, 'en', user);
+              Navigator.of(cd).pop();
+            } : null,
+          ),
+          lang.length - 1 > 1 ? ListTile(
+            title: Text(codeOflang[lang[2]], style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()==lang[2]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != lang[2] ? () async {
+              accFunc.switchLang(context, 1, user);
+              Navigator.of(cd).pop();
+            } : null,
+          ) : Container(),
+          lang.length - 1 > 2 ? ListTile(
+            title: Text(codeOflang[lang[3]], style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()==lang[3]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != lang[3] ? () async {
+              accFunc.switchLang(context, 2, user);
+              Navigator.of(cd).pop();
+            } : null,
+          ) : Container(),
+          lang.length - 1 > 3 ? ListTile(
+            title: Text(codeOflang[lang[4]], style: TextStyle(color: textColor, fontSize: 14)),
+            trailing: Icon(context.locale.toString()==lang[4]?Icons.radio_button_checked:Icons.radio_button_off, color: primaryColor, size: 18),
+            onTap: context.locale.toString() != lang[4] ? () async {
+              accFunc.switchLang(context, 3, user);
+              Navigator.of(cd).pop();
+            } : null,
+          ) : Container(),
+        ],
+      ),
     );
   }
 }

+ 13 - 0
lib/src/utils/C.dart

@@ -0,0 +1,13 @@
+enum VKey {
+  none,
+  multiBahasa
+}
+
+class C{
+
+  static const Map<String, int> version = {
+    'multiBahasa': 1754624839 //penambahan jadi 10 bahasa, identifikasi berdasarkan ordinal 1,2,3
+  };
+
+  static int get(String key) => version[key]?? 0;
+}

+ 6 - 1
lib/src/utils/U.dart

@@ -19,6 +19,7 @@ import 'package:telnow_mobile_new/src/storage/sharedpreferences/shared_preferenc
 import 'package:synchronized/synchronized.dart';
 
 import 'cache_manager.dart';
+import 'C.dart';
 
 const Color backgroundColor = Colors.white;
 const Color primaryColor = Color(0xff078C84);
@@ -311,7 +312,7 @@ class U {
     try {
       var dt = await ApiAuthProvider().getJsonDataNoAuth(url);
       _serverVersion = dt['serverVersion'];
-      validLang = dt["_validLang"];
+      validLang = newServerVersion(1754624839) ? dt["_validLang"] : dt['languages'];
       CacheMan.writeData(url, _serverVersion);
     } catch (error) {
       var val = await CacheMan.readData(url);
@@ -348,6 +349,10 @@ class U {
     return version <= _serverVersion;
   }
 
+  static isCompatibleWith(VKey key){
+    return C.get(key.toString()) <= _serverVersion;
+  }
+
   static int retServerVersion(){
     return _serverVersion;
   }