Flutter 颤振从ListView.builder中单击一张卡
我的应用程序中有一个屏幕,我使用ListView.builder从地图创建了一堆卡片: 现在我想点击这些卡片,当我点击时,我进入一个新的活动,并将医生的名字和他的其他信息传递给新的活动 我该怎么做 这是一个代码示例Flutter 颤振从ListView.builder中单击一张卡,flutter,flutter-listview,Flutter,Flutter Listview,我的应用程序中有一个屏幕,我使用ListView.builder从地图创建了一堆卡片: 现在我想点击这些卡片,当我点击时,我进入一个新的活动,并将医生的名字和他的其他信息传递给新的活动 我该怎么做 这是一个代码示例 class DocBanner extends StatelessWidget { @override Widget build(BuildContext context) { Size size = MediaQuery.of(context).size;
class DocBanner extends StatelessWidget {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
child: Text(
'Our Doctors:',
style: TextStyle(
fontSize: 18,
),
),
),
Container(
padding: EdgeInsets.symmetric(
horizontal: 5.0,
vertical: 25.0,
),
height: 190,
width: size.width,
child: ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemBuilder: (context, index) {
return Container(
width: size.width - 150,
child: Card(
child: Padding(
padding: const EdgeInsets.all(18.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'${myList[index]['name']}',
style: TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
letterSpacing: 2,
),
),
SizedBox(
height: size.height - (size.height * 0.99),
),
Text(
'${myList[index]['specialite']}',
style: TextStyle(
fontSize: 20,
),
),
SizedBox(
height: size.height - (size.height * 0.99),
),
Text(
'${myList[index]['city']}',
style: TextStyle(
fontSize: 20,
color: Colors.red,
),
),
],
),
),
),
);
},
itemCount: myList.length,
),
),
],
);
}
}
类DocBanner扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
Size Size=MediaQuery.of(context).Size;
返回列(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisSize:mainAxisSize.min,
儿童:[
填充物(
填充:常量边集。对称(垂直:0,水平:10),
子:文本(
“我们的医生:”,
样式:TextStyle(
尺码:18,
),
),
),
容器(
填充:EdgeInsets.symmetric(
水平:5.0,
垂直线:25.0,
),
身高:190,
宽度:size.width,
子项:ListView.builder(
滚动方向:轴水平,
收缩膜:对,
itemBuilder:(上下文,索引){
返回容器(
宽度:size.width-150,
孩子:卡片(
孩子:填充(
填充:常数边集全部(18.0),
子:列(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
正文(
“${myList[index]['name']}”,
样式:TextStyle(
尺寸:22,
fontWeight:fontWeight.bold,
字母间距:2,
),
),
大小盒子(
高度:size.height-(size.height*0.99),
),
正文(
“${myList[index]['specialite']}”,
样式:TextStyle(
尺寸:20,
),
),
大小盒子(
高度:size.height-(size.height*0.99),
),
正文(
“${myList[index][city']}”,
样式:TextStyle(
尺寸:20,
颜色:颜色,红色,
),
),
],
),
),
),
);
},
itemCount:myList.length,
),
),
],
);
}
}
您可以使用手势检测器并在onTap方法中导航到另一个屏幕,如下所示:
ListView.builder(
scrollDirection: Axis.horizontal,
shrinkWrap: true,
itemBuilder: (context, index) {
return GestureDetector(
onTap: navigateToOtherScreen(myList[index]),
child: Container(
....
将每个项目包装在gesturedetector中,并在gesturedetector的ontap()中使用navigator。如何获取医生的姓名和城市,然后单击以将其传递到新屏幕@doct您将导航到的其他小部件应该在构造函数中包含参数。像
NewScreen(this.name)
并将它们作为onTap:()=>Navigator.push(context,MaterialPageRoute(builder:()=>NewScreen(name))
传递,这里的名称是“${myList[index]['name']}”
好的,在我的例子中,我使用的是一个气泡底部栏,新屏幕是底部栏中的一个选项卡“如图中所示”,是否有办法将当前选项卡更改为新选项卡?@doct底部栏将有一些索引来跟踪当前页面,请更改。要使其正常工作,底部栏应与此页面和新页面共用。