【问题标题】:Firebase snapshot to map in flutterFirebase 快照在颤动中映射
【发布时间】:2021-10-09 02:33:29
【问题描述】:

我想制作一条关于夏令营信息的路线。我想使用firebase,我几乎完成了数据部分,但我无法将其“转换”为地图。 taborId 是一个 TextEditingController。我的想法是通过它的 id 添加一个营地。我会使用文档 ID 来识别营地。我有一个文本字段,我尝试获取文档。如果成功,我想将数据保存到共享首选项(json.encode)。因此,我想从快照中提取地图。我尝试了这种方法,但没有成功。我不知道如何将地图流转换为真正的地图或类似的东西。

try {
                                  final tmp=db
                                .collection("campdata")
                                    .doc(taborId.text).snapshots().map((event) => event.data());
                                  showToast(data["name"]);
                                } catch (e) {
                                  showToast(e.toString());
                                  print(e.toString());
                                }

谁能帮帮我?我搜索了互联网,但我没有找到任何东西。我不想使用 streambuilder,因为我只想使用一个文档,而不是所有文档。

【问题讨论】:

    标签: firebase flutter dictionary dart google-cloud-firestore


    【解决方案1】:

    有两种方法可以从 Firestore 中读取文档。

    使用 Stream,您可以将侦听器添加到 Firestore 文档,如果发生任何更改,将使用新数据触发构建方法。

    1. 设置流

      Stream readSomething(String docId){
          return FirebaseFirestore.instance.collection("campdata").doc(docId).snapshots();
      } 
      
    2. 在 StreamBuilder 中使用它

      StreamBuilder(
          stream: DatabaseClass().readSomething(taborId),
          builder: (context, snapshot) {
              if (snapshot.hasData){
                  return showToast(snapshot.data["name"]);
              } else {
                  return Container();
              }
          }
      );
      

    使用未来

    使用 Future,您等待对文档的单次读取。

    1. 设置未来
      Future<Map> getSomething(String docId) async {
          CollectionRefference campRef = FirebaseFirestore.instance.collection("campdata");
          return await campRef.doc(docId).get().then((value) => value.data());
      }
      
    2. 在 FutureBuilder 中使用它
      FutureBuilder(
          stream: DatabaseClass().getSomething(taborId),
          builder: (context, AsyncSnapshot<Map> snapshot) {
              if (snapshot.hasData){
                  return showToast(snapshot.data["name"]);
              } else {
                  return Container();
              }
           }
          );
      

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 2018-03-18
      • 2021-05-08
      • 2021-06-21
      • 2020-07-12
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      相关资源
      最近更新 更多