【问题标题】:Flutter Bloc : Fetch Firestore Data Into ModelFlutter Bloc:将 Firestore 数据提取到模型中
【发布时间】:2021-01-16 18:14:51
【问题描述】:

我正在尝试将 Firestore 中的数据提取到我的模型中,但失败了。

错误信息说:

The method '[]' was called on null, tried calling : []("alamat")

这是我的代码:

存储库:

Future<FaskesModel> getFaskesFirestore(String id) async {
    var result = _firestore
        .collection("fakses")
        .doc(id)
        .get()
        .then((snapshot) => FaskesModel.fromSnapshot(snapshot));
    return result;
  }

FaskesModel 类:

import 'package:cloud_firestore/cloud_firestore.dart';

class FaskesModel {
  String alamat;
  String id;
  String nama;
  GeoPoint alamatGeo;
  String deskripsi;
  String noTelepon;
  String noTeleponDarurat;
  String urlGambar;
  String website;

  FaskesModel(
      {this.alamat,
      this.alamatGeo,
      this.deskripsi,
      this.id,
      this.nama,
      this.noTelepon,
      this.noTeleponDarurat,
      this.urlGambar,
      this.website});

  factory FaskesModel.fromJson(Map<String, dynamic> json) => FaskesModel(
      alamat: json['alamat'] as String,
      alamatGeo: json['alamatGeo'] as GeoPoint,
      deskripsi: json['deskripsi'] as String,
      id: json['id'] as String,
      nama: json['nama'] as String,
      noTelepon: json['noTelepon'] as String,
      noTeleponDarurat: json['noTeleponDarurat'] as String,
      urlGambar: json['urlGambar'] as String,
      website: json['website'] as String);

  Map<String, dynamic> toJson() => {
        "alamat": alamat,
        "alamatGeo": alamatGeo,
        "deskripsi": deskripsi,
        "id": id,
        "nama": nama,
        "noTelepon": noTelepon,
        "noTeleponDarurat": noTeleponDarurat,
        "urlGambar": urlGambar,
        "website": website
      };

  FaskesModel.fromSnapshot(DocumentSnapshot documentSnapshot)
  
      : alamat = documentSnapshot.data()['alamat'],
        alamatGeo = documentSnapshot.data()['alamatGeo'],
        deskripsi = documentSnapshot.data()['deskripsi'],
        id = documentSnapshot.data()['id'],
        nama = documentSnapshot.data()['nama'],
        noTelepon = documentSnapshot.data()['noTelepon'],
        noTeleponDarurat = documentSnapshot.data()['noTeleponDarurat'],
        urlGambar = documentSnapshot.data()['urlGambar'],
        website = documentSnapshot.data()['urlGambar'];
}

在班级 Bloc 中,我只是这样称呼:

 FaskesModel faskesModel =
           await  _firebaseRepository.getFaskesFirestore(event.id);

我搜索了另一个问题,我发现要获取 DataSnapshot 字段,只需调用 snapShot.data.data,但就我而言,我只是找到了 snapShot.data()

再一次,我的问题的重点是如何将数据从 Firestore 提取到 FaskesModel

谢谢你。

【问题讨论】:

  • 在存储库中打印结果时显示什么?
  • @AnasMohammed:我打印 documentSnapshot.data() 显示为空。先生,也许我的存储库是错误的。我不知道
  • 尝试在repository中的结果后添加await并检查集合名称是否正确?
  • @AnasMohammed:是的,先生,我刚刚意识到我在写集合名称时打错了。谢谢先生。

标签: flutter google-cloud-firestore bloc


【解决方案1】:

将其发布为社区 Wiki,基于 cmets。

在使用快照将数据返回给类时,该问题似乎与集合名称中的错误输入有关。一旦类型正确,数据的返回就会正常工作,并且不会再打印null

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2020-11-07
    • 2019-07-24
    • 2019-07-26
    • 1970-01-01
    • 2020-02-07
    • 2021-03-30
    • 2019-06-13
    • 2020-09-04
    相关资源
    最近更新 更多