25

Getting this when trying to initialize data.

The following LateError was thrown building UserProfile(dirty, state: _UserProfileState#752a9): LateInitializationError: Field '_userData@32329253' has not been initialized."

Here's the code:

    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");
        }
      }

The build function is not even running as i tried to print _user and _userData to check if they have been initialized.
If i try to print _user and _userData in initUser() function, _user gets printed and _userData gets printed after the error statements.
Please help me find a way out through this error.

Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
Satyam Pandey
  • 537
  • 2
  • 5
  • 10

3 Answers3

20

In my case, I faced this error while using easy_localization. I forgot:

  await EasyLocalization.ensureInitialized();

on main.dart file.

P.S. I know this is not the answer to this question, I wrote this for someone who faced this issue like my case.

K.Amanov
  • 1,278
  • 14
  • 23
15

Even though you are initializing these variables inside the initUser(), but you will get this error if you are using the variables inside the build() method since initUser() is asynchronous meaning it will take time to get the data from the collection. To solve this you can do:

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

This will rebuild the widget tree with the new values.

Peter Haddad
  • 78,874
  • 25
  • 140
  • 134
  • Can this be used with the snippet in the OP? Because I get an error saying 'This expression has a type of 'void' so its value can't be used'. – Syed Saad Oct 08 '21 at 10:18
-12

I have resolved this by simply running below command:

dart migrate --skip-import-check--ignore-exceptions
Himanshu
  • 861
  • 10
  • 25