【问题标题】:Flutter firebase get a field from documentFlutter firebase 从文档中获取字段
【发布时间】:2021-07-10 12:36:39
【问题描述】:

我正在尝试从集合中的字段获取消息。这是一个只读数据,我是这样建模的

class SocialShare {
  final String message;
  SocialShare({
    this.message,
  });
  factory SocialShare.fromJson(Map<String, dynamic> json) {
    return SocialShare(
      message: json['message'],
    );
  }
}

我有一个名为“社交分享”的集合,其中包含一个文档,其中包含一个名为 message..的字段。

我是这样称呼它的

class SocialShares {
  final CollectionReference _socialMessage =
      FirebaseFirestore.instance.collection('socialShare');

  Future<SocialShare> fetchsocial() {
    return _socialMessage.get().then((value) {
      return SocialShare.fromJson(value); // how can i call it
    });
  }
}

我如何从 firebase 获得该值

【问题讨论】:

    标签: firebase flutter firebase-realtime-database google-cloud-firestore


    【解决方案1】:

    你可以做 fetchSocial async 并等待结果返回:

    fetchSocial() async{
      var value = await _socialMessage.get();
      return SocialShare.fromJson(value);
    }
    

    那么你必须用 await 或者你需要的地方调用 fetchSocial 方法。

    等待 fetchSocial() 或 fetchSocial.then ...

    【讨论】:

    • 我正在使用将此消息加载到共享按钮。以及如何避免错误 'QuerySnapshot' 无法分配给参数类型 'Map
    • 您正在获取集合中的所有文档,因此您需要调用类似 SocialShare.fromJson(value.docs[0].data) 的方法,但这样您将获得第一个文档。猜测您应该传递文档的 id 以仅从集合中获取它。像这样 FirebaseFirestore.instance.collection('socialShare').doc(idofthedocument)
    • 我不能像这样简单地通过 onPressed: () { Share.share(socialshares.fetchSocial()); },
    • @FebinJohnson 我认为不会像这样工作因为异步调用服务器,所以你需要拨打电话,等待结果然后传递给共享,我不确定但我think 不会直接起作用。
    【解决方案2】:

    _socialMessage.get().then((value) { 中的value 是一个QuerySnapshot object,它包含socialShare 集合中所有文档的DocumentSnapshots。

    要获取一个字段或所有字段的Map&lt;String, dynamic&gt;,您需要来自单个文档的数据。例如,要从集合中的第一个文档中获取 message 字段,您可以这样做:

    return SocialShare.fromJson(value.docs[0].data());
    

    【讨论】:

      猜你喜欢
      • 2020-09-20
      • 2021-07-04
      • 2021-08-31
      • 2020-11-05
      • 2021-07-20
      • 2022-12-18
      • 2021-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多