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

Posted

技术标签:

【中文标题】Flutter如何测试多个字段对象的哪些字段为空?【英文标题】:Flutter how to test which fields of a many fielded object are null? 【发布时间】:2020-07-28 09:28:13 【问题描述】:

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

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

没有为“Person”类型定义吸气剂“属性”。尝试 导入定义“属性”的库,将名称更正为 现有 getter 的名称,或定义一个 getter 或名为 '属性'。

  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 字段?

【问题讨论】:

【参考方案1】:

好的,我找到了一个优雅的解决方法,使用 .forEach 来获取 Objects 字段和它的键。似乎 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);
      
    );
  

我很满意,希望它可以帮助某人。

【讨论】:

以上是关于Flutter如何测试多个字段对象的哪些字段为空?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter-不可为空的实例字段'questionAnswer','questionText'必须初始化

如何在 Flutter 中同时滚动多个文本字段

在 Flutter 小部件测试中,如何验证字段验证错误消息?

Flutter:应该初始化字段“initScreen”,因为它的类型“int”不允许为空。 int 初始化屏幕;

C#中如何判断一个DateTime类型字段的日期为空?

当文本字段为空时,如何在 Xcode UI 测试中测试 UITextField?