flutter push替换显示向后箭头抖动

col17t5w  于 2022-12-24  发布在  Flutter
关注(0)|答案(2)|浏览(167)

我有一个带有自定义底部导航栏的主屏幕,当一个图标被点击时,它会将当前索引设置为被点击的图标。2但是当索引号2被点击时,它会执行一个完整的页面路由到另一个页面来添加一个“帖子”。3帖子被提交后,pushReplacement会返回到主屏幕(以防止返回)。但是在它路由到主屏幕到索引0处的默认屏幕后,顶部仍然显示一个后退按钮。我点击它后它就消失了,但是那个屏幕上的数据有点不一样。2我该怎么解决这个问题?

主屏幕上的部分代码:

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

wydwbb8l1#

看起来可能是路由问题。Navigator.pushReplacement()将替换路由中该点的所有内容,因此实际上您设置的路由是:

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

这就是为什么后退按钮在你点击它之后会消失,它会把你从主屏幕B(有历史背景可以返回)带到主屏幕A(没有)。
您可能希望使用Navigator.pop()返回到原始主屏幕,而不是用新视图替换当前视图,或者使用

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

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

2exbekwf

2exbekwf2#

onPressed: () { Navigator.of(context).popUntil((route) => route.isFirst); }它将带您到您开始的第一页。

相关问题