来自 prefs.setStringList 的颤振空安全 -> 错误:参数列表<字符串?>不能分配给参数类型 List <String>



你好,我试图使null安全迁移,但有一个问题与

prefs.setStringList("save_list_autre2",save_list.toList());

错误是:参数list<String?>不能赋值给参数类型List

RegExp regExp = new RegExp(r'(...)');
var save_list= regExp.allMatches(decrypted).map((z) => z.group(0));
if(regExp.allMatches(decrypted)==null ){    
[...]    
} else {
prefs.setStringList("save_list_autre2",save_list.toList());  
}

我从save_list= regExp.allMatches(decrypted).map((z) => z.group(0).toString());中添加.toString()

错误被删除了,但我不知道这是否是好的解决方案

当您调用z.group(0)时,如果没有给定索引的组(在这种情况下为0),group方法可以返回null。所以dart认为你的字符串列表中可能有一些空值

实际情况是,不应该得到任何空值,因为传递的是0。因此,要告诉dart方法没有返回null,请使用!操作符:

regExp.allMatches(decrypted)
.map((z) => z.group(0)!)

如果,偶然地,你碰巧有任何空值,这段代码将无法工作(正如我所说的,我相信你不会,但我知道什么?我从来没有在dart

中使用过正则表达式如果是这种情况,您首先需要过滤空值,然后使用!:

regExp.allMatches(decrypted)
.map((z) => z.group(0))
.where((v) => v != null) // filter out null values
.map((v) => v!); // let dart know you don't have any null values.

希望这足以解决问题

最新更新