Flutter类型错误:List<Celebrity>?无法赋值给List<Celebrity>
解决Flutter中AsyncSnapshot数据赋值的空安全错误
你遇到的这个错误是Dart空安全机制导致的:snapshot.data的类型是List<Celebrity>?(可空类型),但你声明的变量celebritys是不可空的List<Celebrity>,所以无法直接赋值。以下是几种可行的解决方式:
方法一:强制解包(推荐)
既然已经通过if (snapshot.hasData)确认了snapshot.data不为null,直接用!强制解包即可:
List<Celebrity> celebritys = snapshot.data!;
这里的!是在告诉Dart:我已经确认这个值不是null,可以安全赋值。
方法二:空合并运算符兜底
如果担心极端场景下hasData判断后数据仍为null,可以用空合并运算符??给变量设置一个默认的空列表:
List<Celebrity> celebritys = snapshot.data ?? [];
这样即使snapshot.data意外为null,变量也会被赋值为空列表,避免报错。
额外提示
你代码里还有个潜在问题:在onRemove回调中直接修改celebritys列表并调用setState,只是修改了内存中的临时数据,并没有真正更新数据库。下次页面重建时,FutureBuilder会重新从数据库拉取数据,被删除的条目会再次出现。
正确的做法应该是调用数据库的删除方法(比如CelebrityDatabase.instance.delete(celebrity.id)),之后重新触发数据加载(比如将future赋值为State变量,删除后重新调用CelebrityDatabase.instance.celebritys()并更新这个变量)。
内容的提问来源于stack exchange,提问作者Mario586
相关产品推荐
相关产品推荐

