Flutter升级SDK至2.12后出现Non-nullable实例字段报错如何解决
问题原因
你将SDK约束提升到>=2.12.0 <3.0.0后,Dart默认启用了**空安全(Null Safety)**特性,原有非空安全的代码不符合新的语法规则,因此触发编译报错。
解决方案
方案1:适配空安全(推荐)
针对你给出的代码,只需修改两处不符合空安全规则的位置即可:
- 构造函数的
Key参数:空安全下可选参数如果是非空类型,必须标记为required或者声明为可空类型,Flutter官方组件默认使用可空Key的写法:
原代码:MyApp({Key key}) : super(key: key);
修改为:MyApp({Key? key}) : super(key: key); - 全局变量
futureData:你在initState中才对它赋值,没有在声明时初始化,需要添加late关键字标记为延迟初始化:
原代码:Future <List<Data>> futureData;
修改为:late Future <List<Data>> futureData;
修改后完整代码如下:
class MyApp extends StatefulWidget { MyApp({Key? key}) : super(key: key); @override _MyAppState createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { late Future <List<Data>> futureData; @override void initState() { super.initState(); futureData = fetchData(); } }
方案2:临时禁用空安全(不推荐,仅作为过渡方案)
如果暂时不想全量适配空安全,可以在每个Dart文件的第一行添加注释,强制使用非空安全的语法规则:
// @dart=2.9
内容的提问来源于stack exchange,提问作者babayaro
相关产品推荐
相关产品推荐

