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);
  },
),