Flutter Firebase:根据集合数据状态控制Widget显示与隐藏
修正后的Flutter代码:根据Firestore用户状态显示/隐藏Widget
你的代码存在几个关键问题,以下是修正方案:
- 必须返回Widget:builder函数需要明确return对应的组件,原代码漏掉了return关键字,导致组件无法渲染。
- 处理Snapshot状态:要考虑数据加载中、加载失败或数据为空的情况,避免空指针异常。
- 类型安全优化:指定AsyncSnapshot的具体类型,提升代码可读性和安全性。
修正后的完整代码:
final uid = FirebaseAuth.instance.currentUser!.uid; final CollectionReference users = FirebaseFirestore.instance.collection('users'); StreamBuilder<DocumentSnapshot>( stream: users.doc(uid).snapshots(), builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) { // 处理加载状态 if (snapshot.connectionState == ConnectionState.waiting) { return const CircularProgressIndicator(); } // 处理错误或数据为空的情况 if (snapshot.hasError || !snapshot.hasData) { return const SizedBox.shrink(); // 无内容时返回空组件 } // 获取用户状态 final userData = snapshot.data!.data() as Map<String, dynamic>; final String status = userData['Status'] ?? ''; // 为空时默认空字符串 if (status == 'Not Verified') { return GestureDetector( child: const Text( 'Verify your account', style: TextStyle(fontSize: 20, color: Colors.blue), ), onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => const AccountVerificationScreen(), ), ); }, ); } else { return const SizedBox.shrink(); // 状态不符合时返回空组件 } }, )
内容的提问来源于stack exchange,提问作者Eben Oasis
相关产品推荐
相关产品推荐

