Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.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,我有一组菜单列表要打开,然后导航到相应的页面,但是我发现我的解决方案效率不高,因为菜单列表会不断添加新的菜单。我试图在开关盒内建立一个for循环 class MenuData { MenuData(this.icon, this.title, this.route); final IconData icon; final String title; final String route; } List<MenuData> menuList = [ MenuData

我有一组菜单列表要打开,然后导航到相应的页面,但是我发现我的解决方案效率不高,因为菜单列表会不断添加新的菜单。我试图在开关盒内建立一个for循环

class MenuData {
  MenuData(this.icon, this.title, this.route);
  final IconData icon;
  final String title;
  final String route;
}

List<MenuData> menuList = [
 MenuData(Icons.move_to_inbox_outlined, 'Menu A',AppConstant.MenuRouteA),
 MenuData(Icons.move_to_inbox_outlined, 'Menu B',AppConstant.MenuRouteB),
 MenuData(Icons.move_to_inbox_outlined, 'Menu C',AppConstant.MenuRouteC),
 MenuData(Icons.move_to_inbox_outlined, 'Menu D',AppConstant.MenuRouteD),
    ];

void _menuNavigate(int index) {
 switch (index) {
        case 1:
          Navigator.pushNamed(context, AppConstant.MenuRouteA);
          break;
        case 2:
          Navigator.pushNamed(context, AppConstant.MenuRouteB);
          break;
        case 3:
          Navigator.pushNamed(context, AppConstant.MenuRouteC);
          break;
        case 4:
          Navigator.pushNamed(context, AppConstant.MenuRouteD);
          break;
}

Widget MenuCard(){
        Card(
            elevation: 0.2,
            shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(8.0)),
                child: InkWell(
                  onTap: () {
                    _menuNavigate(menu[index]);
                  },
        )
}
类菜单数据{
菜单数据(this.icon、this.title、this.route);
最终的Iconda图标;
最后的字符串标题;
最终管柱路线;
}
列表菜单列表=[
MenuData(Icons.move__至_收件箱_'菜单A',AppConstant.MenuRouteA),
菜单数据(Icons.move_至“菜单B”中的“收件箱”,AppConstant.MenuRouteB),
菜单数据(Icons.move__to_inbox__'Menu C',AppConstant.MenuRouteC),
菜单数据(Icons.move__to_inbox__'Menu D',AppConstant.MenuRouteD),
];
void\u menuNavigate(整数索引){
开关(索引){
案例1:
pushNamed(上下文,AppConstant.MenuRouteA);
打破
案例2:
pushNamed(上下文,AppConstant.MenuRouteB);
打破
案例3:
pushNamed(上下文,AppConstant.MenuRouteC);
打破
案例4:
Navigator.pushNamed(上下文,AppConstant.MenuRouteD);
打破
}
小部件菜单卡(){
卡片(
标高:0.2,
形状:圆形矩形边框(
边界半径:边界半径。圆形(8.0)),
孩子:InkWell(
onTap:(){
_菜单(菜单[索引]);
},
)
}
如何使“menuNavigate变成switch for loop以避免重写许多代码,我尝试构建一个switch case,但这不起作用,并且出现了“case expressions must is constant.dart(non_constant_case_expression)”的错误


void\u menuNavigate(整数索引){
开关(索引){

对于(inti=0,i只需使用
Navigator.pushNamed(context,menuList[index].route);
as

void _menuNavigate(int index) {
    Navigator.pushNamed(context, menuList[index].route);
}

开关大小写不要这样使用。For循环也一样。你可以在你的情况下使用For循环,删除你的开关。但是开关大小写比For循环好。在你的开关情况下,你必须使用4次大小写,你可以使用loop代替Switch case,但在循环中,你将有4个条件语句,所以在你的情况下,不会有代码因循环th而减少好的。那就和开关箱呆在一起吧。祝你编码愉快。
void _menuNavigate(int index) {
    Navigator.pushNamed(context, menuList[index].route);
}