首页 > 解决方案 > 将来自 Firestore 的文档存储在列表中

问题描述

我正在尝试从名为“Org”的集合中检索文档并将其存储在列表中以显示在下拉菜单中,但列表返回[Instance of 'QueryDocumentSnapshot', Instance of 'QueryDocumentSnapshot'],因此我收到以下错误:

The method 'map' was called on null.
Receiver: null
Tried calling: map(Closure: (dynamic) => DropdownMenuItem<dynamic>)

这是我实现的代码:

void organisation() async {
    await Firebase.initializeApp();
    QuerySnapshot querySnapshot = await FirebaseFirestore.instance.collection("Org").get();
    final List<DocumentSnapshot> list = querySnapshot.docs;
    print(list);
    list.forEach((data) => print(data));
  }
@override
  initState() {
    
    
    Firebase.initializeApp();
    organisation();
    
  
    super.initState();
  }

这就是我实现下拉菜单的方式:

DropdownButtonFormField(
                          validator: (value) => value == "Select" ? 'Field required' : null,
                          value: _selectorg,
                                          onChanged: (val) => setState(() => _selectorg = val),
                                          
                                          items: list.map(
                                            (item) {
                                              return DropdownMenuItem(
                                                child: Text('$item'),
                                                value: item,
                                              );
                                            },
                                          ).toList(),
                                      hint: Text(
                                          "SELECT ORGANISATION",
                                          style: TextStyle(color: Colors.white)),
                                      
                      ),

标签: firebasefluttergoogle-cloud-firestore

解决方案


尝试这个,

@override
  initState() {
    
    
    
  
    super.initState();
Firebase.initializeApp();
    organisation();
    
  }

和,

在函数之外声明你的列表

final List<DocumentSnapshot> list;

void organisation() async {
    await Firebase.initializeApp();
    QuerySnapshot querySnapshot = await FirebaseFirestore.instance.collection("Org").get();
    list = querySnapshot.docs;
    print(list);
    list.forEach((data) => print(data));
  }

更新

StreamBuilder(
    stream: FirebaseFirestore.instance.collection("Org").get();
    builder: (BuildContext context,
        AsyncSnapshot<QuerySnapshot> snapshots) {
      if (snapshots.connectionState == ConnectionState.active &&
          snapshots.hasData) {
        print(snapshots.data);
        return ListView.builder(
          itemCount: snapshots.docs.length,
          itemBuilder: (BuildContext context, int index) {
            DocumentSnapshot doc = snapshots.data[index];
            Map data= doc.data;//This is your data
            return Text(
              data.toString(),
            );
          },
        );
      } else {
        return Center(child: CircularProgressIndicator());
      }
    },
  ),

推荐阅读