我想从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)
),
答案 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 分配一个新的值到长度变量。