getter'data'在null上被调用

时间:2019-04-13 18:13:43

标签: javascript flutter google-cloud-firestore document

我想从Firestore的文档中读取数据,但出现错误。

代码如下:

@override
  Widget build(BuildContext context) {
     final bloc = BlocProvider.of<AuthBloc>(context);
     DocumentSnapshot doc;
    return Scaffold(
      appBar: AppBar(
          title: Text("Your account"), backgroundColor: Colors.blueGrey[900]),
      body: Container(
          color: Colors.blueGrey[800],
          child: Form(
            key: _formKey,
            child: ListView(
              children: <Widget>[
                AccountImage(),
                ListTile(
                  leading: Icon(Icons.account_box, color: Colors.white),
                  title: TextField(
                    decoration: InputDecoration(
                      fillColor: Colors.white,
                      hintText: '${doc.data['name']}',
                      hintStyle: TextStyle(color: Colors.white)
                    ),

Screenshot of the error

2 个答案:

答案 0 :(得分:1)

如果要在Firestore中访问单个文档,请使用FutureBuilder。您没有指定要从Firestore中获取文档的位置。您需要通过Future(或Stream)从Firestore获取DocumentSnapshot。

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

class FutureExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return FutureBuilder(
        // This assumes you have a project on Firebase with a firestore database.
        future: Firestore.instance.collection("some-path").document("some-id").get(),
        initialData: null,
        builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
          if(snapshot.data == null){
            return CircularProgressIndicator();
          }

          DocumentSnapshot doc = snapshot.data;
          return Text(doc.data['name']);
        });
  }
}

如果您尚未配置应用程序,则可以在cloud_firestore存储库中找到示例: https://github.com/flutter/plugins/blob/master/packages/cloud_firestore/example/lib/main.dart

答案 1 :(得分:1)

如果有人在 2021 年遇到这个问题 .. 解决方案是,如果您使用 ListView.separated,那么 itemCount 会出现问题.. 所以首先用 0 初始化一个长度变量并将长度变量分配给 itemCount,然后使用 setState 分配一个新的值到长度变量。