Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase flatter、Dart、Firestore:如何将从Firestore检索到的用户数据发送到不同的屏幕?_Firebase_Flutter_Dart_Google Cloud Firestore - Fatal编程技术网

Firebase flatter、Dart、Firestore:如何将从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

我有一个屏幕,其中显示了使用stream builder从firestore检索用户数据的用户列表

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。