Flutter开发报错:函数可能返回null但返回类型为非空类型如何解决?
报错原因
这个错误由Dart空安全校验触发:Iterable.where()方法要求传入的筛选回调必须返回非空bool值,用来判断当前元素是否符合筛选条件。你当前的回调函数体是空的,没有显式返回任何值,Dart会默认返回null,和要求的非空返回类型不匹配,因此触发报错。
另外你代码里的onGenerateRoute回调也存在相同问题:该方法要求返回Route类型,你目前只打印了参数、注释了返回语句,函数执行完会返回null,后续运行也会触发同类报错。
修复方案
- 补全
where方法的筛选回调逻辑,根据你的过滤配置返回对应的bool值即可。假设你的Meal类内置isGlutenFree、isLactoseFree、isVegan、isVegetarian四个布尔属性,修改后的代码如下:
_availableMeal = DUMMY_MEALS.where((meal) { // 担心Map取值为空的话可以把!替换为?? false,避免空断言异常 if (_filter['gluten']! && !meal.isGlutenFree) return false; if (_filter['lactos']! && !meal.isLactoseFree) return false; if (_filter['vegan']! && !meal.isVegan) return false; if (_filter['vegetarian']! && !meal.isVegetarian) return false; return true; }).toList();
如果你的Meal类属性名和上述示例不同,替换为对应属性名即可。
- 修复
onGenerateRoute的返回问题:要么取消返回语句的注释,不需要该配置的话可以直接删除该属性。
内容的提问来源于stack exchange,提问作者Harsh Kamani
相关产品推荐
相关产品推荐

