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

Posted

技术标签:

【中文标题】Firebase Flutter Dart:类“_JsonQuerySnapshot”没有实例方法“[]”。接收方:“_JsonQuerySnapshot”的实例【英文标题】:Firebase Flutter Dart :Class '_JsonQuerySnapshot' has no instance method '[]'. Receiver: Instance of '_JsonQuerySnapshot' 【发布时间】:2021-08-21 05:50:49 【问题描述】:

我正在尝试以下方法:

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"].",
                       
                      ),
                    );
              ),

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

如何解决此错误?

【问题讨论】:

【参考方案1】:

函数 .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"].",
                       
                      ),
                    );
              ),

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

【讨论】:

以上是关于Firebase Flutter Dart:类“_JsonQuerySnapshot”没有实例方法“[]”。接收方:“_JsonQuerySnapshot”的实例的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 因无效安全(DART/FLUTTER)而无法工作

TypeError: dart.global.firebase.storage 不是 Flutter web 上的函数

Flutter with Firebase Google 登录:断言失败 network_image_io.dart

Flutter:Firebase基本查询或基本搜索代码

如何检查 Firebase 实时数据库(Dart/Flutter)中是不是存在值?

Flutter web Firebase 分析类型错误:dart.global.firebase.analytics 不是函数