【问题标题】:check list if it is empty or null flutter检查列表是否为空或 null 颤动
【发布时间】:2021-11-21 12:26:03
【问题描述】:

我从服务器上得到这个,我需要将我的复选框设置为 true 为 null 的值,而如果我发现 [] 我不需要做任何事情

{"FRI": [null], "MON": [null], "SAT": [null], "SUN": [{"to": "16:27", "from": "15:27"}], "THU": [null], "TUE": [null], "WED": []}

我正在尝试一个

if (widget.initialValues!.every((e) => e == null)) {
  _isClosed.trigger(true);
}

但它不能正常工作,因为在这两种情况下它都会返回为真

【问题讨论】:

    标签: arrays list flutter dart


    【解决方案1】:

    当您尝试使用数组的每一项并将其与null 进行比较时,[null][] 会得到类似的结果。相反,你应该使用.isEmpty,因为这个方法定义了一个数组是否为空,并且在这种方法中[null] and []`不相等,因为第一个有一个元素,而另一个有0个元素!例如:

    //an example list
    const list = [ [], [null]];
      
      for(int i=0; i<list.length; i++){
        if(list[i].isEmpty){
          print("empty " + i.toString());
        } else {
          print("not empty " + i.toString());
        }
      }
    

    结果将是:

    empty 0
    not empty 1
    

    同样,您可以使用.length,如下所示:

    const list = [ [], [null]];
    for(int i=0; i<list.length; i++){
        print(i.toString() + " length is " + list[i].length.toString());
      }
    

    这些只是示例,您也可以将它们映射到您的代码中。

    【讨论】:

    • mm 好的,这些例子对我来说很清楚,但在我的代码中,如果我执行 if (widget.initialValues!.isEmpty) 它也会将值带为 null ..
    • 不,你应该逐个检查元素而不是整个初始值!因为您希望能够为具有[null] 的每个项目返回true,但相反不希望对具有[] 的项目具有此功能。所以你应该单独检查整个项目
    • mm 好的,我明白了,谢谢,但我尝试编写你的代码但我有错误。我用照片更新我的问题
    • 我认为您遗漏了什么,请提供initialValue,以便我查看。
    【解决方案2】:

    对不起,如果我用另一个帐户回复你,但我在家用另一台电脑,我没有用户,希望你能阅读..

          final List<OpeningHours?>? initialValues;
    
    class OpeningHours {
      OpeningHours({
        required this.open,
        required this.close,
      }) : assert(
              open.isBefore(close),
              "L'apertura dev'essere per forza prima della chiusura",
            );
    
      factory OpeningHours.fromMap(Map map) {
        if (!map.containsKey('from') || !map.containsKey('to')) {
          final msg =
              'La mappa $map non è valida per creare un oggetto [OpeningTime]';
          throw Exception(msg);
        }
        final from = TimeOfDayExtension.parse(map['from']! as String);
        final to = TimeOfDayExtension.parse(map['to']! as String);
        return OpeningHours(open: from, close: to);
      }
    
      final TimeOfDay open;
    
      final TimeOfDay close;
    
      String get format => '${open.asString()}-${close.asString()}';
    
      @override
      String toString() => jsonEncode(toMap());
    
      Map<String, String> toMap() =>
          {'from': open.asString(), 'to': close.asString()};
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-16
      • 2012-01-18
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多