flutter 如何获取_JsonDocumentSnapshot中的值?

bis0qfac  于 2022-11-25  发布在  Flutter
关注(0)|答案(2)|浏览(117)

下面的Flutter Streambuilder代码运行无误并返回(屏幕截图在底部):

ID: AzFdOO9WsFaFbTxTQsuo
Data: Instance of '_JsonDocumentSnapshot'

如何获取_JsonDocumentSnapshot中的值并将其显示在Text()小部件中?

例如,有一个名为“name”的字符串字段,但我不知道如何访问它。

StreamBuilder(
    stream: FirebaseFirestore.instance
                .collection("groceries")
                .doc(widget.docId)
                .snapshots(),
        builder: (context, streamSnapshot) {
            if (streamSnapshot.connectionState == ConnectionState.waiting) {
                return const Text("Loading");
            } else if (streamSnapshot.hasData) {
                return Text("ID: ${widget.docId}\n"
                            "Data: ${streamSnapshot.data}");
            } else {
                return const Text("No Data");
            }
        }
    )

谢谢你的帮助!

2eafrhcq

2eafrhcq1#

以下Stream返回类型为DocumentSnapshot的对象:

FirebaseFirestore.instance.collection("groceries").doc(widget.docId).snapshots();

并且该类型包含文档快照,还包含关于该文档的更多附加信息。
因此,为了获取表示Firestore文档数据的JSON Map<String, dynamic>,您需要对snapshot.data()的结果调用data(),因此您需要尝试以下操作:

StreamBuilder<DocumentSnapshot>(
stream: FirebaseFirestore.instance
            .collection("groceries")
            .doc(widget.docId)
            .snapshots(),
    builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> streamSnapshot) {
        if (streamSnapshot.connectionState == ConnectionState.waiting) {
            return const Text("Loading");
        } else if (streamSnapshot.hasData) {
            return Text("ID: ${widget.docId}\n"
                        "Data: ${streamSnapshot.data.data()}"); // added data()
        } else {
            return const Text("No Data");
        }
    }
)

现在它应该显示Map<String, dynamic>对象,其中包含Text小部件中的文档数据。
希望这对你有帮助。

cgyqldqp

cgyqldqp2#

在您的程式码范例中,streamSnapshot.dataObjectdynamic型别变数。
要访问数据的JSON值,必须指定与值对应的键。
streamSnapshot.data['banana']

相关问题