0

我使用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();
}
4

1 回答 1

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(),
              );
            }
          }),
    );
  }
}
于 2021-09-23T20:02:28.867 回答