LateInitializationError:字段“_userData@32329253”尚未初始化
Posted
技术标签:
【中文标题】LateInitializationError:字段“_userData@32329253”尚未初始化【英文标题】:LateInitializationError: Field '_userData@32329253' has not been initialized 【发布时间】:2021-06-18 09:18:04 【问题描述】:在尝试初始化数据时得到这个。
在构建 UserProfile(dirty, state: _UserProfileState#752a9) 时引发了以下 LateError: LateInitializationError: 字段 '_userData@32329253' 尚未初始化。"
代码如下:
late final User _user;
late final DocumentSnapshot _userData;
@override
void initState()
super.initState();
_initUser();
void _initUser() async
_user = FirebaseAuth.instance.currentUser!;
try
_userData = await FirebaseFirestore.instance
.collection('users')
.doc(_user.uid)
.get();
catch (e)
print("something went wrong");
构建函数甚至没有运行,因为我试图打印 _user 和 _userData 以检查它们是否已被初始化。 如果我尝试在 initUser() 函数中打印 _user 和 _userData,则会在错误语句之后打印 _user 并打印 _userData。 请帮助我找到解决此错误的方法。
【问题讨论】:
你检查过你的日志吗?! Firebase 总是告诉你错误。不要使用 try catch。 顺便说一句,您在错误的范围内使用了 lateinit。删除 _userData 的 lateinit 关键字 首先我没有使用 try catch 仍然得到同样的错误并且删除 late 关键字不会编译,因为很明显最终变量需要初始化 如果你不打算使用lateinit,你需要使用可选参数 您正在尝试在对象构造中未发生的覆盖方法上使用来自未来方法的“最终”变量。 Lateinit 存在于特定情况下,但不适用于您尝试使用的逻辑。 【参考方案1】:就我而言,我在使用easy_localization
时遇到了这个错误。我忘了:
await EasyLocalization.ensureInitialized();
在 main.dart 文件上。
附:我知道这不是这个问题的答案,我是为像我一样面临这个问题的人写的。
【讨论】:
【参考方案2】:即使您在initUser()
中初始化这些变量,但如果您在build()
方法中使用变量,您将收到此错误,因为initUser()
是异步的,这意味着从其中获取数据需要时间集合。要解决这个问题,您可以这样做:
@override
void initState()
super.initState();
_initUser().whenComplete(()
setState(() );
);
这将使用新值重建小部件树。
【讨论】:
这个可以和OP中的sn-p一起使用吗?因为我收到一条错误消息,提示“此表达式的类型为 'void',因此无法使用其值”。【参考方案3】:你必须明白,可能有不同的场景,但原因是一样的,你使用的变量没有初始化。在上述情况下,我们可以通过在initState
方法中设置值来解决,例如:
late String name;
@override
void initState()
name = "Flutter Campus";
super.initState();
@override
Widget build(BuildContext context)
return Scaffold(
body: Text(name)
);
注意:在使用 late
变量之前,您必须对其进行赋值。
您也可以通过将“后期”变量设置为可空变量来解决此问题,例如:
String? name;
@override
Widget build(BuildContext context)
return Scaffold(
body: Text(name??"")
//if "name" is null, the text will have empty
);
【讨论】:
【参考方案4】:我已经通过简单地运行以下命令解决了这个问题:
dart migrate --skip-import-check--ignore-exceptions
【讨论】:
以上是关于LateInitializationError:字段“_userData@32329253”尚未初始化的主要内容,如果未能解决你的问题,请参考以下文章
LateInitializationError:字段“_userData@32329253”尚未初始化
LateInitializationError:字段尚未在 Flutter 中初始化
LateInitializationError:字段“chatRoomsStream”尚未在 Flutter 中初始化
如何解决 Flutter 中的 LateInitializationError?