flutter 从多个集合检索Firestore数据

h5qlskok  于 2023-04-07  发布在  Flutter
关注(0)|答案(1)|浏览(111)

概述

我写了一个Flutter屏幕,展示他们保存的测验为各自的用户。我已经成功地检索了一个用户的测验参考列表,但我一直在检索参考列表中的测验数据不成功。

目标

最终,我希望在ListView.builder()中显示检索到的数据,但是成功检索数据是主要目标。

Firestore设置

“User”集合中的每个文档代表应用程序的一个用户。用户有一个引用数组,指向他们创建的相应测验。“Quiz”集合中的每个文档代表一个单一测验。

当前编码

//main.dart
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'temp.dart';
import 'firebase_options.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: DefaultFirebaseOptions.currentPlatform,
  );
  runApp(
    MaterialApp(
      title: "SCRUM",
      home: GetUserName("eQxkFJZ7XOf73weUkjZzYQHCBw72"),
    ),
  );
}
//temp.dart
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

class GetUserName extends StatelessWidget {
  final String documentId;

  GetUserName(this.documentId);

  @override
  Widget build(BuildContext context) {
    CollectionReference users = FirebaseFirestore.instance.collection('User');

    return FutureBuilder<DocumentSnapshot>(
      future: users.doc(documentId).get(),
      builder:
          (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text("Something went wrong");
        }

        if (snapshot.hasData && !snapshot.data!.exists) {
          return Text("Document does not exist");
        }

        if (snapshot.connectionState == ConnectionState.done) {
          Map<String, dynamic> data =
              snapshot.data!.data() as Map<String, dynamic>;
          List<dynamic> quizRefs = data['Quizzes'];
          return Text("My: ${data['Quizzes']} ");
        }
        return Text("loading");
      },
    );
  }
}
wooyq4lh

wooyq4lh1#

看起来User文档中的Quizzes字段是一个文档引用数组。Firestore不会自动从引用的文档加载数据,因此当您加载User文档时,其Quizzes字段将显示为DocumentReference值数组。
要加载它们所引用的实际测验,您必须在每个测验上调用get()snapshots(),然后触发额外的加载/侦听测验数据本身。要在数组中显示它,您需要FutureBuilder(当您使用get()时)或StreamBuilder(当您使用snapshots时)。

相关问题