skip to Main Content

I’m getting this error when i was tried to use different pages based on the user role. I don’t know how should I use the ? or ! in the StreamBuilder or the class itself. i don’t know it said that the userDoc is null.

Null check operator used on a null value

class Start extends StatelessWidget {
  const Start({super.key});

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<User?>(
      stream: FirebaseAuth.instance.authStateChanges(),
      builder: (context, snapshot) {
        if (snapshot.hasData && snapshot.data != null) {
          UserHelper.saveUser(snapshot.data!);
          return StreamBuilder<DocumentSnapshot>(
            stream: FirebaseFirestore.instance
                .collection('users')
                .doc('Tma4901vh0aXGHjbsvtp8k0fTJS2')
                .snapshots(),
            builder: (BuildContext context,
                AsyncSnapshot<DocumentSnapshot> snapshot) {
              final userDoc = snapshot.data;
              final user = userDoc!.data(); // Here is the error
              if ((user as Map<String, dynamic>)['role'] == 'admin') {
                return const Home();
              } else {
                return const UserHome();
              }
            },
          );
        } else if (snapshot.hasError) {
          return const Center(child: Text('Algo ha salido mal!'));
        } else {
          return const LoginScreen();
        }
      },
    );
  }
}

2

Answers


  1. Try this:

      if(snapshot.hasData){
        final userDoc = snapshot.data;
        final user = userDoc!.data();
        if ((user as Map<String, dynamic>)['role'] == 'admin') {
           return const Home();
        } else {
           return const UserHome();
        }
      } else {
        return Container();
      }
    
    Login or Signup to reply.
  2. Wrap this code with if(snapshot.hasData)

    final userDoc = snapshot.data;
    final user = userDoc!.data();
      if ((user as Map<String, dynamic>)['role'] == 'admin') {
          return const Home();
      } else {
          return const UserHome();
      }
    

    Then it would be like that:

    if(snapshot.hasData){
        final userDoc = snapshot.data;
        final user = userDoc!.data();
        if ((user as Map<String, dynamic>)['role'] == 'admin') {
           return const Home();
        } else {
           return const UserHome();
        }
    }else{
        return TheWidgetYouWant();
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search