Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象

标签 firebase flutter google-cloud-firestore jsonserializer

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

从 Firebase 获取文档的类
数据库服务.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 [];
  }
}

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);
}

错误信息

编译器消息:
lib/widgets/database_service.dart:17:76: 错误:无法将参数类型“String”分配给参数类型“Map”。
- “ map ”来自“飞镖:核心”。
querySnapshot.data.map((json) => UserCheck.fromJson(json));
^
lib/widgets/database_service.dart:17:67: 错误:“UserCheck”类型的值不能分配给“MapEntry”类型的变量。
-“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 Function(String)”分配给参数类型“MapEntry Function(String, dynamic)”。
-“MapEntry”来自“dart:core”。
querySnapshot.data.map((json) => UserCheck.fromJson(json));

火基结构
enter image description here
^
collection('users').document('user.uid') 这是我试图获取的文档

最佳答案

假设您的集合名称为“tblcustomers”,

Stream<QuerySnapshot> stream = _db.collection("tblcustomers").snapshots();
  jsonObject = Customers(error: false, errorCode: 0, Items: List<Customers_items>());
  stream.forEach((QuerySnapshot element) {
    if (element == null) return;

    setState(() {
      jsonObject.Items = element.documents.map((e) => Customers_items.fromJson(e.data)).toList();
    });
  });

关于Firebase Documentsnapshot 映射到 Flutter 中的 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59295889/

相关文章:

javascript - 引用错误 : firebase is not defined in firebase with nodejs

android - 在 onMessageReceived 中获取推送通知数据但不显示推送通知

firebase - 如何在 `screen_view` Firebase事件上建立 channel

node.js - 使用 Cloud Functions for Firebase 和 @google-cloud/storage 删除图像时出现问题

android - 在多个模拟器上运行 flutter 应用程序

dart - 如何在 Flutter 中返回 Widget 列表的一部分

firebase - 如何获得 flutter 朔迷离中的Firestore文档的证件编号?

java - Android Firebase 数据库异常 : not define a no-argument constructor

android - 如何将 Google map View 添加到 Flutter

firebase - Firebase:让用户分别与服务器通信