Flutter参数类型不匹配错误:无法将void Function(Map<String, bool>)分配给Map<String, bool>类型参数
解决参数类型不匹配错误及相关问题
首先咱们直接揪出核心问题:你给FiltersScreen传递参数的顺序完全搞反了!
看FiltersScreen的构造函数:
FiltersScreen(this.applyfilter, this.currentfilter);
它要求第一个参数是回调函数,第二个是筛选状态的Map,但你在主页面路由里是这么传的:
FiltersScreen(_filter, _applyfilter)
把Map当成了第一个参数,函数当成了第二个,这就直接触发了void Function(Map<String, bool>)不能赋值给Map<String, bool>的类型错误。
接下来咱们一步步修复所有问题:
1. 修正参数传递顺序
在主页面的路由配置里,把参数顺序调换过来:
FiltersScreen.routeName: (ctx) => FiltersScreen(_applyfilter, _filter),
2. 同步筛选页面的初始状态
现在筛选页面的开关状态没有和主页面传入的currentfilter同步,咱们需要在initState里初始化这些变量:
@override void initState() { super.initState(); isGlutenFree = widget.currentfilter['gluton'] ?? false; isLactoseFree = widget.currentfilter['lactose'] ?? false; isVegan = widget.currentfilter['vrgan'] ?? false; isVegetarian = widget.currentfilter['vegetarian'] ?? false; }
3. 修正拼写错误(避免筛选逻辑失效)
你在主页面的_filter里把vegan拼成了vrgan,这个小错误会导致素食筛选逻辑完全失效,统一修正为正确的拼写:
- 主页面的
_filter:
Map<String, bool> _filter = { 'gluton': false, 'lactose': false, "vegan": false, "vegetarian": false };
- 筛选页面保存筛选结果时:
final selectedfilter = { 'gluton': isGlutenFree, 'lactose': isLactoseFree, "vegan": isVegan, "vegetarian": isVegetarian };
- 主页面
_applyfilter方法里的判断条件同步修正:
if (_filter['vegan']! && !meals.isVegan) { return false; }
另外你原来的第一个判断条件if (_filter['gluton']! && !meals.isGlutenFree) {}没有返回值,要补上return false;才能生效。
4. 明确函数类型定义(代码更严谨)
把筛选页面的函数参数类型从模糊的Function(Map)改成更明确的类型:
class FiltersScreen extends StatefulWidget { final void Function(Map<String, bool>) applyfilter; final Map<String, bool> currentfilter; FiltersScreen(this.applyfilter, this.currentfilter); // ... }
做完这些修改后,参数类型错误会彻底消失,而且筛选状态也能在主页面和筛选页面之间正确同步啦。
内容的提问来源于stack exchange,提问作者Syed Rehan
相关产品推荐
相关产品推荐

