Flutter Can';t将大量文档检索到firestore flift中
我有一个小问题,我需要在列表中检索StreamBuilder从Firestore检索到的集合。 我使用的是Flutter Can';t将大量文档检索到firestore flift中,flutter,google-cloud-firestore,Flutter,Google Cloud Firestore,我有一个小问题,我需要在列表中检索StreamBuilder从Firestore检索到的集合。 我使用的是snapshot.data.documents.lengh,但添加后出现错误: Class 'DocumentSnapshot' has no instance getter 'documents'. Receiver: Instance of 'DocumentSnapshot' Tried calling: documents 这是我的代码: Stream<DocumentS
snapshot.data.documents.lengh
,但添加后出现错误:
Class 'DocumentSnapshot' has no instance getter 'documents'.
Receiver: Instance of 'DocumentSnapshot'
Tried calling: documents
这是我的代码:
Stream<DocumentSnapshot> getDatabase() async* {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance
.collection('dataCollection')
.document(user.uid)
.snapshots();
}
@override
Widget build(BuildContext context,) {
return StreamBuilder(
stream: getDatabase(),
builder: (context, snapshot,) {
if (snapshot.data != null) {
return Column(
children: <Widget>[
Container(
height: 500,
child: ListView.builder(
shrinkWrap: true,
itemCount: 2,
itemBuilder: (BuildContext context, int index) {
return Card(
color: Color(0xFF1f2032),
elevation: 15,
child: Text(
snapshot.data['phone']..
Stream getDatabase()异步*{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
yield*Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
}
@凌驾
小部件构建(构建上下文){
返回流生成器(
流:getDatabase(),
生成器:(上下文、快照){
如果(snapshot.data!=null){
返回列(
儿童:[
容器(
身高:500,
子项:ListView.builder(
收缩膜:对,
物品计数:2,
itemBuilder:(构建上下文,int索引){
回程卡(
颜色:颜色(0xFF1f2032),
标高:15,
子:文本(
快照.数据['phone']。。
试试这个
StreamBuilder(
stream: stream,
builder: (BuildContext context,
AsyncSnapshot<List<DocumentSnapshot>> snapshots) {
if (snapshots.connectionState == ConnectionState.active &&
snapshots.hasData) {
return Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: snapshots.data.length,
itemBuilder: (BuildContext context, int index) {
//do something with snapshot.
}
}
return Container();
},
),
);
} else {
return Container();
}
},
),
StreamBuilder(
小溪:小溪,
生成器:(BuildContext上下文,
异步快照(快照){
如果(snapshots.connectionState==connectionState.active)&&
快照(hasData){
扩大回报(
子项:ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemCount:snapshots.data.length,
itemBuilder:(构建上下文,int索引){
//对快照执行一些操作。
}
}
返回容器();
},
),
);
}否则{
返回容器();
}
},
),
像这样初始化流
Stream<DocumentSnapshot> stream;
Future<dynamic> getDatabase() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
setState(() {
stream=Firestore.instance
.collection('dataCollection')
.document(user.uid)
.snapshots();
});
}
流;
未来的getDatabase()异步{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
设置状态(){
stream=Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
});
}
可以在initState中调用getDatabase()
更新:-
这是您的完整代码
class DataCo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
backgroundColor: Colors.blue,
),
body: Column(
children: [
CollectData(),
],
),
);
}
}
class CollectData extends StatefulWidget {
@override
_CollectDataState createState() => _CollectDataState();
}
class _CollectDataState extends State<CollectData> {
final String phone;
final String wife;
final String location;
_CollectDataState({this.phone, this.wife, this.location});
@override
void initState() {
super.initState();
getDatabase();
}
Stream<DocumentSnapshot> stream;
Future<dynamic> getDatabase() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
setState(() {
stream=Firestore.instance
.collection('dataCollection')
.document(user.uid)
.snapshots();
});
}
@override
Widget build(BuildContext context,) {
return StreamBuilder(
stream: stream,
builder: (BuildContext context,
AsyncSnapshot<DocumentSnapshot> snapshots) {
if (snapshots.connectionState == ConnectionState.active &&
snapshots.hasData) {
return Expanded(
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: snapshots.data.length,
itemBuilder: (BuildContext context, int index) {
//do something with snapshot.
}
}
return Container();
},
),
);
} else {
return Container();
}
},
);
}
}
class NoData extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
Text('No Data available'),
],
);
}
}
类DataCo扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
appBar:appBar(
背景颜色:Colors.blue,
),
正文:专栏(
儿童:[
CollectData(),
],
),
);
}
}
类CollectData扩展StatefulWidget{
@凌驾
_CollectDataState createState()=>\u CollectDataState();
}
类_CollectDataState扩展了状态{
最终字符串电话;
最后的妻子;
最终管柱位置;
_CollectDataState({this.phone,this.layer,this.location});
@凌驾
void initState(){
super.initState();
getDatabase();
}
溪流;
未来的getDatabase()异步{
FirebaseUser=等待FirebaseAuth.instance.currentUser();
设置状态(){
stream=Firestore.instance
.collection('dataCollection'))
.document(user.uid)
.快照();
});
}
@凌驾
小部件构建(构建上下文){
返回流生成器(
小溪:小溪,
生成器:(BuildContext上下文,
异步快照(快照){
如果(snapshots.connectionState==connectionState.active)&&
快照(hasData){
扩大回报(
子项:ListView.builder(
滚动方向:轴垂直,
收缩膜:对,
itemCount:snapshots.data.length,
itemBuilder:(构建上下文,int索引){
//对快照执行一些操作。
}
}
返回容器();
},
),
);
}否则{
返回容器();
}
},
);
}
}
类NoData扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回列(
儿童:[
文本(“无可用数据”),
],
);
}
}
只需按以下方式更改代码
Stream dataStream
然后
函数getDatbase()
然后
@覆盖
小部件构建(构建上下文){
返回流生成器(
流:数据流,
生成器:(上下文、快照){
如果(snapshot.data!=null){
返回列(
儿童:[
容器(
身高:500,
子项:ListView.builder(
收缩膜:对,
物品计数:2,
itemBuilder:(构建上下文,int索引){
回程卡(
颜色:颜色(0xFF1f2032),
标高:15,
子:文本(
快照.数据['phone']。。
再次出错问题出在我的类;需要从中重新设置用户数据的流上firestore@TiziDev我已经添加了完整的代码,看看这个工作是否更新了我的应答器要调试,你可以试着打印快照,看看它包含什么Shello谢谢你的努力,但我得到了长度错误:getter'lenght'没有为'DocumentSnaps'类型定义“热”。您想做什么?Firestore不会递归检索文档。用户填写表单,一旦用户填写表单,这些数据将变为int
@override
void initState() {
getDatabase().then((value) {
dataStream = value;
setState(() {});
});
super.initState();
}
getDatabase() async {
FirebaseUser user = await FirebaseAuth.instance.currentUser();
yield* Firestore.instance
.collection('dataCollection')
.document(user.uid)
.snapshots();
}
@override
Widget build(BuildContext context,) {
return StreamBuilder(
stream: dataStream,
builder: (context, snapshot,) {
if (snapshot.data != null) {
return Column(
children: <Widget>[
Container(
height: 500,
child: ListView.builder(
shrinkWrap: true,
itemCount: 2,
itemBuilder: (BuildContext context, int index) {
return Card(
color: Color(0xFF1f2032),
elevation: 15,
child: Text(
snapshot.data['phone']..