【发布时间】:2020-04-03 04:52:36
【问题描述】:
我正在尝试将 Firestore Map 中的数据反序列化为一个新类并使用 Provider 调用该类。我遵循了几个教程 (https://fireship.io/lessons/advanced-flutter-firebase/) 都没有成功。
///auth_class.dart
import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class UserCheck extends ChangeNotifier {
final _auth = FirebaseAuth.instance;
FirebaseUser loggedInUser;
var userDetails;
final String id;
String firstName;
final String lastName;
final String userEmail;
final String userOrg;
final Timestamp regDate;
final String date;
UserCheck({
this.id,
this.firstName,
this.lastName,
this.userEmail,
this.userOrg,
this.regDate,
this.date,
});
factory UserCheck.fromSnap(DocumentSnapshot ds) {
Map data = ds.data;
return UserCheck(
id: ds.documentID,
firstName: ds['fname'] ?? '',
lastName: data['lname'] ?? '',
userEmail: data['regEmail'] ?? '',
userOrg: data['org'] ?? '',
);
}
然后我尝试使用
调用//database_service.dart
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:oast_app/widgets/auth_class.dart';
class DatabaseService {
Stream<List<UserCheck>> streamUser(FirebaseUser user){
var ref = Firestore.instance.collection('users').document('${user.uid}').snapshots();
return ref.map((list) => {
return list.data.map((ds) => UserCheck.fromSnap(ds)).toList()
});
}
}
错误信息: UserCheck.fromSnap(ds)).toList() ^^^^^^ lib/widgets/database_service.dart:12:55:错误:参数类型“字符串”不能分配给参数类型“文档快照”。 - 'DocumentSnapshot' 来自'package:cloud_firestore/cloud_firestore.dart' ('../../Downloads/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-0.12.11/lib/cloud_firestore.镖')。 返回 list.data.map((ds) => UserCheck.fromSnap(ds)).toList() ^ lib/widgets/database_service.dart:12:46:错误:“UserCheck”类型的值不能分配给“MapEntry”类型的变量。 - 'UserCheck' 来自'package:oast_app/widgets/auth_class.dart' ('lib/widgets/auth_class.dart')。 - 'MapEntry' 来自'dart:core'。 返回 list.data.map((ds) => UserCheck.fromSnap(ds)).toList() ^ lib/widgets/database_service.dart:12:28:错误:不能将参数类型“MapEntry Function(String)”分配给参数类型“MapEntry Function(String, dynamic)”。 - 'MapEntry' 来自'dart:core'。 返回 list.data.map((ds) => UserCheck.fromSnap(ds)).toList() ^ lib/widgets/database_service.dart:12:60:错误:没有为类“Map”定义方法“toList”。 - “地图”来自“飞镖:核心”。 尝试将名称更正为现有方法的名称,或定义名为“toList”的方法。 返回 list.data.map((ds) => UserCheck.fromSnap(ds)).toList() ^^^^^^ lib/widgets/database_service.dart:11:30:错误:“Set”类型的值不能分配给“List”类型的变量。 - 'Set' 来自 'dart:core'。 - “列表”来自“飞镖:核心”。 - 'UserCheck' 来自'package:oast_app/widgets/auth_class.dart' ('lib/widgets/auth_class.dart')。 返回 ref.map((list) => { >
【问题讨论】:
标签: flutter dart google-cloud-firestore