Flutter 颤振打开特定页面上的Listview项

Flutter 颤振打开特定页面上的Listview项,flutter,dart,Flutter,Dart,您好,我正在制作一个食品订单应用程序,我将在下面的框中添加许多食品。我试着创建页面,但它可以生成大约60页,这对它来说太多了。我可以在一个页面中打开所有listview框吗?我将从mysql api获取数据。如果你有任何建议,请告诉我,谢谢 return MaterialApp( 标题:标题,, 家:脚手架( appBar:appBar( 标题:文本(“菜单”), ), 正文:GridView.count( 交叉轴计数:2, 儿童:[ 填充物( 填充:填充, 孩子:卡片( 形状:斜面矩形边框(

您好,我正在制作一个食品订单应用程序,我将在下面的框中添加许多食品。我试着创建页面,但它可以生成大约60页,这对它来说太多了。我可以在一个页面中打开所有listview框吗?我将从mysql api获取数据。如果你有任何建议,请告诉我,谢谢

return MaterialApp(
标题:标题,,
家:脚手架(
appBar:appBar(
标题:文本(“菜单”),
),
正文:GridView.count(
交叉轴计数:2,
儿童:[
填充物(
填充:填充,
孩子:卡片(
形状:斜面矩形边框(
边界半径:边界半径。圆形(25.0),
),
孩子:InkWell(
子容器:新容器(
装饰:盒子装饰(
图像:装饰图像(
图片:资产评估(
“安卓/assets/images/午餐.jpeg”,
),
适合:BoxFit.cover,
),
边界半径:边界半径。圆形(25.0),
),
),
onTap:(){
打印(“你好”);
},
),
),
),
填充物(
填充:填充,
孩子:卡片(
形状:边框,
子项:文本(“框2”),
颜色:颜色,黄色,
),
),
填充物(
填充:填充,
孩子:卡片(
形状:边框,
子项:文本(“框3”),
颜色:颜色。橙色,
),
),
填充物(
填充:填充,
孩子:卡片(
形状:边框,
子项:文本(“框4”),
颜色:颜色,蓝色,
),
),
填充物(
填充:填充,
孩子:卡片(
形状:边框,
子项:文本(“框4”),
颜色:颜色,蓝色,
),
),
填充物(
填充:填充,
孩子:卡片(
形状:边框,
子项:文本(“框4”),
颜色:颜色,蓝色,
),
),
),
],
),
),
);
}
}
  • 创建一个类,如
    FoodItem
    。(在其中保留图像路径、名称等属性)
  • 创建
    列表
  • 使用映射操作符将
    列表
    转换为用户界面
  • 这种方法的另一种选择是在单击项目时打开新页面
  • 以下是代码供您参考

    class FoodItem {
      // add other properties like title name or etc in this class.
      final String imageAssetPath;
    
      final String name;
    
      FoodItem(this.name, this.imageAssetPath);
    }
    
    List<FoodItem> _foodItems = <FoodItem>[
      FoodItem("Item 1", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 2", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 3", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 4", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 5", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 6", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 7", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 8", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 9", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 10", "android/assets/images/lunch.jpeg"),
    ];
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final padding = EdgeInsets.all(8.0);
        final border = BeveledRectangleBorder(
          borderRadius: BorderRadius.circular(25.0),
        );
        return MaterialApp(
          title: 'title',
          home: Scaffold(
            appBar: AppBar(
              title: Text("Menu"),
            ),
            body: GridView.count(
                crossAxisCount: 2,
                children: _foodItems.map((FoodItem item) {
                  return Padding(
                    padding: padding,
                    child: Card(
                      shape: border,
                      child: InkWell(
                        child: new Container(
                          decoration: BoxDecoration(
                            image: DecorationImage(
                              image: AssetImage(
                                item.imageAssetPath,
                              ),
                              fit: BoxFit.cover,
                            ),
                            borderRadius: BorderRadius.circular(25.0),
                          ),
                        ),
                        onTap: () {
                          Navigator.push(
                              context,
                              new MaterialPageRoute(
                                  builder: (BuildContext context) =>
                                      FoodItemWidget(item: item)));
                        },
                      ),
                    ),
                  );
                }).toList(growable: false)),
          ),
        );
      }
    }
    
    class FoodItemWidget extends StatelessWidget {
      final FoodItem item;
    
      const FoodItemWidget({Key key, this.item}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(body: Center(
            child: Text(item.name),
          ),);
      }
    }
    
    class-FoodItem{
    //在此类中添加其他属性,如标题名等。
    最终字符串imageAssetPath;
    最后的字符串名;
    FoodItem(this.name,this.imageAssetPath);
    }
    列表_foodItems=[
    FoodItem(“第1项”、“android/assets/images/午餐.jpeg”),
    FoodItem(“第2项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第3项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第4项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第5项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第6项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第7项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第8项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第9项”,“android/assets/images/午餐.jpeg”),
    FoodItem(“第10项”,“android/assets/images/午餐.jpeg”),
    ];
    类MyApp扩展了无状态小部件{
    @凌驾
    小部件构建(构建上下文){
    最终填充=所有边缘设置(8.0);
    最终边框=斜角矩形边框(
    边界半径:边界半径。圆形(25.0),
    );
    返回材料PP(
    标题:“标题”,
    家:脚手架(
    appBar:appBar(
    标题:文本(“菜单”),
    ),
    正文:GridView.count(
    交叉轴计数:2,
    子项:_foodItems.map((FoodItem项){
    返回填充(
    填充:填充,
    孩子:卡片(
    形状:边框,
    孩子:InkWell(
    子容器:新容器(
    装饰:盒子装饰(
    图像:装饰图像(
    图片:资产评估(
    item.imageAssetPath,
    ),
    适合:BoxFit.cover,
    ),
    边界半径:边界半径。圆形(25.0),
    ),
    ),
    onTap:(){
    导航器。推(
    上下文
    新材料路线(
    生成器:(BuildContext上下文)=>
    FoodItemWidget(项目:项目));
    },
    ),
    ),
    );
    }).toList(可增长:false)),
    ),
    );
    }
    }
    类FoodItemWidget扩展了无状态小部件{
    最后食品项目;
    const FoodItemWidget({Key-Key,this.item}):super(Key:Key);
    @凌驾
    小部件构建(构建上下文){
    返回脚手架(主体:中心)(
    子项:文本(项名称),
    ),);
    }
    }
    
    我的意思是,当我单击框时,它应该为每个框打开一个不同的页面。我已经更新了代码,请检查,您可以在FoodItem类中设置属性,无论您传递给FoodItemWidget的是哪个实例,UI都会相应膨胀。
    class FoodItem {
      // add other properties like title name or etc in this class.
      final String imageAssetPath;
    
      final String name;
    
      FoodItem(this.name, this.imageAssetPath);
    }
    
    List<FoodItem> _foodItems = <FoodItem>[
      FoodItem("Item 1", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 2", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 3", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 4", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 5", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 6", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 7", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 8", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 9", "android/assets/images/lunch.jpeg"),
      FoodItem("Item 10", "android/assets/images/lunch.jpeg"),
    ];
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final padding = EdgeInsets.all(8.0);
        final border = BeveledRectangleBorder(
          borderRadius: BorderRadius.circular(25.0),
        );
        return MaterialApp(
          title: 'title',
          home: Scaffold(
            appBar: AppBar(
              title: Text("Menu"),
            ),
            body: GridView.count(
                crossAxisCount: 2,
                children: _foodItems.map((FoodItem item) {
                  return Padding(
                    padding: padding,
                    child: Card(
                      shape: border,
                      child: InkWell(
                        child: new Container(
                          decoration: BoxDecoration(
                            image: DecorationImage(
                              image: AssetImage(
                                item.imageAssetPath,
                              ),
                              fit: BoxFit.cover,
                            ),
                            borderRadius: BorderRadius.circular(25.0),
                          ),
                        ),
                        onTap: () {
                          Navigator.push(
                              context,
                              new MaterialPageRoute(
                                  builder: (BuildContext context) =>
                                      FoodItemWidget(item: item)));
                        },
                      ),
                    ),
                  );
                }).toList(growable: false)),
          ),
        );
      }
    }
    
    class FoodItemWidget extends StatelessWidget {
      final FoodItem item;
    
      const FoodItemWidget({Key key, this.item}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(body: Center(
            child: Text(item.name),
          ),);
      }
    }