LateInitializationError:字段“_userData@32329253”尚未初始化

时间:2021-03-21 15:13:57

标签: firebase flutter dart google-cloud-firestore

尝试初始化数据时得到这个。

<块引用>

在构建 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 。
请帮助我找到解决此错误的方法。

3 个答案:

答案 0 :(得分:9)

就我而言,我在使用 easy_localization 时遇到了这个错误。我忘记了:

  await EasyLocalization.ensureInitialized();

在 main.dart 文件上。

附言我知道这不是这个问题的答案,我是为像我这样面临这个问题的人写的。

答案 1 :(得分:3)

即使您在 initUser() 中初始化这些变量,但如果您在 build() 方法中使用这些变量,您也会收到此错误,因为 initUser() 是异步的,这意味着它需要是时候从集合中获取数据了。要解决此问题,您可以执行以下操作:

@override
      void initState() {  
        super.initState();
        _initUser().whenComplete((){
          setState(() {});
       });
      }

这将使用新值重建小部件树。

答案 2 :(得分:0)

我通过简单地运行以下命令解决了这个问题:

dart migrate --skip-import-check--ignore-exceptions