【问题标题】:Flutter Error Firebase/Firestore- Null check operator used on a null value颤振错误 Firebase/Firestore- 空值检查运算符用于空值
【发布时间】:2021-11-17 04:40:54
【问题描述】:

我使用 firebase 作为数据库,然后我从 firestore 获取一些数据但抛出此错误,

"对空值使用空检查运算符",

我不明白为什么。

Ps:Flutter 新手

这是我的主屏幕代码:

class _HomeState extends State<Home> {
  Map<String, dynamic>? userData = {};
  PanelController _panelController = PanelController();
  Widget build(BuildContext context) {
    getUserData().then((DocumentSnapshot documentSnapshot) async {
      if (documentSnapshot.exists && documentSnapshot.data() != null) {
        setState(() {
          userData = {"data": documentSnapshot.data()};
        });
      }
    });
    return Scaffold(
      appBar: CustomAppbar(
        title: translate("APP_BAR.TITLE.HOME"),
        canBack: false,
      ),
      body: Stack(
        fit: StackFit.expand,
        children: <Widget>[
          Text(userData!['data']!['userName']),
        ],
      ),
      drawer: CustomDrawer(),
    );
  }

}

这里是我的 Api 服务

final _auth = FirebaseAuth.instance;
final FirebaseFirestore _fireStore = FirebaseFirestore.instance;
final userId = getData(user_uid);

getUserData() {
  return _fireStore.collection('Users').doc(userId).get();
}

【问题讨论】:

  • 当您想要在 Future(API 调用)完成后构建 Widgets 时,首选使用 FutureBuilder。错误在这里userData!['data']!['userName']。更好地检查 null 值,而不是说该值不能为空(这就是 ! 所做的)。
  • 你想获取单个文档还是所有集合?
  • @WaliKhan 每个用户 ID 只有一个文档

标签: firebase flutter


【解决方案1】:

您可以使用下面的代码来解决您的问题,但请检查两件事您是否拥有从 firebase 获取数据所需的所有权限并检查文档 ID 是否正确?您可以使用 if(snapshot.data!.exists) 检查文档是否存在于当前集合中

    import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';

class TestClass extends StatefulWidget {
  const TestClass({Key? key}) : super(key: key);

  @override
  _TestClassState createState() => _TestClassState();
}

class _TestClassState extends State<TestClass> {
  final _auth = FirebaseAuth.instance;
  final FirebaseFirestore _fireStore = FirebaseFirestore.instance;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder<DocumentSnapshot>(
          future: _fireStore
              .collection('Users')
              .doc(_auth.currentUser!.uid)
              .get(),
          builder: (context, snapshot) {
            if (snapshot.hasData) {
              return Center(child: Text(snapshot.data!['userName']['name']));
            } else {
              return Center(
                child: CircularProgressIndicator(),
              );
            }
          }),
    );
  }
}

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2021-07-08
    • 1970-01-01
    • 2021-09-25
    • 2022-07-20
    • 1970-01-01
    • 2022-01-13
    • 2022-09-30
    • 2021-11-04
    相关资源
    最近更新 更多