如何List.map在儿童Flutter中使用www.example.com()中的if语句?

mfuanj7w  于 2023-04-22  发布在  Flutter
关注(0)|答案(2)|浏览(86)

例如,我有一个Wrap小部件,在孩子中我有一些代码,如:

listTask.map((e) {
                  if (e.day!.contains(value))
                    return Padding(
                      padding: const EdgeInsets.all(4.0),
                      child: Container(
                        decoration: BoxDecoration(
                            shape: BoxShape.circle, color: Colors.black),
                        height: 20,
                        width: 20,
                      ),
                    );
                }).toList()

我希望它在传递if语句时返回Padding,但它得到错误The argument type 'List<Padding?>' can't be assigned to the parameter type 'List<Widget>'。我如何解决这个问题?谢谢。

z9smfwbn

z9smfwbn1#

问题是,如果if条件失败,则对List.map的回调不会显式返回任何内容,因此回调隐式返回null,最终得到的是List<Padding?>而不是List<Padding>List.map创建了从输入元素到输出元素的1:1Map。
然后过滤掉null元素,或者使用collection-for和collection-if

[for (var e in listTask)
    if (e.day!.contains(value))
      Padding(...),
  ]

参见:How to convert a List<T?> to List in null safe Dart?

ca1c2owp

ca1c2owp2#

试试这个:
listTask.map((e)Map

return (e.day!.contains(value)) ? Padding(
                  padding: const EdgeInsets.all(4.0),
                  child: Container(
                    decoration: BoxDecoration(
                        shape: BoxShape.circle, color: Colors.black),
                    height: 20,
                    width: 20,
                  ),
                ):Container();
            }).toList()

相关问题