Flutter开发Dart报错:非空实例字段searchBar必须初始化问题求解
问题原因
该报错是Dart空安全机制的强制校验导致的:非空类型的实例字段必须在构造函数体执行前完成初始化,你当前在构造函数体内给searchBar赋值的操作不符合空安全的初始化校验规则。
解决方案
方案1(最适配当前场景):给
searchBar字段添加late关键字修饰
该关键字会告诉Dart编译器,该字段会在被首次使用前完成赋值,不需要在声明或构造函数初始化阶段强制校验。仅需修改字段声明代码即可,其余逻辑无需调整:late SearchBar searchBar;方案2:将字段改为可空类型
把字段声明为可空的SearchBar?类型,后续所有使用searchBar的位置都需要添加非空断言!(你需要自行保证使用时字段不为空,否则会触发运行时异常):
声明修改:SearchBar? searchBar;调用处修改:
actions: [searchBar!.getSearchAction(context)]方案3:将初始化逻辑移到构造函数初始化列表(不适用当前场景)
如果你初始化字段时不需要访问当前实例的成员(比如实例方法、其他实例字段),可以把赋值逻辑放到构造函数的初始化列表里。但当前你初始化SearchBar时用到了buildAppBar、onSubmitted等实例方法,初始化列表阶段实例还未完成初始化,无法访问这些成员,因此该方案不适用。
内容的提问来源于stack exchange,提问作者MMMMMM
相关产品推荐
相关产品推荐

