【发布时间】:2019-12-12 06:42:56
【问题描述】:
我在将 Firestore 与 Flutter 中的 Provider(状态管理)结合使用时遇到问题。 我的问题主要是在我的班级上映射从 firestore 检索到的数据。 -> 将 Firebase 数据反序列化为 Dart 类
我能够从 Firestore 中检索数据并将其打印到控制台中。
如果我想使用 json.decode 我总是得到“type xx' is not a subtype of type 'Map'”,这里也提到了https://github.com/flutter/flutter/issues/17417
我的跑步课
import 'package:flutter/foundation.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
enum Complexity { simple, challenging, hard }
class Run with ChangeNotifier {
final String id;
final String title;
final List<String> workouts;
final String imageUrl;
final List<String> intervals;
final List<String> steps;
final int duration;
Complexity complexity;
final bool isRecovery;
bool isBeginner;
Run(
{@required this.id,
@required this.title,
@required this.workouts,
@required this.imageUrl,
@required this.intervals,
@required this.steps,
this.duration,
this.complexity,
this.isRecovery,
this.isBeginner});
factory Run.fromDocument(DocumentSnapshot doc) {
return Run(
id: doc.documentID,
title: doc['title'] ?? '',
workouts: doc['workouts'] ?? 0,
imageUrl: doc['imageUrl'] ?? '',
intervals: doc['intervals'] ?? 0,
steps: doc['steps'] ?? 0);
}
我的 Runs 类应该获取数据
import 'package:flutter/material.dart';
import 'package:xxx/providers/run.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'dart:convert';
final runsRef = Firestore.instance.collection('runs');
class Runs with ChangeNotifier {
List<Run> _items = [];
fetchRuns() async {
DocumentSnapshot snapshot =
await runsRef.getDocuments().then((QuerySnapshot snapshot) {
snapshot.documents.forEach((DocumentSnapshot doc) {
print(doc.data);
});
});
}
- 我想调用函数 fetchRuns 来获取集合中的所有文档
- 我想将此检索到的数据映射到我的班级
- 我想使用这个类作为提供者来为不同的屏幕提供状态/数据
我卡在第 2 步,无法真正解决。
【问题讨论】:
-
你遇到了什么错误?
标签: flutter google-cloud-firestore provider