拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在Flutter中实作串列过滤的警告

在Flutter中实作串列过滤的警告

白鹭 - 2022-01-25 2000 0 0

我有以下代码从要显示在 listView 中的资料中过滤串列:

child: FutureBuilder(
               future: fetchPacientes('todo'),
               builder: (context, snapshot) {
                 if (snapshot.hasData) {
                   var filteredList = snapshot.data;
                   print("a minusculas:"  
                       _controller.text.toLowerCase());
                   filteredList = filteredList
                       .where((element) => (element.nombre
                       .toLowerCase()
                       .contains(
                       _controller.text.toLowerCase()) ||
                       element.NHC.toLowerCase().contains(
                           _controller.text.toLowerCase()) ||
                       element.apellidos.toLowerCase().contains(
                           _controller.text.toLowerCase())))
                       .toList();

但我在这一点上遇到了一个错误:

.where(...

这是错误输出:

The method 'where' can't be unconditionally invoked because the receiver can be 'null'.

我正在尝试将旧应用程序迁移到 Null Safety,但我无法解决此问题。建议的解决方案是添加一个空检查,filteredList! 但这样做时错误不会被洗掉

uj5u.com热心网友回复:

该错误意味着.应用 的物件(在本例中为filteredList)可以是,因此如果实际上是null,它将引发例外filteredListnull

因此,为避免该错误,您有以下选择:

  • 添加!after filteredList: 在这种情况下,您确保编译器filteredList永远不会为空,并且错误将消失。请注意,这实际上并不能阻止它成为null:您只是在向编译器保证它,并且filteredList仍然可能是null. 在这种情况下,当您在代码中宣告不应该发生这种情况时,应用程序将抛出一个专门的例外,告诉您它找到了一个“空”物件
  • 检查是否filteredListnull:添加几行代码测验是否是真的null,然后处理这种情况,甚至是回传一个Text('filteredList is empty'). 在此之后,您可以安全地撰写filteredList!,因为您确定它永远不会null,因为您实际测验了 id。
  • 为它设定一个默认值filteredList以防它为空:Dart 有这个运算子,如果它是一个物件,它会为它分配一个值null: filteredList ??= []同样,使用它之后,您可以安全地撰写filteredList!,因为它永远不会为空。

PS对不起,没有注意到最后一句话。由于添加!null检查不起作用,我会尝试为filteredList. 或者也许检查nullon snapshot.data,然后为 设定一个显式的不可为空的型别filteredList,比如List<Object> filteredList.

uj5u.com热心网友回复:

错误是因为snapshot.data可以null尝试?在您.where喜欢之前添加一个:

filteredList = filteredList?.where(...);
标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *