【发布时间】:2019-06-18 03:29:09
【问题描述】:
我正在尝试使用以下代码从 firestore 获取文档:
Future getCategories() async {
var firestore = Firestore.instance;
QuerySnapshot qn = await firestore.collection("categories").getDocuments();
return qn.documents;
}
@override
Widget build(BuildContext context) {
return Container(
child:FutureBuilder(
future:getCategories(),
builder:(context, snapshot){
if(snapshot.connectionState == ConnectionState.waiting){
return Center(
child:Text("Loading...")
);
}
else
{
return GridView.builder(
itemCount: snapshot.data.length,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisSpacing: 6.0, mainAxisSpacing: 6.0, crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return SingleCategory(
category_name: snapshot.data[index].data["title"],
category_picture: snapshot.data[index].data["picture"],
);
}
);
}
}
)
);
当我运行代码时,我收到以下错误:
I/flutter (7555): ══╡ 小部件库发现的异常 ╞═════════════════════════════════════════════════ ══════════ I/颤振 (7555):以下 NoSuchMethodError 被抛出构建 FutureBuilder(脏,状态:I/flutter(7555): _FutureBuilderState#c3e7b):I/flutter (7555):getter 'length' 被调用为 null。 I/颤振(7555):接收器:空 I/flutter(7555):尝试调用:长度 I/flutter(7555):I/flutter (7555):抛出异常时,这是堆栈:I/flutter (7555):#0 Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
谁能帮帮我。
【问题讨论】:
-
错误信息是明确的,你的
snapshot.data是空的。如果您使用FutureBuilder,请不要等待结果。 -
我正在使用本教程:youtube.com/watch?v=6uBjMFoyT-I。为什么 await 不能与 FutureBuilder 一起使用?顺便说一句,我删除了等待,我仍然得到同样的错误
-
@bangbang 只需打开调试器并检查
snapshot对象。注意字段snapshot.error和snapshot.connectionState -
抱歉,我的意思是您不一定需要
FutureBuilder,因为您已经在await声明之后立即获得了结果。var result = await getCategories(); print('done');应与getCategories().then((result) { print('done'); })相同,FutureBuilder<Categories>( future: getCategories(), builder: (context, snapshot){ print('done'); } );相同。但这确实可能不是您问题的根源。 -
这是我发现的:连接状态是 ConnectionState.waiting 快照错误是 PlatformException(执行 getDocuments 时出错,PERMISSION_DENIED:缺少权限或权限不足。,null)
标签: dart flutter google-cloud-firestore