Flutter开发int类型initScreen未初始化报错,首次引导页代码如何修复?
报错原因
这个是Dart空安全机制的强制校验规则触发的报错:你声明的int initScreen属于不可空的int类型,Dart要求所有非空类型的类字段必须在类实例化完成前完成赋值,你既没有给初始值,也没有在构造方法中对该字段赋值,就会触发该报错。
适配引导页场景的解决方案(按优先级推荐)
方案1:直接赋默认值(最稳妥无运行时风险)
引导页场景下initScreen一般用于标记是否是首次启动,你可以直接给默认值,例如默认设为1代表首次启动,后续读取到本地存储的历史标记后再覆盖即可:int initScreen = 1;方案2:用
late关键字声明延迟初始化
如果你需要在应用启动后先读取本地存储(如SharedPreferences)再给该字段赋值,可以用late标记该字段为延迟初始化,注意必须保证在访问该字段前已经完成赋值,否则会触发运行时崩溃:late int initScreen; // 应用启动时的初始化逻辑示例 void initState() async { SharedPreferences prefs = await SharedPreferences.getInstance(); // 读取不到存储值时默认赋值1(首次启动) initScreen = prefs.getInt('initScreen') ?? 1; }方案3:修改为可空类型
如果你能接受该字段为空,可以把类型改为可空的int?,后续使用时做空判断即可:int? initScreen; // 使用时的判空示例 if (initScreen == 1) { // 跳引导页 } else { // 跳首页 }
内容的提问来源于stack exchange,提问作者NIKSON PJ
相关产品推荐
相关产品推荐

