首页 > 解决方案 > 如何使用颤振在firestore中特定文档的字段内显示地图?

问题描述

这是结构你好,如何从特定文档字段中的 firestore 检索地图以及如何在应用程序中将其显示为列表。这怎么可能实现?有人可以分享一个示例代码片段。例如在“Collection-Doc-Field-{key:value}”中,我想显示字段中的地图。

更新 :

Expanded(
                child: new ListView(
                  children: snapshot.data
                      .get('$field')
                      .map((DocumentSnapshot document) {
                    return new ListTile(
                        title: Column(
                            children: (document.data()['$field']
                                    as Map<String, dynamic>)
                                .entries
                                .map((e) => ListTile(
                                    title: Text(e.key),
                                    trailing: Text(e.value.toString())))
                                .toList())
                        //subtitle: new Text(document.data()['Subjects']),
                        );
                  }).toList(),
                ),
              ),

这就是我尝试显示字段地图的方式,但最终出现此错误

The following _TypeError was thrown building StreamBuilder<DocumentSnapshot>(dirty, state: _StreamBuilderBaseState<DocumentSnapshot, AsyncSnapshot<DocumentSnapshot>>#d3cf2):
type '(DocumentSnapshot) => ListTile' is not a subtype of type '(String, dynamic) => MapEntry<dynamic, dynamic>' of 'transform'

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


在您的代码中,snapshot.data是一个DocumentSnapshot对象。因此,当您调用 时,它会根据您的数据库结构.get(field)返回一个对象。Map<String, dynamic>当您编写时.map(DocumentSnapshot document),您使用了错误的类型,因为它旨在映射Map<String, dynamic>不是类型中的项目DocumentSnapshot

解决方案

您需要将get('$field')[可以简化为get(field)] 的结果转换为您期望的对象类型 [在这种情况下,它是Map<String, dynamic>] 类型,然后循环遍历每个地图条目以返回一个ListTile小部件。

将您的代码更新为以下代码,这应该可以修复错误:

     return ListView(
       children:
         (snapshot.data.get(field) as Map<String, dynamic>)
           .entries
           .map((MapEntry mapEntry) {
             return ListTile(
               title: Text(mapEntry.key),
               trailing: Text(mapEntry.value.toString()));
       }).toList(),
     );

推荐阅读