Flutter 当在复选框选择屏幕上使用Navigaor.pop时,如何在其他屏幕上显示列表?
我有一个Flutter 当在复选框选择屏幕上使用Navigaor.pop时,如何在其他屏幕上显示列表?,flutter,dart,Flutter,Dart,我有一个复选框项目选择屏幕(当浮动按钮触发Navigator.push时打开)来检查我喜欢的项目,并且我希望在使用Navigator.pop(当点击浮动按钮时)返回到原始屏幕时,这些项目会显示在屏幕上。但我不能这样做,我认为list.map将在这里使用,但我能够正确地实现它。非常感谢您的帮助 您可以检查整个代码 我遇到问题的代码: // CheckBox Item Selection Screen! class FavoriteList extends StatefulWidget { @ove
复选框
项目选择屏幕(当浮动按钮触发Navigator.push时打开)来检查我喜欢的项目,并且我希望在使用Navigator.pop(当点击浮动按钮时)返回到原始屏幕时,这些项目会显示在屏幕上。但我不能这样做,我认为list.map将在这里使用,但我能够正确地实现它。非常感谢您的帮助
您可以检查整个代码
我遇到问题的代码:
// CheckBox Item Selection Screen!
class FavoriteList extends StatefulWidget {
@override
_FavoriteListState createState() => _FavoriteListState();
}
class _FavoriteListState extends State<FavoriteList> {
final Set _saved = Set();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Add to Favorites!'), centerTitle: true, backgroundColor: Colors.red),
// backgroundColor: Colors.indigo,
body: SafeArea(
child: ListView.builder(
itemCount: 53,
itemBuilder: (context, index) {
return CheckboxListTile(
activeColor: Colors.red,
checkColor: Colors.white,
value: _saved.contains(index),
onChanged: (val) {
setState(() {
if(val == true){
_saved.add(index);
} else{
_saved.remove(index);
}
});
},
title: Row(
children: <Widget>[
Image.asset('lib/images/${images[index]}'),
SizedBox(width: 10,),
Text(nameOfSite[index]),
],
),
);
},
),
),
floatingActionButton: FloatingActionButton(foregroundColor: Colors.red,
child: Icon(Icons.check),
onPressed: (){
Navigator.pop(context, _saved); // Navigator.pop
},
),
);
}
}
您可以使用事件总线在屏幕之间传递数据 这是lib
问题是,当您弹出时,上一页的状态不会更新。因此,在弹出时返回带有选定项(来自复选框)的结果作为将来的结果。一旦弹出,请检查是否在not上得到任何结果,然后用新状态重新构建ui。您可以使用
push的返回值
// _SecondPageState
FloatingActionButton(
onPressed: () async {
Set saved = await Navigator.push<Set>(
context,
MaterialPageRoute(builder: (context) => FavoriteList()),
);
setState(() {
// do something
});
},
),
/\u第二页状态
浮动操作按钮(
onPressed:()异步{
Set saved=wait Navigator.push(
上下文
MaterialPage路由(生成器:(上下文)=>FavoriteList()),
);
设置状态(){
//做点什么
});
},
),
Navigator.push()
有一个返回值,您可以在调用Navigator.pop(
)时传入所需内容
这是您应该注意的主要代码:
在第二页类中:
在FavoriteList类中:
如果要检查完整的代码:
导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“导航器数据”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:第二页(),
);
}
}
类SecondPage扩展StatefulWidget{
@凌驾
_SecondPageState createState()=>\u SecondPageState();
}
类_SecondPageState扩展状态{
列表_索引=[];
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:容器(
填充:常量边集。对称(水平:25.0,垂直:75.0),
宽度:MediaQuery.of(context).size.width,
高度:MediaQuery.of(context).size.height,
子:列(
mainAxisSize:mainAxisSize.min,
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
正文(
'在此处添加您喜爱的网站!',
样式:TextStyle(
颜色:颜色,黑色,
字体大小:24.0,
),
),
扩大(
子项:ListView.builder(
itemCount:_index.length,
itemBuilder:(上下文,索引){
返回中心(
子:文本(
“${u索引[索引]}”,
样式:TextStyle(
颜色:颜色,红色,
字体大小:24.0,
),
),
);
},
),
),
浮动操作按钮(
onPressed:()异步{
最终设置索引=wait Navigator.push(
上下文
材料路线(
生成器:(上下文)=>FavoriteList(索引:_索引),
),
);
如果(索引!=null){
设置状态(){
最终列表指数=_指数;
临时索引。添加所有(索引);
_索引=临时索引.toSet().toList();
});
}
},
子:图标(
Icons.add,
颜色:颜色,白色,
),
前底色:颜色。蓝色,
),
],
),
),
);
}
}
类FavoriteList扩展了StatefulWidget{
偏爱者({
关键点,
这个指数,,
}):super(key:key);
最后清单索引;
@凌驾
_FavoriteListState createState()=>\u FavoriteListState();
}
类\u FavoriteListState扩展状态{
最终集_saved=Set();
@凌驾
void initState(){
super.initState();
_saved.addAll(widget.index);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“添加到收藏夹!”),
标题:对,
背景颜色:Colors.red,
),
正文:安全区(
子项:ListView.builder(
物品计数:53,
itemBuilder:(上下文,索引){
返回CheckboxListTile(
activeColor:Colors.red,
checkColor:Colors.white,
值:_已保存。包含(索引),
一旦更改:(val){
设置状态(){
如果(val==true){
_保存。添加(索引);
}否则{
_保存。删除(索引);
}
});
},
标题:世界其他地区(
儿童:[
文本(“$index”),
],
),
);
},
),
),
浮动操作按钮:浮动操作按钮(
foregroundColor:Colors.red,
子:图标(图标。检查),
已按下:(){
Navigator.pop(上下文,已保存);
},
),
);
}
}
plz显示调用Navigator.push的位置。你可以利用返回值,不是吗?@LoL对不起,现在我已经编辑了这个问题,你现在可以看看了!谢天谢地,数据没有返回到SecondPage
// _SecondPageState
FloatingActionButton(
onPressed: () async {
Set saved = await Navigator.push<Set>(
context,
MaterialPageRoute(builder: (context) => FavoriteList()),
);
setState(() {
// do something
});
},
),
FloatingActionButton(
onPressed: () async {
final Set indices = await Navigator.push(
context,
MaterialPageRoute(
builder: (context) => FavoriteList(indices: _indices), // you may wanna passing in what you have checked.
),
);
if (indices != null) {
// do what you want, like setState()
setState(() {
final List tempIndices = _indices;
tempIndices.addAll(indices);
_indices = tempIndices.toSet().toList();
});
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: () {
Navigator.pop(context, _saved);
},
),