pushReplacement显示后退箭头

时间:2019-02-21 07:44:44

标签: dart flutter

我有一个带有自定义底部导航栏的主屏幕,当单击一个图标时,它将当前索引设置为被单击的图标。但是,当单击索引号2时,它会执行整页路由到另一个页面以添加“发布”。帖子提交后,pushReplacement会回到主屏幕(以防止返回)。但是,在将主屏幕路由到索引为0的默认屏幕之后,后退按钮仍显示在顶部。单击它后它消失了,但是该屏幕上的数据略有不同。我该如何解决?

主屏幕上的部分代码:

Widget customNav() {
  return Container(
      color: Colors.white,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: <Widget>[

         //some icons before

          IconButton(
            icon: Icon(Icons.add_circle),
            onPressed: () => Navigator.push(
                context,
                FadeRoute(
                    builder: (_) => BlocProvider<AppBloc>(
                        builder: (_, bloc) => bloc ?? AppBloc(),
                        onDispose: (_, bloc) => bloc.dispose(),
                        child: AddPost(userBloc: widget.userBloc)))),
          ),

          //icons after

        ],
      ));
}

添加帖子页面:

_submitFunc() async {
 // sending it to backend
  if (everything is good) {
    Navigator.pushReplacement(
      context,
      FadeRoute(
          builder: (_) =>
              BlocProvider<AppBloc>(
                  builder: (_, bloc) => bloc ?? AppBloc(),
                  onDispose: (_, bloc) => bloc.dispose(),
                  child: MainScreen(userBloc: widget.userBloc))),
    );
  }

1 个答案:

答案 0 :(得分:2)

似乎可能是路由问题。 Navigator.pushReplacement()会替换您在该路线上此时获得的所有信息,因此您实际上是在建立一条可行驶的路线:

start: MainScreen
push:  MainScreen -> AddScreen
pushReplacement: MainScreen (A) -> MainScreen (B)

这就是为什么在您点击后退按钮后该按钮会消失的原因,它使您从MainScreen B(具有历史背景可返回)转到MainScreen A(没有)。

您可能想使用Navigator.pop()返回到原始主屏幕,而不是用新视图替换当前视图,或者使用

Navigator.pushAndRemoveUntil(newRoute, (route)=>false);

如果您想将用户发送到新屏幕而根本无法返回,则清除所有Navigator路线历史记录。