0

我想检查我的用户是否是管理员并根据它显示一个小部件。我的数据存储在 Firestore 中,因此“用户”集合中有一个文档,其用户 ID 包含“isAdmin”字段。我当前的代码如下所示:

Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Column(
          children: [
            FutureBuilder(
              future: FirebaseAuth.instance.currentUser(),
              builder: (ctx, futureSnapshot) {
                if (futureSnapshot.connectionState == ConnectionState.waiting) {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
                final uid = futureSnapshot.data.uid;
                return StreamBuilder(
                  stream: Firestore.instance
                      .collection('users')
                      .document(uid)
                      .snapshots(),
                  builder: (ctx, userSnapshot) {
                    if (userSnapshot.connectionState ==
                        ConnectionState.waiting) {
                      return Center(
                        child: CircularProgressIndicator(),
                      );
                    }
                    var userDocument = userSnapshot.data;
                    if (userDocument['isAdmin'] == true) {
                      return FloatingActionButton(
                        onPressed: () {},
                      );
                    }
                  },
                );
              },
            ),
          ],
        ),
      ),
    );
  }

但是,此代码运行并给我一个错误,即我的构建函数返回 null。如果该数据存储在 Firestore 中,我如何检查我当前的用户是否是管理员

4

1 回答 1

0

将您的代码更新为此

Widget build(BuildContext context) {
    return Scaffold(
      body: SingleChildScrollView(
        scrollDirection: Axis.vertical,
        child: Column(
          children: [
            FutureBuilder(
              future: FirebaseAuth.instance.currentUser(),
              builder: (ctx, futureSnapshot) {
                if (futureSnapshot.connectionState == ConnectionState.waiting) {
                  return Center(
                    child: CircularProgressIndicator(),
                  );
                }
                final uid = futureSnapshot.data.uid;
                return StreamBuilder(
                  stream: Firestore.instance
                      .collection('users')
                      .document(uid)
                      .snapshots(),
                  builder: (ctx, userSnapshot) {
                    if (userSnapshot.connectionState ==
                        ConnectionState.waiting) {
                      return Center(
                        child: CircularProgressIndicator(),
                      );
                    }
                    var userDocument = userSnapshot.data.data();
                    if (userDocument['isAdmin'] == true) {
                      return FloatingActionButton(
                        onPressed: () {},
                      );
                    }
                  },
                );
              },
            ),
          ],
        ),
      ),
    );
  }

改变'var userDocument = userSnapshot.data;' 到 var userDocument = userSnapshot.data.data();

于 2020-12-11T21:22:11.237 回答