加载首页后如何从Firestore获取数据?

时间:2019-08-18 11:20:27

标签: flutter dart google-cloud-firestore flutter-layout

我正在尝试使用Flutter制作待办事项列表应用程序。加载首页后,数据不会显示在程序上

我尝试了QuerySnapshot,“。then”,睡眠和更多功能,但不幸的是,它们都没有作用

我尝试调试并查找问题所在。程序加载时看起来像Firestore中的数据尚未准备好,这就是为什么它没有出现在首页上的原因。



import 'dart:async';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'dart:io';

class home extends StatefulWidget {
  static const String id = 'home';
  @override
  _homeState createState() => _homeState();
}

class _homeState extends State<home> {
  String userUid;
  FirebaseUser loggedInUser;
  final _fireStore = Firestore.instance;

  final _auth = FirebaseAuth.instance;
  List<Container> messageWidgets = [];

  void getCurrentUser() async {
    final user = await _auth.currentUser();
    if (user != null) {
      loggedInUser = user;
      userUid = loggedInUser.uid;
    }
  }

  getTasks() {
    print('///////////////Get tasks///////////////');
    return _fireStore
        .document('Userss')
        .collection('$userUid/Tasks')
        .getDocuments();
  }


  bool boool = false;
  var tasks;

  @override
  void initState() {
    getCurrentUser();
    getTasks().then((QuerySnapshot docs) {
      if (docs.documents.isNotEmpty) {
        boool = true;
        tasks = docs.documents[0].data;
      }
    });
    super.initState();
  }


  @override
  Widget build(BuildContext context) {
    return SafeArea(
        child: Center(
            child: Column(
      children: <Widget>[
        boool
            ? Column(
                children: <Widget>[
                  Text(tasks['Task']),
                  Text(tasks['Category']),
                ],
              )
            : Container(
                child: Text('No DATA'),
              ),
      ],
    )));
  }


我希望数据在加载首页时出现,但不会出现

1 个答案:

答案 0 :(得分:0)

我的快速猜测是,由于数据是从Firestore异步加载的,因此您需要使用setState()

类似这样:

getTasks() {
  print('///////////////Get tasks///////////////');
  _fireStore
    .document('Userss')
    .collection('$userUid/Tasks')
    .getDocuments().then((QuerySnapshot docs) {
      if (docs.documents.isNotEmpty) {
        boool = true;
        setState(() {
          tasks = docs.documents[0].data;
        });
      }
    });
}