Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象

Dav*_*bar 6 jsonserializer firebase flutter google-cloud-firestore

我正在尝试将 DocumentSnap 从 Firebase 映射到 Flutter 中的 Json 类。我可以确认我正在从文档中获取数据,但我无法将收集的数据传递给我的 Json 对象。我已附上代码和错误消息。

用于从 Firebase DatabaseService.dart 获取文档的类

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';

import 'package:oast_app/widgets/auth_class.dart';



class FireTest {
  Future<List<UserCheck>> streamUser(FirebaseUser user) async {
    DocumentSnapshot querySnapshot =
        await Firestore.instance.collection('users').document(user.uid).get();
    if (querySnapshot.exists) {
      print('success');
      print(querySnapshot.data['fname']);
      print(querySnapshot.data['lname']);

      querySnapshot.data.map<String, dynamic>((json) => UserCheck.fromJson(json)); **this is whats erroring**
    }
    return [];
  }
}
Run Code Online (Sandbox Code Playgroud)

Json 对象类

import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart';

part 'auth_class.g.dart';

@JsonSerializable(nullable: false)
class UserCheck extends ChangeNotifier {
  final String uid;
  final String fName;
  final String lName;
  final String regEmail;
  final String org;

  UserCheck({
    this.uid,
    this.fName,
    this.lName,
    this.regEmail,
    this.org,
  });

  factory UserCheck.fromJson(Map<String, dynamic> json) =>
      _$UserCheckFromJson(json);

  Map<String, dynamic> toJson() => _$UserCheckToJson(this);
}
Run Code Online (Sandbox Code Playgroud)

错误信息

编译器消息:lib/widgets/database_service.dart:17:76:错误:参数类型“String”无法分配给参数类型“Map <String,dynamic>”。

  • “地图”来自“dart:core”。querySnapshot.data.map<字符串,动态>((json) => UserCheck.fromJson(json)); ^ lib/widgets/database_service.dart:17:67:错误:“UserCheck”类型的值无法分配给“MapEntry <String,dynamic>”类型的变量。
  • “UserCheck”来自“package:oast_app/widgets/auth_class.dart”(“lib/widgets/auth_class.dart”)。
  • “MapEntry”来自“dart:core”。querySnapshot.data.map<字符串,动态>((json) => UserCheck.fromJson(json)); ^ lib/widgets/database_service.dart:17:47:错误:参数类型“MapEntry <String,dynamic> Function(String)”无法分配给参数类型“MapEntry <String,dynamic> Function(String,动态的)'。
  • “MapEntry”来自“dart:core”。querySnapshot.data.map<字符串,动态>((json) => UserCheck.fromJson(json));

火力基地结构

在此输入图像描述 ^ collection('users').document('user.uid')这是我试图获取的文档

Tho*_*mas 0

您在地图上设置的目标类型必须是您想要作为地图结果的类型。

所以应该是

querySnapshot.data.map((json) => UserCheck.fromJson(json)).toList();