在Flutter应用程序的StreamBuilder小部件中未从Firebase获取数据

q5iwbnjs  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(137)

我试图通过从Firebase数据库中提取用户列表来填充Flutter应用程序中的DropDownButton,但快照为空。我知道有项目的集合,所以我不知道是什么错了。
下面是StreamBuilder的代码:

StreamBuilder<QuerySnapshot>(
  stream: _db.collection('users').snapshots(),
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasData == true) {
      return const Center(
        child: CircularProgressIndicator(),
      );
    } else {
      final usersList = snapshot.data.docs;
      return DropdownButton<String>(
        hint: const Text("Select User"),
        value: _currentCompany,
        onChanged: changedDropDownCompany,
        items: snapshot.data.docs
            .map<DropdownMenuItem<String>>((document) {
          return DropdownMenuItem<String>(
            value: document.id,
            child: Text(document.data()['fName']),
          );
        }).toList(),
      );
    }
  }),

下面是一张Firebase的照片:x1c 0d1x这应该能用。我哪里做错了?
谢谢你的帮助
EDITS Ok,所以final usersList = snapshot.data.docs;用数据填充usersList,但我得到以下错误:

我修改了代码如下:

StreamBuilder(
                    stream: _db.collection('users').snapshots(),
                    builder: (BuildContext context, AsyncSnapshot snapshot) {
                      if (snapshot.hasData) {
                        final usersList = snapshot.data.docs;
                        return DropdownButton<String>(
                          hint: const Text("Select User"),
                          value: _currentCompany,
                          onChanged: changedDropDownCompany,
                          items: usersList
                              .map<DropdownMenuItem<String>>((usersList) {
                            return DropdownMenuItem<String>(
                              value: usersList.id.toString(),
                              child: Text(usersList.data()['fName']),
                            );
                          }).toList(),
                        );
                      } else {
                        return const CircularProgressIndicator();
                      }
                    }),

如果我试着计算“孩子:Text(UsersList.data()'fName'])”,它表示无法计算该行。
所以,我想现在我需要知道如何从快照中提取数据以添加到项目中:?

dhxwm5r4

dhxwm5r41#

你的逻辑错了。如果snapshot.hasData,则显示您的

StreamBuilder<QuerySnapshot>(
                stream: _db.collection('users').snapshots(),
                builder: (BuildContext context, AsyncSnapshot snapshot) {
                  if (snapshot.hasData) {
                    final usersList = snapshot.data.docs;
                    return DropdownButton<String>(
                      hint: const Text("Select User"),
                      value: _currentCompany,
                      onChanged: changedDropDownCompany,
                      items: snapshot.data.docs
                          .map<DropdownMenuItem<String>>((document) {
                        return DropdownMenuItem<String>(
                          value: document.id,
                          child: Text(document.data()['fName']),
                        );
                      }).toList(),
                    );
                  } else {
                   return const CircularProgressIndicator();
                  }
                }),

相关问题