Flutter路由工具类RouteUtils,可二次开发,拿来即用

一、RouteUtils路由核心类

Dart 复制代码
/**
 * 路由封装
 */
class RouteUtils {

  RouteUtils._();

  static final navigatorKey = GlobalKey<NavigatorState>();

// App 根节点Context
  static BuildContext get context => navigatorKey.currentContext!;

  static NavigatorState get navigator => navigatorKey.currentState!;

  ///普通动态跳转-->page
  static Future push(
    BuildContext context,
    Widget page, {
    bool? fullscreenDialog,
    RouteSettings? settings,
    bool maintainState = true,
  }) {
    return Navigator.push(
        context,
        MaterialPageRoute(
          builder: (_) => page,
          fullscreenDialog: fullscreenDialog ?? false,
          settings: settings,
          maintainState: maintainState,
        ));
  }

  //常规路由导航
  static Future pushForName(
    BuildContext context,
    String routeName, {
    Object? arguments,
  }) {
    return Navigator.pushNamed(context, routeName, arguments: arguments);
  }

  ///白定义route动态跳转
  static Future pushForPageRoute(BuildContext context, Route route) {
    return Navigator.push(context, route);
  }

  //清空栈,只留目标页面
  static Future pushNamedAndRemoveUntil(
    BuildContext context,
    String name, {
    Object? arguments,
  }) {
    return Navigator.pushNamedAndRemoveUntil(context, name, (route) => false,
        arguments: arguments);
  }

  //清空栈,只留目标页面
  static Future pushAndRemoveUntil(
    BuildContext context,
    Widget page, {
    bool? fullscreenDialog,
    RouteSettings? settings,
    bool maintainState = true,
  }) {
    return Navigator.pushAndRemoveUntil(
        context,
        MaterialPageRoute(
          builder: (_) => page,
          fullscreenDialog: fullscreenDialog ?? false,
          settings: settings,
          maintainState: maintainState,
        ),
        (route) => false);
  }

  //用新的路由替换当路由
  static Future pushReplacement(BuildContext context, Route route,
      {Object? result}) {
    return Navigator.pushReplacement(context, route, result: result);
  }

  //用新的路由替换当路由
  static Future pushReplacementNamed(
    BuildContext context,
    String name, {
    Object? result,
    Object? arguments,
  }) {
    return Navigator.pushReplacementNamed(context, name,
        arguments: arguments, result: result);
  }

  //关闭当前页面
  static void pop(BuildContext context) {
    Navigator.pop(context);
  }

  ///关闭当前页面:包含返回值
  static void popOfData<T extends Object?>(BuildContext context, {T? data}) {
    Navigator.of(context).pop(data);
  }
}

二、Routes辅助类(可用可不用)

Dart 复制代码
class Routes {

  static MaterialPageRoute _jumpRoutePage(
    Widget pageWidget, {
    RouteSettings? settings,
    bool maintainState = true,
    bool fullscreenDialog = false,
    bool allowSnapshotting = true,
  }) {
    return MaterialPageRoute(
        builder: (BuildContext context) {
          return pageWidget;
        },
        settings: settings,
        maintainState: maintainState,
        fullscreenDialog: fullscreenDialog,
        allowSnapshotting: allowSnapshotting);
  }
}

三、RoutePath路径配置类(可用可不用)

Dart 复制代码
class RoutePath {
  static const String tabBarPage = "/";
  static const String webViewPage = "web_View";
  static const String loginUserPage = 'login_user';
  static const String loginRegisterUser = 'login_register_user';
}
相关推荐
We་ct10 分钟前
LeetCode 42. 接雨水:双指针解法深度剖析与全方法汇总
前端·算法·leetcode·typescript
灰海18 分钟前
vue实现即开即用的AI对话打字机效果
前端·javascript·vue.js·打字机
智绘前端26 分钟前
React 组件开发速查卡
前端·react.js·前端框架
箫笙默39 分钟前
前端相关技术简介
前端
Miguo94well44 分钟前
Flutter框架跨平台鸿蒙开发——每日早报APP开发流程
flutter·华为·harmonyos·鸿蒙
Ulyanov44 分钟前
Impress.js深度技术解析:架构基础与结构化设计
开发语言·前端·javascript
小宇的天下1 小时前
Calibre :Standard Verification Rule Format(SVRF) Manual (1-1)
大数据·前端·网络
充气大锤1 小时前
前端实现流式输出配合katex.js
开发语言·前端·javascript·ai·vue
滴水未满1 小时前
uniapp的页面
前端·uni-app
邝邝邝邝丹1 小时前
vue2-computed、JS事件循环、try/catch、响应式依赖追踪知识点整理
开发语言·前端·javascript