Firebase flatter、Dart、Firestore:如何将从Firestore检索到的用户数据发送到不同的屏幕?
我有一个屏幕,其中显示了使用stream builder从firestore检索用户数据的用户列表Firebase flatter、Dart、Firestore:如何将从Firestore检索到的用户数据发送到不同的屏幕?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有一个屏幕,其中显示了使用stream builder从firestore检索用户数据的用户列表 StreamBuilder( stream: Collection .where('WorkType', isEqualTo: widget.worktype) .snapshots(), builder: (context, AsyncS
StreamBuilder(
stream: Collection
.where('WorkType', isEqualTo: widget.worktype)
.snapshots(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return Container(
height: 600,
child: ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 100,
child: GestureDetector(
onTap: () {
//Navigate to Screen two
},
child: Card(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: <Widget>[
Text(
snapshot.data.docs[index].data()['Name'],
style: kRobotoSlab.copyWith(
fontSize: 20)),
Text(
snapshot.data.docs[index]
.data()['Address'],
style: kRobotoSlab.copyWith(
fontSize: 15),
),
Text(
snapshot.data.docs[index]
.data()['Phone Number'],
style: kRobotoSlab.copyWith(
fontSize: 15),
),
],
),
),
),
),
),
);
}),
);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
} else {
return CircularProgressIndicator();
}
},
),
StreamBuilder(
流:集合
.where('WorkType',isEqualTo:widget.WorkType)
.snapshots(),
生成器:(上下文,异步快照){
if(snapshot.hasData){
返回容器(
身高:600,
子项:ListView.builder(
itemCount:snapshot.data.docs.length,
itemBuilder:(上下文,索引){
返回填充(
填充:常数边集全部(8.0),
子:容器(
身高:100,
儿童:手势检测器(
onTap:(){
//导航到第二屏
},
孩子:卡片(
孩子:填充(
填充:常数边集全部(8.0),
子:列(
横轴对齐:
CrossAxisAlignment.start,
儿童:[
正文(
snapshot.data.docs[index].data()['Name'],
风格:kRobotoSlab.copyWith(
尺寸:20),,
正文(
snapshot.data.docs[索引]
.data()['Address'],
风格:kRobotoSlab.copyWith(
尺寸:15),,
),
正文(
snapshot.data.docs[索引]
.data()[“电话号码”],
风格:kRobotoSlab.copyWith(
尺寸:15),,
),
],
),
),
),
),
),
);
}),
);
}else if(snapshot.hasrerror){
返回文本(snapshot.error.toString());
}否则{
返回循环ProgressIndicator();
}
},
),
我希望,一旦用户点击该卡,它将导航到屏幕2,该屏幕将显示用户配置文件以及从firestore检索到的数据
e、 g.卡1:Name=>Samia Address=>USA Number=>4659848668用户将按它,并将导航到屏幕2,其中包含Samia的信息
如何实现它?假设您调用新屏幕DetailScreen,您应该让它获取您想要在其中显示的项目的对象的地图,例如: 在
DetailScreen
定义中,您可以有:
class DetailScreen扩展无状态小部件{
//声明包含该项的字段。
最终用户;
//在构造函数中,需要一个用户。
DetailScreen({Key?Key,必需的this.user}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
//使用Todo创建UI。
返回脚手架(
appBar:appBar(
标题:文本(用户名),
),
主体:填充物(
填充:所有边缘设置(16.0),
子:文本(用户地址),
),
);
}
}
然后在gesturedector
onTap方法中,您可以执行以下操作:
Navigator.push(
上下文
材料路线(
生成器:(上下文)=>DetailScreen(用户:用户[索引]),
),
);
由于您没有使用像我上面的示例那样的模型,您可以让第二个屏幕接受一个映射字段,然后在导航到它时将snapshot.data.docs[index].data()作为值传入
现在,这将是:
class DetailScreen扩展了无状态小部件{
//声明包含该项的字段。
最终地图用户;
//在构造函数中,需要用户映射。
DetailScreen({Key?Key,必需的this.user}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
//使用Todo创建UI。
返回脚手架(
appBar:appBar(
标题:文本(用户['Name']),
),
主体:填充物(
填充:所有边缘设置(16.0),
子项:文本(用户['Address']),
),
);
}
}
当你导航的时候
导航器。推(
上下文
材料路线(
生成器:(上下文)=>DetailScreen(用户:snapshot.data.docs[index].data()),
),
); 谢谢你的意见。当我尝试运行它时,我得到了以下错误NoSuchMethodError:方法[]被调用为null。
我尝试了。不工作。您可以访问当前屏幕中的属性,对吗?当您在卡片中显示详细信息时?我想您可能希望在访问地图上的属性之前检查null。