Bläddra i källkod

fix: mekanisme load server version

Yulian 3 veckor sedan
förälder
incheckning
77a072d50a
2 ändrade filer med 17 tillägg och 2 borttagningar
  1. 4 1
      lib/src/layouts/mobile/menu_home.dart
  2. 13 1
      lib/src/utils/U.dart

+ 4 - 1
lib/src/layouts/mobile/menu_home.dart

@@ -61,7 +61,10 @@ class _MobHomePageState extends State<MobHomePage> with WidgetsBindingObserver {
   }
 
   checkCompatibility() async{
-    if(await U.isCompatibleWith(VersionKey.multiBahasa)) {
+    print("checkCompatibility");
+    var isCompatible = await U.isCompatibleWith(VersionKey.multiBahasa);
+    print("isCompatibleWith $isCompatible");
+    if(isCompatible) {
       homeFunc.getContactCenter(context);
     }
   }

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

@@ -1,3 +1,5 @@
+import 'dart:async';
+
 import 'package:easy_localization/easy_localization.dart';
 import 'package:firebase_messaging/firebase_messaging.dart';
 import 'package:flutter/foundation.dart';
@@ -306,7 +308,9 @@ class U {
   }
 
   static int _serverVersion = 0;
+  static final Completer<void> _versionReady = Completer<void>();
   static List validLang = [];
+
   static getServerVersion() async{
     String url = '/api/license';
     try {
@@ -314,6 +318,7 @@ class U {
       _serverVersion = dt['serverVersion'];
       validLang = newServerVersion(1754624839) ? dt["_validLang"] : dt['languages'];
       CacheMan.writeData(url, _serverVersion);
+      _versionReady.complete();
     } catch (error) {
       var val = await CacheMan.readData(url);
       if (val != null) {
@@ -324,6 +329,12 @@ class U {
     // print('checking current server version: $_serverVersion');
   }
 
+  static Future<void> _waitUntilServerVersionReady() async {
+    if (!_versionReady.isCompleted) {
+      await _versionReady.future;
+    }
+  }
+
   static String getLang(code){
     if(code is int){
       return validLang[code+1];
@@ -352,7 +363,6 @@ class U {
   static final Map<String, Future<bool>> _compatibilityCache = {};
   static Future<bool> isCompatibleWith(VersionKey key) {
     final keyName = key.name.toString();
-
     if (_compatibilityCache.containsKey(keyName)) {
       return _compatibilityCache[keyName]!;
     }
@@ -363,7 +373,9 @@ class U {
   }
 
   static Future<bool> _loadAndCompare(String keyName) async {
+    await _waitUntilServerVersionReady();
     final value = await C.get(keyName);
+
     return value <= _serverVersion;
   }