flutter 在构建StreamBuilder< User?>(dirty,state:_StreamBuilderBaseState< User?,AsyncSnapshot< User?>>)时引发以下_TypeError:

qv7cva1a  于 2023-11-21  发布在  Flutter
关注(0)|答案(1)|浏览(121)

在我的streambuilder -第一次我得到快照空值。并显示我错误。在空值中使用了重复检查操作符。
这里是我的主要部件,显示我的错误.主应用程序状态:

home: _getLandingPage(),

字符串
显示错误的小部件

Widget _getLandingPage() {
return StreamBuilder<User?>(
  stream: FirebaseAuth.instance.authStateChanges(),
  builder: (BuildContext context, snapshot) {
    debugPrint('From landing method: ');
    debugPrint('User type: ${userType}');
    debugPrint('snaphsot has data : ${snapshot.hasData}');
    debugPrint(
        'snaphsot provider length : ${snapshot.data!.providerData.length}');
    
    if (snapshot.hasData) {
      if (snapshot.data!.providerData.length == 1 &&
          snapshot.data!.emailVerified) {
        // logged in using email and password
        if (userType == null) {
          return const WelComeScreen();
        }
        return userType == 'TEACHER'
            ? TeacherMainScreen()
            : const StudentMainScreen();
      } 
      else {
        
        return const SignInScreen();
      }
    }
     else {
      debugPrint('snapshot has no data for'); 
      return const SignInScreen();
    }
    
  },
);


}
控制台:

From landing method:
User type: Teacher
snapshot has data: false

快照有数据:false

一段时间后,快照获得了数据。

jtjikinw

jtjikinw1#

这条线

debugPrint('snaphsot provider length : ${snapshot.data!.providerData.length}');

字符串
抛出错误。
如果snapshot.hasData为false,则在使用snapshot.data!时会抛出“在空值中使用的校验运算符”。
您可以使用

debugPrint('snaphsot provider length : ${snapshot.data?.providerData.length}');

相关问题