Flutter运行提示LateInitializationError: searchSnapShot未初始化如何解决
问题根源
你声明searchSnapShot时使用了late修饰非空类型,late修饰的非空变量在未赋值前,任何访问操作(包括判断是否为null)都会触发未初始化报错。
你的页面首次渲染时,就会调用searchList()方法执行searchSnapShot != null的判断,此时你还没有点击搜索按钮触发initiateSearch()给searchSnapShot赋值,自然就抛出了这个错误。
修复步骤
- 把
searchSnapShot的声明从late修饰的非空类型,改为可空类型,允许初始值为null:
// 替换原来的 late QuerySnapshot <Map<String, dynamic>> searchSnapShot; QuerySnapshot <Map<String, dynamic>>? searchSnapShot;
- 调整
searchList()方法中访问searchSnapShot的代码,因为已经提前做了非空判断,可以直接用!强制解包:
Widget searchList() { return searchSnapShot != null ? ListView.builder( itemCount: searchSnapShot!.docs.length, shrinkWrap: true, itemBuilder: (context, index) { return SearchTile( userName: searchSnapShot!.docs[index].data()["name"], userEmail: searchSnapShot!.docs[index].data()["email"], ); } ) : Container(); }
可选优化点
你SearchTile组件中的userName和userEmail已经在构造函数中声明为required参数,实例化时一定会传值,不需要再加late修饰,可以直接去掉late关键字:
// 替换原来的 late final String userName; late final String userEmail; final String userName; final String userEmail;
内容的提问来源于stack exchange,提问作者VenoM
相关产品推荐
相关产品推荐

