Flutter / Dart:动态加载的常数

时间:2019-07-07 01:06:46

标签: flutter dart

我有一个Flutter应用程序,并且正在使用第三方API来处理大量数据。这个API比我想要的更具动态性/自由格式,并且有很多“枚举”未列出可能的值,也没有任何方法来检索所有这些值的详尽列表。因此,我决定不将应用程序端的某些枚举弄得一团糟,而是决定通过将值存储在Firestore中来动态管理值。因此,基本上,当我遇到无法识别的API值时,会将其存储在Firestore表中,以备将来使用。这意味着我需要在应用程序启动或用户首次尝试访问它时初始化枚举值列表。目前,我正在做前者。因此,“枚举”看起来像这样:

#define MAX_BUFFER_SIZE  128

int main() {
    char srcString[MAX_BUFFER_SIZE];
    char destString[MAX_BUFFER_SIZE];

    strncpy(srcString, "Hello World", MAX_BUFFER_SIZE);
    int wordCount = 2;

    snprintf(destString, MAX_BUFFER_SIZE, "%i%s", wordCount, srcString);
    printf("Changed string '%s'\n", destString);

    // Or if you really want the string put back into srcString then:
    strncpy(srcString, destString, MAX_BUFFER_SIZE);
    printf("Changed string in source '%s'\n", srcString);

    return 0;
}

然后,在main.dart文件的构建方法中,我有:

class Unit {
  final String value;
  final String label;

  static bool initialized = false;
  static List<Unit> values = [];

  //Return if no match.
  static final Unit DEFAULT = new Unit("", "");

  Unit(this.value, this.label);

  static Future<void> initialize() {
    if (!initialized) {
      UnitDao.getUnits().then((List<Unit> units) {
        values.addAll(units);
        initialized = true;
      }).catchError((error, stackTrace) {
        print('Caught error loading units $error: $stackTrace');
      });
    }
  }

  static Unit fromData(dynamic data, {bool addIfNotExists = false}) {
    Unit unit;
      if (data == null) {
        return DEFAULT;
      }
      try {
        unit = Unit.values.firstWhere((e) => e.value == data.toUpperCase());
      } catch (error, stackTrace) {
        if (addIfNotExists) {
          String unitString = data as String;
          String value =
              unitString.replaceAll("_", "").replaceAll("-", "").toUpperCase();
          String label = StringUtils.capitalize(value);
          unit = new Unit(value, label);

          //Add missing value to database.
          UnitDao.addUnit(unit);

          values.add(unit);
        }
      }

    return unit;
  }

}

在Dart中如何处理这样的场景是否有先例?我觉得我的工作不是很理想。

0 个答案:

没有答案