Flutter 如何测试多个字段对象的哪些字段为空?

Flutter how to test which fields of a many fielded object are null?

我在我的应用程序的 3 个位置将用户详细信息保存到 SharedPrefs,这将导致大量重复代码。所以我想将一个方法滚动到我的 Person class 中,这样我就可以从任何地方调用它并在那里保存用户详细信息。

我有一个 var: Object Person 的用户,我一直在摆弄 Keys 和 String 来访问它的字段,但总是出现相同的错误:

The getter 'attribute' isn't defined for the type 'Person'. Try importing the library that defines 'attribute', correcting the name to the name of an existing getter, or defining a getter or field named 'attribute'.

  saveToPrefs(SharedPreferences prefs, Person user) {
    print('attempting to save details');
    for(String attribute in (user.toMap().keys)) {
      var testField = user.attribute;
      if(testField != null) {
        switch(runtimeType(user.attribute)) {
          case String:
            {
              prefs.setString(attribute, testField);
              break;
            }
          case double: {
            prefs.setDouble(attribute, testField);
            break;
          }
        }
      }
    }
  }

如何访问 Person user 字段?

好的,我找到了一个优雅的解决方法,使用 .forEach 获取对象字段及其键。看起来 Dart 还没有一个好的基本类型查询,所以你只需要用 if 语句来做。

    saveToPrefs(SharedPreferences prefs, Person user) {
    print('attempting to save details');
    (user.toMap()).forEach((key, value) {
      if(value != null) {
        if(value is String) prefs.setString(key, value);
        else if(value is List<String>) prefs.setStringList(key, value);
        else if(value is double) prefs.setDouble(key, value);
        else if(value is int) prefs.setInt(key, value);
        else if(value is bool) prefs.setBool(key, value);
      }
    });
  }

我很满意,希望它能对某人有所帮助。