首页 > 解决方案 > 在 null 上调用了方法“[]”。(如何从 Firestore 中检索数据?)

问题描述

我有关于firestore的数据。我使用了 json 和带有 bloc 模式的序列化。项目未运行。错误是,

未处理的异常:NoSuchMethodError:在 null 上调用了方法“[]”。接收者:null 尝试调用:

我的 DB.dart 文件(用于设置数据)

class DB {
  final db = Firestore.instance;

  getPhotography() async {
     await db
    .collection('photography')
    .document('0yUc5QBGHNNq6WK9CyyF')
    .setData(jsonDecode(jsonEncode(Photography(
  [AllImages(["list"])],
  "image_url",
  "Shanika",
  "inage_url",
  "lovely couple",
  "Bhanuka"
))));
  }}
DB db = DB();

摄影块类

class PhotographyBloc extends BlocBase{

PhotographyBloc(){
  init();
}
Photography photography;

  final _firestoreController = StreamController<Photography>();
  Stream<Photography> get outFirestore => _firestoreController.stream;
  Sink<Photography> get inFirestore => _firestoreController.sink;


  @override
  void dispose() {
    _firestoreController.close();
  }

  void init() async{
  Photography data;
  await db.getPhotography().then((v) => data = v);
    inFirestore.add(data);
  }
}

小部件(StreamBuilder)

child: StreamBuilder<Photography>(
                stream: bloc.outFirestore,
                initialData: null,
                builder: (context, snapshot) {
                  print(snapshot.data); //output is null
                  Photography data = Photography.fromJson(jsonDecode(jsonEncode(snapshot.data))); //try to retrieving data, error is coming here

摄影模型类(我用的是 build_runner)

import 'package:json_annotation/json_annotation.dart';
part 'Model.g.dart';

    @JsonSerializable()
    class Photography{
       List<AllImages> all_images;
       String couplePhoto;
       String female;
       String image_url;
       String info;
       String male;

      Photography();

      factory Photography.fromJson(Map<String, dynamic> json) => _$PhotographyFromJson(json);
       Map<String,dynamic> toJson() => _$PhotographyToJson(this);
    }

    @JsonSerializable()
    class AllImages {
      final List<String> imageUrl;

      AllImages(this.imageUrl);

      factory AllImages.fromJson(Map<String, dynamic> json) => _$AllImagesFromJson(json);
      Map<String,dynamic> toJson() => _$AllImagesToJson(this);
    }

标签: flutterdartgoogle-cloud-firestorebloc

解决方案


推荐阅读