Flutter报错:参数类型List<dynamic>无法分配给List<Widget>该如何解决?
错误原因
报错是Dart类型系统的类型不匹配问题:Stack的children参数要求传入List<Widget>类型,但你代码中swipableUsers.map(buildUser).toList()返回的是List<dynamic>,所以触发赋值错误。
具体有两个代码问题导致类型推断失效:
- 你声明
swipableUsers时没有指定泛型,虽然初始化赋值的是List<User>,但变量本身的类型是List<dynamic>,影响后续map操作的类型推断 - 调用
map方法时没有显式指定返回值类型,Dart无法自动推断出map迭代后的元素是Widget类型
修复方案
- 修正
swipableUsers的变量声明,明确泛型类型:
// 原代码 List swipableUsers = <User>[]; // 修改为 List<User> swipableUsers = [];
- 调用
map方法时显式指定返回类型为Widget:
// 原代码 Stack(children: swipableUsers.map(buildUser).toList()) // 修改为 Stack(children: swipableUsers.map<Widget>(buildUser).toList())
额外注意事项
- 你的
getUsers异步方法当前没有被调用,且获取到数据后没有调用setState更新状态,会导致界面不会随着数据返回刷新,建议修改为:
@override void initState() { super.initState(); getUsers(); // 页面初始化时调用接口拉取数据 } getUsers() async { Box box = await Hive.openBox('usersBox'); // 拿到数据后调用setState触发重绘 setState(() { swipableUsers = box.values.toList().cast<User>(); }); }
_SwipePageState是State类,不需要实现PreferredSizeWidget,这部分属于冗余代码可以直接删掉,避免额外强制实现preferredSize属性的问题。
内容的提问来源于stack exchange,提问作者Ratr Dating
相关产品推荐
相关产品推荐

