Firebase Flutter Dart:类“_JsonQuerySnapshot”没有实例方法“[]”。接收者:“_JsonQuerySnapshot”的实例

sal*_*a.m 3 json dart flutter google-cloud-firestore

我正在尝试以下操作:

StreamBuilder(
                  stream: user
                          .where('Phone Number',
                              isEqualTo: widget.user['ID'])
                          .snapshots(),
                  builder: (context, snapshot) {
                    if (!snapshot.hasData) {
                      return Text("Loading");
                    }
                    var profile= snapshot.data;
                    return Padding(
                      padding: const EdgeInsets.only(left: 15),
                      child: Text(
                        "${profile["Gender"]}.",
                       
                      ),
                    );
              }),
Run Code Online (Sandbox Code Playgroud)

类 _JsonQuerySnapshot 没有实例方法“[]”。接收者:“_JsonQuerySnapshot”的实例尝试调用:[](“性别”)

我该如何修复这个错误?

Yai*_*hen 9

函数 .snapshots() 应返回 QuerySnapshot。尝试访问 snapshot.data.docs,您应该得到一个列表,然后您可以使用 doc.data() 访问每个 QueryDocumentSnapshot 数据。

它看起来像这样:

StreamBuilder(
                  stream: user
                          .where('Phone Number',
                              isEqualTo: widget.user['ID'])
                          .snapshots(),
                  builder: (context, snapshot) {
                    if (!snapshot.hasData) {
                      return Text("Loading");
                    }
                    // snapshot.data is QuerySnapshot than I access .docs to get List<QueryDocumentSnapshot>
                    var docs = snapshot.data.docs;
                    // Accessing single QueryDocumentSnapshot and then using .data() getting its map.
                    final user = docs[0].data()!;
                    return Padding(
                      padding: const EdgeInsets.only(left: 15),
                      child: Text(
                        "${user["Gender"]}.",
                       
                      ),
                    );
              }),
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,请告诉我,我会更新答案!:)