ban*_*ang 3 dart flutter google-cloud-firestore
下面的 getIngredients() 方法从 firestore 返回一个列表。
Future getIngredients() async {
return Firestore.instance
.collection('ingredients')
.where("name", isEqualTo: widget.dish_name.toString().toLowerCase()).getDocuments();
}
Run Code Online (Sandbox Code Playgroud)
现在我想在下面的项目构建器中显示这个列表:
new ListView.builder(
itemExtent: 90,
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return SingleIngredient(
ingredient_name: snapshot.data[index].ingredients,
);
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息:
_FutureBuilderState#7cbda): I/flutter (12164): 类 'QuerySnapshot' 没有实例 getter 'length'。I/flutter (12164):接收器:“QuerySnapshot”实例 I/flutter (12164):尝试调用:长度
这是我的firestore的结构。我正在获取成分清单:
更新 我已经更新了代码,但我只得到了成分列表中的第一个项目(即洋葱)。我希望 itembuilder 构建列表中的每个项目,因为我正在尝试显示图像和成分列表。这就是 SingleIngredient 小部件正在做的事情。那么,我怎样才能一一遍历每个列表呢?
Widget build(BuildContext context) {
return Container(
child: FutureBuilder(
future: getIngredients(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot user = snapshot.data.documents[index];
return SingleIngredient(
// Access the fields as defined in FireStore
ingredient_name: user.data['ingredients'][index].toString(),
);
},
);
} else if (snapshot.connectionState == ConnectionState.done &&
!snapshot.hasData) {
// Handle no data
return Center(
child: Text("No users found."),
);
} else {
// Still loading
return CircularProgressIndicator();
}
}),
);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个使用StreamBuilder我从集合中检索所有文档并构建一个ListView以显示它们的示例:
Widget buildUserList(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.documents.length,
itemBuilder: (context, index) {
DocumentSnapshot user = snapshot.data.documents[index];
return ListTile(
// Access the fields as defined in FireStore
title: Text(user.data['firstName']),
subtitle: Text(user.data['lastName']),
);
},
);
} else if (snapshot.connectionState == ConnectionState.done && !snapshot.hasData {
// Handle no data
return Center(
child: Text("No users found."),
);
} else {
// Still loading
return CircularProgressIndicator();
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
Scaffold(
body: StreamBuilder(
stream:
Firestore.instance.collection('users').snapshots(),
builder: buildUserList,
)
)
Run Code Online (Sandbox Code Playgroud)
或者
Scaffold(
body: FutureBuilder(
future:
Firestore.instance.collection('users').getDocuments(),
builder: buildUserList,
)
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4126 次 |
| 最近记录: |