簡體   English   中英

Null 檢查用於 null 值的運算符

[英]Null check operator used on a null value

當我嘗試根據用戶角色使用不同的頁面時出現此錯誤。 我不知道我應該如何使用? 要么。 在 StreamBuilder 或 class 本身。 我不知道它說userDoc是null。

Null 檢查用於 null 值的運算符

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();
        }
      },
    );
  }
}

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

那么它會是這樣的:

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

試試這個:

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

如果你使用? 當值為 null 嘗試使用時,這將引發錯誤? 將檢查值是否不是 null 的運算符,然后它將嘗試在此運算符之后調用該方法,如果與 null 值一起使用,則不會導致任何錯誤

改變這一行

final user = userDoc!.data(); 

對此

final user = userDoc?.data(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM