Flutter 如何在颤振中使用手势检测器和滑动列表导航
如何使用我的列表导航?Flutter 如何在颤振中使用手势检测器和滑动列表导航,flutter,dart,Flutter,Dart,如何使用我的列表导航? 我的名单 我的onTap SliverList( delegate: SliverChildBuilderDelegate( (context, index) => GestureDetector(onTap:(){ Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){retur
我的名单 我的onTap
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(onTap:(){
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return beaches[index].intent;})
); //Material
}, //onTap
完整代码:
class myHome extends StatelessWidget {
List<paralies> beaches = [
paralies(title: "Afandou Beach", photos: "rv_afandou_a.jpg", intent: "b_afandou"),
paralies(title: "Agathi Beach", photos: "b_afandou_b.jpg", intent: "b_agathi")
];
@override
Widget build(BuildContext context) {
return SafeArea(
child: Material(
child: CustomScrollView(
slivers: [
SliverPersistentHeader(
delegate: MySliverAppBar(expandedHeight: 200),
pinned: true,
),
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(onTap:(){
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return beaches[index].intent;})
); //Material
}, //onTap
child: Card(
child: Padding(
padding: const EdgeInsets.fromLTRB(15.0,0,15.0,0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Image.asset("assets/beaches/${beaches[index].photos}", width: 100.0,height:
100.0,),
SizedBox(width: 70.0),
Text(beaches[index].title,
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.w800,
fontSize: 20,
), //TextStyle
), //Text
], //<Widget>[]
), //Row
), //Padding
), //Card
), //GestureDetector
childCount: beaches.length,
), //SliverChildBuilderDelegate
), //SliverList
], //Slivers
), //Custom ScrollView
), //Material
); //Safe Area
} //build
} //MyHome
类myHome扩展了无状态小部件{
列出泳滩=[
paralies(标题:“阿凡杜海滩”,照片:“rv_Afandou_a.jpg”,意图:“b_Afandou”),
帕拉利斯(标题:“阿加西海滩”,照片:“b_afandou_b.jpg”,意图:“b_Agathi”)
];
@凌驾
小部件构建(构建上下文){
返回安全区(
儿童:材料(
子:自定义滚动视图(
条子:[
滑冰机(
代表:MyLiverAppBar(扩展高度:200),
对,,
),
银表(
代表:SliverChildBuilderDelegate(
(上下文,索引)=>GestureDetector(onTap:(){
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){return[index].intent;})
);//材料
},//onTap
孩子:卡片(
孩子:填充(
填充:LTRB(15.0,0,15.0,0)的常数边集,
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
Image.asset(“assets/beads/${beads[index].photos}”,宽度:100.0,高度:
100.0,),
尺寸箱(宽度:70.0),
文本(海滩[索引])。标题,
样式:TextStyle(
颜色:颜色,蓝色,
fontWeight:fontWeight.w800,
尺寸:20,
),//文本样式
),//文本
], //[]
),//行
),//填充
),//卡片
),//手势检测器
childCount:Beats.length,
),//SliverChildBuilderDelegate
),//滑动列表
],//条子
),//自定义滚动视图
),//材料
);//安全区
}//构建
}//我家
据我所知,您正试图使用列表的特定索引进行导航,您应该执行以下操作:
Widget _intentToPage(String intent){
if(intent == "b_afandou"){
return B_AFANDOU_PAGE();
}
else if(intent == ...){
...
}
return Text("Page not found");
}
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(onTap:(){
Navigator.push(context, MaterialPageRoute(builder: (context) => _intentToPage(beaches[index].intent));
},
使用B_AFANDOU_PAGE()
作为该目的的特定页面的选择器
注意:
代码未经测试,但我相信这种方法应该能为您提供解决此问题的基本思路
据我所知,您正试图使用列表的特定索引进行导航,您应该执行以下操作:
Widget _intentToPage(String intent){
if(intent == "b_afandou"){
return B_AFANDOU_PAGE();
}
else if(intent == ...){
...
}
return Text("Page not found");
}
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(onTap:(){
Navigator.push(context, MaterialPageRoute(builder: (context) => _intentToPage(beaches[index].intent));
},
使用B_AFANDOU_PAGE()
作为该目的的特定页面的选择器
注意:
代码没有经过测试,但我相信这种方法应该会给你一个解决这个问题的基本思路。我只是使用了一个if
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(
child: Card(
child: Padding(
padding: const EdgeInsets.fromLTRB(15.0,0,15.0,0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Image.asset("assets/beaches/${beaches[index].photos}", width: 100.0,height:
100.0,),
SizedBox(width: 70.0),
Text(beaches[index].title,
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.w800,
fontSize: 20,
), //TextStyle
), //Text
],
)
),
),
onTap:() {if (index==0)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_afandou();})
);
if (index==1)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_agathi();})
);
}
),
SliverList(
代表:SliverChildBuilderDelegate(
(上下文,索引)=>手势检测器(
孩子:卡片(
孩子:填充(
填充:LTRB(15.0,0,15.0,0)的常数边集,
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
Image.asset(“assets/beads/${beads[index].photos}”,宽度:100.0,高度:
100.0,),
尺寸箱(宽度:70.0),
文本(海滩[索引])。标题,
样式:TextStyle(
颜色:颜色,蓝色,
fontWeight:fontWeight.w800,
尺寸:20,
),//文本样式
),//文本
],
)
),
),
onTap:(){if(索引==0)
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){return b_afandou();})
);
如果(索引==1)
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){return b_agathi();})
);
}
),
我刚刚用了一个if
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(
child: Card(
child: Padding(
padding: const EdgeInsets.fromLTRB(15.0,0,15.0,0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Image.asset("assets/beaches/${beaches[index].photos}", width: 100.0,height:
100.0,),
SizedBox(width: 70.0),
Text(beaches[index].title,
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.w800,
fontSize: 20,
), //TextStyle
), //Text
],
)
),
),
onTap:() {if (index==0)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_afandou();})
);
if (index==1)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_agathi();})
);
}
),
SliverList(
代表:SliverChildBuilderDelegate(
(上下文,索引)=>手势检测器(
孩子:卡片(
孩子:填充(
填充:LTRB(15.0,0,15.0,0)的常数边集,
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
Image.asset(“assets/beads/${beads[index].photos}”,宽度:100.0,高度:
100.0,),
尺寸箱(宽度:70.0),
文本(海滩[索引])。标题,
样式:TextStyle(
颜色:颜色,蓝色,
fontWeight:fontWeight.w800,
尺寸:20,
),//文本样式
),//文本
],
)
),
),
onTap:(){if(索引==0)
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){return b_afandou();})
);
如果(索引==1)
Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext context){return b_agathi();})
);
}
),
为了避免额外的行,我使用了变量:intent,但仅使用类似以下内容的if部分:onTap:(){if(index==0)Navigator.of(context).push(MaterialPageRoute(builder:(BuildContext){return b_afandou();});为了避免额外的行,我使用了变量b
SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) => GestureDetector(
child: Card(
child: Padding(
padding: const EdgeInsets.fromLTRB(15.0,0,15.0,0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Image.asset("assets/beaches/${beaches[index].photos}", width: 100.0,height:
100.0,),
SizedBox(width: 70.0),
Text(beaches[index].title,
style: TextStyle(
color: Colors.blue,
fontWeight: FontWeight.w800,
fontSize: 20,
), //TextStyle
), //Text
],
)
),
),
onTap:() {if (index==0)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_afandou();})
);
if (index==1)
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context){return b_agathi();})
);
}
),