Flutter使用List时报错:List?类型不能赋值给List类型怎么解决
Flutter空安全类型不匹配报错解决方案
错误原因
该报错是Flutter 2.0及以上版本空安全机制的限制导致:AsyncSnapshot的data属性为可空类型List<dynamic>?,而ItemList组件的list参数要求传入非空的List<dynamic>,类型不匹配触发编译错误。
可行解决方案
方案1:非空断言(推荐,已提前判断数据存在的场景)
你已经通过snapshot.hasData确认data不为空,直接在snapshot.data后加非空断言符!强制解包即可:
future: getData(), builder: (context, snapshot) { if (snapshot.hasError) { print(snapshot.error); } return snapshot.hasData ? ItemList( list: snapshot.data!, ) : const Center( child: CircularProgressIndicator(), ); },
注:新版本Flutter可省略new关键字,常量组件加const可提升性能。
方案2:空值 fallback 兼容(容错性最高)
如果要覆盖极端空值场景,不给程序留崩溃风险,可以用空判断运算符??设置默认空列表:
list: snapshot.data ?? [],
方案3:显式类型转换
也可以通过as关键字显式声明类型完成转换:
list: snapshot.data as List<dynamic>,
内容的提问来源于stack exchange,提问作者Pallab Bhowmick
相关产品推荐
相关产品推荐

