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