请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

navigator 2.0最佳实践

我觉得官方代码关于navigator2.0的写法才是最佳实践,参考https://flutter.cn/community/tutorials/understanding-navigator-v2,
即:

//所有的页面
final pages = <MaterialPage>[];
//添加删除页面的接口
 void push(Widget page) {
    pages.add(page);
    notifyListeners();
  }

  void pop() {
    if (pages.isNotEmpty) {
      pages.remove(pages.last);
    }
    notifyListeners();
  } 

///供onPopPage调用
bool _onPopPage(Route<dynamic> route, dynamic result) {
    if (_stack.isNotEmpty) {
      if (pages.last == route.settings.name) {
        pages.remove(route.settings.name);
        notifyListeners();
      }
    }
    return route.didPop(result);
  }

重点部分:
return Navigator(
   ...
   ///当app bar里的backButtion被定义,触发调用onPopPage
   onPopPage: _onPopPage,

)

///当点击android 物理返回按钮时(下面的那个),注意和app bar的返回按钮作区分 
Future<bool> popRoute() async {
    LogUtil.e('拦截物理返回按钮');
    /*
    此处自定义返回行为,假如你的路由是由bloc中的state决定的,那么此处应该改状态
    */
    /// 默认行为,点击两次退出app
    ///如果return true,会卡在最近的router里
    ///如果reutnr false,则交给父router,所谓父router,是嵌套路由里的概念。
    return navigatorKey.currentState!.maybePop();
  }

正在回答 回答被采纳积分+3

1回答

CrazyCodeBoy 2022-07-12 00:09:54
这样实现也可以的。
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信