Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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
Flutter 如何在颤振中使用手势检测器和滑动列表导航_Flutter_Dart - Fatal编程技术网

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();})
                    );
                    }
                ),