ifNeedLoadNewLanguages function

Future<String?> ifNeedLoadNewLanguages(
  1. List<LangData> appLangs,
  2. String app,
  3. dynamic callback(
    1. LangData
    )
)

Implementation

Future<String?> ifNeedLoadNewLanguages(List<LangData> appLangs, String app, Function(LangData) callback) async {
  try{
    var querySnapshot = await FirebaseFirestore.instance.collection("language").doc("langs").get();
    var data = querySnapshot.data();
    if (data == null)
      return "langs = null";
    addStat("langs", data.length);
    dprint("loadLanguages data=$data");
    if (data['list'] != null) {
      var elementList = data['list'];
      appLangs = [];
      elementList.forEach((item) {
        var t = LangData.fromJson(item);
        callback(t);
        if (t.app == app)
          appLangs.add(t);
        // appLangs.add(LangData(name: element["name"], engName: element["engName"], image: "", app: app,
        //     direction: element["direction"] == "ltr" ? TextDirection.ltr : TextDirection.rtl, locale: element["locale"],
        //     data: {}),);
      });

      //
      // get language version
      //
      if (data['ver'].toString() != localSettings.langVer){
        // save local
        var directory = await getApplicationDocumentsDirectory();
        var directoryPath = directory.path;
        dprint("appLangs ${appLangs.length}");
        await File('$directoryPath/listlangs.json').writeAsString(json.encode(appLangs.map((i) => i.toJson()).toList()));
        appSettings.langVer = data['ver'];
        await saveSettingsToLocalFile(appSettings);
        //
        // get languages
        //
        for (var element in appLangs){
          var _doc = "${element.app}_${element.locale}";
          var querySnapshot = await FirebaseFirestore.instance.collection("language").doc(_doc).get();
          var data = querySnapshot.data();
          if (data != null) {
            Map<String, dynamic> _words = data['data'];
            // save local
            dprint("save language local $_doc");
            var _t = json.encode(_words);
            await File('$directoryPath/$_doc.json').writeAsString(_t);
          }
        }
        localSettings.setLangVersion(data['ver'].toString());
      }
    }
  }catch(ex){
    return "ifNeedLoadNewLanguages " + ex.toString();
  }
  return null;
}