flutter - 在 Flutter 中访问类的元素
问题描述
我有一个带有“FoodIcon”类的单独屏幕,其中有一个正在调用它的列表:
class FoodIcon {
String name;
IconButton foodIcon;
FoodIcon(this.name, this.foodIcon);
List foods = [
FoodIcon('Beef',
IconButton(icon: Image.asset('assets/beef.png'), onPressed: null)),
];
}
现在我将如何在另一个屏幕(页面)上访问列表“食物”?例如,如果我在另一个屏幕上有一个容器:
Widget _buildIcon() {
return AlertDialog(
title: Text('Add Icon'),
content: Container(//For example how do I access elements of the list from another page here),
我导入了我希望访问它的页面上的 FoodIcon 类所在的页面,但是我将如何访问 List 和其中的元素?
添加了我需要的页面的完整代码:
class FoodList extends StatefulWidget {
@override
_FoodListState createState() => _FoodListState();
}
class _FoodListState extends State<FoodList> {
@override
void initState() {
super.initState();
DatabaseProvider.db.getFoods().then(
(foodList) {
BlocProvider.of<FoodBloc>(context).add(SetFoods(foodList));
},
);
}
Widget _buildIcon() {
return AlertDialog(
title: Text('Add Icon'),
//content ce da bude lista mozda mi treba row/column ovde sa svim ikonicama i imenima, gde ce kada se klikne ikonica
//ontap biti setState da ikonica bude phIcon koji ce dole u ListTilu biti izabran i ocuvan dok se ne promeni, ali mora da bdue razlicit za svaki tile
content: Container(),
actions: [
FlatButton(
child: Text('Cancel'),
onPressed: () => Navigator.pop(context),
),
],
);
}
@override
Widget build(BuildContext context) {
return Container(
child: //maybe display it here for show purposes)}
解决方案
主页.dart:
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
FoodIcon foodIcon = new FoodIcon(
"Maaz Kamal",
IconButton(
icon: Image.asset('assets/beef.png'),
),
);
// here i populated the list three times for the sake of the example.
myList.add(foodIcon);
myList.add(foodIcon);
myList.add(foodIcon);
return Scaffold(
body: Container(
child: Center(
child: FlatButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => MyNextPage(myList),
)); // You can pass your list to next view like this
},
child: Text(
"Go to next page",
style: TextStyle(color: Colors.redAccent, fontSize: 30.0),
),
),
),
),
);
}
}
MyNextPage.dart:
class MyNextPage extends StatefulWidget {
List<FoodIcon> mySecondList;
MyNextPage(this.mySecondList, {Key key}) : super(key: key); //getting the list from previous view
@override
_MyNextPageState createState() => _MyNextPageState();
}
class _MyNextPageState extends State<MyNextPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: FlatButton(
onPressed: () => showDialog(
context: context,
builder: (dialogContext) =>
_buildIcon(dialogContext, widget.mySecondList), // using the list with widget.mySecondList and passing it to our Alert Method
),
color: Colors.lightBlueAccent,
child: Center(
child: Text(
"Click here to see List",
style: TextStyle(fontSize: 40.0),
),
),
),
),
);
}
Widget _buildIcon(dialogContext, List<FoodIcon> mySecondList) {
return AlertDialog(
title: Text('Add Icon'),
content: Container(
width: 300.0,
height: 300.0,
child: ListView.builder(
shrinkWrap: true,
itemCount: mySecondList.length,
itemBuilder: (context, index) => Column(
children: <Widget>[
Text(mySecondList[index].name),
mySecondList[index].foodIcon
],
),
), //For example how do I access elements of the list from another page here),
),
);
}
}
推荐阅读
- java - @RequiredArgsConstructor(onConstructor = @__(@Inject)) 和 @RequiredArgsConstructor 有什么区别?
- visual-studio - 在 Visual Studio 颜色主题编辑器中更改错误列表窗口中颜色的类别是什么
- javascript - 如何使用 javascript 将 JSON 转换为普通的 PDF 文本格式或表格格式?
- python - html代码的问题如何放入数据库
- java - Apache Poi,在一个单元格中插入 2 个具有不同锚属性的图像
- android - 原因:java.lang.IllegalStateException:没有为此提供程序指定值
- database - 由子查询返回
- java - 为什么uDig的渲染图比我的好看很多
- javascript - 如何更改此方法的控制通量变量
- python - Python - 日期标记文本文件的每一行