loadLangsFromLocal function

Future<String?> loadLangsFromLocal(
  1. String locale,
  2. String needLocale,
  3. dynamic setLang(
    1. LangData lang
    ),
  4. dynamic setLangs(
    1. List<LangData> lang
    ),
)

Implementation

Future<String?> loadLangsFromLocal(String locale,
    String needLocale, Function(LangData lang) setLang, Function(List<LangData> lang) setLangs) async {
  try{
    var directory = await getApplicationDocumentsDirectory();
    var directoryPath = directory.path;
    var _file = File('$directoryPath/listlangs.json');
    if (!await _file.exists())
      return null;
    final contents = await _file.readAsString();
    var data = json.decode(contents);
    dprint("loadLangsFromLocal $data");
    List<LangData> t = data.map((f) {
      var b = LangData.fromJson(f);
      dprint("loadLangsFromLocal ${b.locale}");
      return b;
    } ).cast<LangData>().toList();
    setLangs(t); // parent.appLangs = t;
    // dprint("loadLangsFromLocal appLangs ${t.appLangs}");
    for (var item in t){
      var _doc = "${item.app}_${item.locale}";
      var _file = File('$directoryPath/$_doc.json');
      if (!await _file.exists())
        return null;
      final contents = await _file.readAsString();
      dprint('read local lang $directoryPath/$_doc.json');
      item.data = json.decode(contents);
      if (locale.isNotEmpty){
        if (locale == item.locale)
          setLang(item); //item.data, item.locale, context, item.direction);
      }else
      if (needLocale == item.locale)
        setLang(item); // item.data, item.locale, context, item.direction);
    }
  }catch(ex){
    return "model loadLangsFromLocal " + ex.toString();
  }
  return null;
}