Flutter回调函数报位置参数过多错误,如何回传筛选参数到上级页面
问题原因
你在FilterScreen中声明的saveFilters参数类型为VoidCallback,该类型是Dart内置的无参函数类型,不支持传入参数,你在保存按钮点击时给widget.saveFilters传入了选中的筛选参数,类型不匹配所以触发报错。
修复方法
调整saveFilters的参数类型,修改FilterScreen类的代码如下:
class FilterScreen extends StatefulWidget { static const routeName = '/filters'; // 将VoidCallback替换为可接收筛选map参数的函数类型 final Function(Map<String, bool>) saveFilters; FilterScreen(this.saveFilters); @override _FilterScreenState createState() => _FilterScreenState(); }
如果需要更规范的写法,也可以提前用typedef定义函数类型,方便后续复用:
// 定义在FilterScreen类外部 typedef SaveFiltersFunc = void Function(Map<String, bool> filters); class FilterScreen extends StatefulWidget { static const routeName = '/filters'; final SaveFiltersFunc saveFilters; FilterScreen(this.saveFilters); @override _FilterScreenState createState() => _FilterScreenState(); }
修改完成后即可正常传参调用,不会再触发该报错。
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

