从 Firestore 获取数据并将其映射到提供程序对象
Posted
技术标签:
【中文标题】从 Firestore 获取数据并将其映射到提供程序对象【英文标题】:Fetching data from Firestore and map it into a provider object 【发布时间】: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 步,无法真正解决。
【问题讨论】:
你遇到了什么错误? 【参考方案1】:我正在使用流,这就是我映射结果的方式。
Stream<List<Run>> fetchRuns()
var snaps = Firestore.instance.collection('runs').snapshots();
return snaps.map( (list) =>
return list.documents.map((doc) => Run.fromDocument(doc)).toList()
);
https://github.com/aaronksaunders/flutter_firebase_auth_app
见lib/services/data.dart
【讨论】:
嘿亚伦,这看起来很不错,我一定会尝试的。唯一缺少的是我想使用pub.dev/packages/provider 来管理我的状态。我仍然会尝试您的解决方案并将提供程序包与它包装起来。非常感谢 @ChristianJosephs - 如果您查看该项目,我相信它正在使用提供者 谢谢,我想我监督了这一点。昨天发现了一个很棒的教程,尽管看看medium.com/flutter-community/…以上是关于从 Firestore 获取数据并将其映射到提供程序对象的主要内容,如果未能解决你的问题,请参考以下文章
渲染从 Firebase Firestore 映射的 React 组件
Cloud Firestore:如何在我的集合查询中获取文档引用并将其映射为 JSON 值?
将 Firebase 身份验证用户映射到 Firestore 文档