firebase - Future Builder不显示Cloud Firestore中的数据

标签 firebase flutter dart google-cloud-firestore

我从Firebase从Cloud Firestore加载数据。在函数loadAssignments()的print语句中,已加载的数据显示正确。但是,当我将使用小部件FutureBuilder在“文本”小部件中显示数据时,它不显示数据,我也不知道为什么。谁能帮帮我吗?

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

class AssignmentPage extends StatefulWidget {
  @override
  _AssignmentPageState createState() => _AssignmentPageState();
}

class _AssignmentPageState extends State<AssignmentPage> {
  Future _loadAssignments;
  QuerySnapshot _assignments;

  @override
  void initState() {
    super.initState();
    _loadAssignments = loadAssignments();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Bühlmaier App'),
        centerTitle: true,
        automaticallyImplyLeading: false,
      ),
      body: FutureBuilder(
        future: _loadAssignments,
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.done) {
            return ListView.builder(
                itemCount: _assignments.documents.length,
                itemBuilder: (context, index) {
                  return Card(
                    child: ListTile(
                      leading: Text('${_assignments.documents[index].data['Name'].toString()}'),
                    ),
                  );
                });
          } else if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          }
          return Center(child: CircularProgressIndicator());
        },
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () => toPage(NewAssignmentPage()),
      ),
    );
  }

  Future<void> loadAssignments() async {
    _assignments = await Firestore.instance.collection('assignments').getDocuments();
    for (int i = 0; i < _assignments.documents.length; i++) {
      print('DATEN: ' + _assignments.documents[i].data['Name'].toString());
    }
    setState(() {});
  }
}
当我添加以下代码时:
else if (snapshot.connectionState == ConnectionState.waiting) {
        return Text("No data");
      }
它有效,但是当我将代码编辑为:
else if (snapshot.connectionState == ConnectionState.waiting) {
            return CircularProgressIndicator();
          }
它不会加载数据,CircularProgressIndicator()也不会移动。

最佳答案

使用future属性中的方法:

          FutureBuilder(
            future: loadAssignments(),
            builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
              if (snapshot.connectionState == ConnectionState.done) {
                return ListView.builder(
                    shrinkWrap: true,
                    itemCount: snapshot.data.documents.length,
                    itemBuilder: (BuildContext context, int index) {
                  return Card(
                    child: ListTile(
                      leading: Text('${snapshot.data.documents[index].data['Name'].toString()}'),
                    ),
                  );
                    });
              } else if (snapshot.connectionState == ConnectionState.none) {
                return Text("No data");
              }
              return CircularProgressIndicator();
            },
          ),
将方法更改为以下内容:
  Future<QuerySnapshot> loadAssignments() async {
    return await Firestore.instance.collection('assignments').getDocuments();
  }

关于firebase - Future Builder不显示Cloud Firestore中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62858030/

相关文章:

Flutter 找不到小部件属性 : 'child' isn't defined

android - flutter : Custom TextFormField is not saving values onSaved

json - 重定向循环检测到 Dart

android - 未输入 Firebase onDataChange

Firebase云函数部署错误

flutter - 为什么我的 PopupMenuItem 上会出现 "Looking up a deactivated widget' 的祖先不安全”?

debugging - 如何在Android和iOS上同时运行或调试flutter项目?

post - Flutter - 处理POST请求中的状态码302

node.js - 如果不存在,则写入带有 "new"字段的文档,否则合并字段

java - 如何从 imageView 获取图像并将其存储到 firebase 存储