flutter开发实战-常用的路由Route配置

这篇具有很好参考价值的文章主要介绍了flutter开发实战-常用的路由Route配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

flutter开发实战-常用的路由Route配置

路由(Route)在移动开发中通常指页面(Page),这跟 Web 开发中单页应用的 Route 概念意义是相同的,Route 在 Android中 通常指一个 Activity,在 iOS 中指一个 ViewController。所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。Flutter 中的路由管理和原生开发类似,无论是 Android 还是 iOS,导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作,而路由管理主要是指如何来管理路由栈。

这段来自:https://book.flutterchina.club/chapter2/flutter_router.html#_2-4-1-%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%A4%BA%E4%BE%8B

下面记录一下本人常使用的路由设置。

一、配置router_manager

// 定义各个页面的路由name
class RouterName {
  // 隐私统一
  static const String agreement = 'agreement';

  // 启动页广告
  static const String splash = 'splash';

  // tab
  static const String tab = '/';

  // 用户profile
  static const String profilePage = 'profilePage';
}

通过页面跳转,经常使用的是PageRouteBuilder,这里自定义几个常用的PageRouteBuilder

class NoAnimRouteBuilder extends PageRouteBuilder {
  final Widget page;

  NoAnimRouteBuilder(this.page)
      : super(
      opaque: false,
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 0),
      transitionsBuilder:
          (context, animation, secondaryAnimation, child) => child);
}

class FadeRouteBuilder extends PageRouteBuilder {
  final Widget page;

  FadeRouteBuilder(this.page)
      : super(
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 500),
      transitionsBuilder: (context, animation, secondaryAnimation,
          child) =>
          FadeTransition(
            opacity: Tween(begin: 0.1, end: 1.0).animate(CurvedAnimation(
              parent: animation,
              curve: Curves.fastOutSlowIn,
            )),
            child: child,
          ));
}

class SlideTopRouteBuilder extends PageRouteBuilder {
  final Widget page;

  SlideTopRouteBuilder(this.page)
      : super(
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: Duration(milliseconds: 800),
      transitionsBuilder:
          (context, animation, secondaryAnimation, child) =>
          SlideTransition(
            position: Tween<Offset>(
                begin: Offset(0.0, -1.0), end: Offset(0.0, 0.0))
                .animate(CurvedAnimation(
                parent: animation, curve: Curves.fastOutSlowIn)),
            child: child,
          ));
}

class SizeRoute extends PageRouteBuilder {
  final Widget page;

  SizeRoute(this.page)
      : super(
    pageBuilder: (context, animation, secondaryAnimation) => page,
    transitionDuration: Duration(milliseconds: 300),
    transitionsBuilder: (context, animation, secondaryAnimation, child) =>
//                Align(
//                  child: SizeTransition(child: child, sizeFactor: animation),
//                ),
    ScaleTransition(
      scale: Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
          parent: animation, curve: Curves.fastOutSlowIn)),
      child: child,
    ),
  );
}

通过页面跳转,iOS效果的跳转效果是CupertinoPageRoute,使用CupertinoPageRoute子类

// 通过裁剪去除页面的shadow

class MyCupertinoPageRoute<T> extends CupertinoPageRoute {
  MyCupertinoPageRoute({
    required WidgetBuilder builder,
    RouteSettings? settings,
  }) : super(builder: builder, settings: settings);

  
  bool get barrierDismissible => true;

  
  Color? get barrierColor => ColorUtil.hexColor(0x000000, alpha: 0.2);

  
  // A relatively rigorous eyeball estimation.
  Duration get transitionDuration => const Duration(milliseconds: 450);

  
  Widget buildTransitions(BuildContext context, Animation<double> animation,
      Animation<double> secondaryAnimation, Widget child) {
    // 通过裁剪去除页面的shadow
    return ClipRRect(
      clipBehavior: Clip.hardEdge,
      child:
          super.buildTransitions(context, animation, secondaryAnimation, child),
    );
  }
}

实现settings.name的不同name对应不同的页面Route

class RouterManager {
  // ignore: missing_return
  static Route<dynamic> generateRoute(RouteSettings settings) {
    print("generateRoute: ${settings}, name:${settings.name}");
    switch (settings.name) {
      case RouterName.home:
        {
          return NoAnimRouteBuilder(const MyHomePage(
            title: "home",
          ));
        }
        break;

      case RouterName.login:
        {
          return NoAnimRouteBuilder(const LoginPage(
            title: "LoginPage",
          ));
        }
        break;

      case RouterName.profilePage:
        {
          return MyCupertinoPageRoute(
            builder: (_) => PersonProfilePage(
              arguments: settings.arguments,	// 传递的参数
            ),
          );
        }
        break;


      default:
        return NoAnimRouteBuilder(const MyHomePage(
          title: "home",
        ));
    }
  }
}

二、在入口main的MaterialApp使用router_manager

return MaterialApp(
      theme: ThemeData(
        fontFamily: "PingFang SC",
        primarySwatch: themeModel.theme,
      ),
      debugShowCheckedModeBanner: false,
      supportedLocales: S.delegate.supportedLocales,
      locale: localeModel.getLocale(),
	// 设置route
      onGenerateRoute: RouterManager.generateRoute,
      navigatorObservers: buildObservers(),
      localizationsDelegates: const [
        S.delegate,
        RefreshLocalizations.delegate, //下拉刷新
        GlobalCupertinoLocalizations.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate
      ],
      localeResolutionCallback: (_locale, supportedLocales) {
        if (localeModel.getLocale() != null) {
          //如果已经选定语言,则不跟随系统
          return localeModel.getLocale();
        } else {
          //跟随系统
          print("_locale:${_locale}");
          Locale locale;
          if (supportedLocales.contains(_locale)) {
            locale = _locale!;
          } else {
            //如果系统语言不是中文简体或美国英语,则默认使用美国英语
            locale = Locale('en', 'US');
          }
          return locale;
        }
      },
    );
  }

三、路由页面跳转

配置之后就可以使用了,使用的示例-路由页面跳转示例

// 进入个人信息
  void enterMyProfilePage() {
    dynamic obj = widget.arguments;
    if (widget.arguments != null && widget.arguments is Map) {
      NavigatorRoute.push(RouterName.profilePage, arguments: obj);
    }
  }

四、小结

flutter开发实战-常用的路由Route配置,主要实现配置路由,PageRouteBuilder、MaterialApp中设置onGenerateRoute,最后使用NavigatorRoute.push进行页面跳转,页面传参数。

学习记录,每天不停进步。文章来源地址https://www.toymoban.com/news/detail-545049.html

到了这里,关于flutter开发实战-常用的路由Route配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • route、ip route添加删除路由表命令,路由表永久化设置

    学习linux笔记小实践一 route 与 ip route的使用 route 与 ip route www.baidu.com 14.119.104.189 add ps:gw、via指自己的网关地址 del default 在/etc/sysconfig/network-scripts/route-ens33配置文件中添加语句 或 以下方法: 1)在/etc/rc.local里添加 方法: route add -net 192.168.3.0/24 dev eth0 route add -net 192.168.2.0/2

    2024年02月04日
    浏览(49)
  • React Route5 路由

    💻 React Route5 路由🏠专栏:React 👀个人主页:繁星学编程🍁 🧑个人简介:一个不断提高自我的平凡人🚀 🔊分享方向:目前主攻前端,其他知识也会阶段性分享🍀 👊格言:☀️没有走不通的路,只有不敢走的人!☀️ 👉让我们一起进步,一起成为更好的自己!!!🎁

    2024年02月15日
    浏览(30)
  • ip route 路由命令详解

    (523条消息) ip route 命令详解_thj_blog的博客-CSDN博客_ip route命令详解 Linux如何查看网关地址 - study_goup - 博客园 (cnblogs.com) 添加路由192.20.30.0/24网段走eth0网卡 ip route add 192.20.30.0/24 dev eth0 table local Linux下ip route、ip rule、iptables的关系(转) - EasonJim - 博客园 (cnblogs.com) (608条消息) i

    2023年04月09日
    浏览(69)
  • Linux(三)---------网络路由命令(route路由命令)

    计算机之间的数据传输必须经过网络,网络可以直接两台计算机,也可以通过一个一个的节点去连接。路由可以理解为互联网的中转站,网络中的数据包就是通过一个一个的路由器转发到目的地的。  路由分类学习: 路由分为静态和动态路由 linux机器上配置的都是静态路由,

    2024年02月14日
    浏览(45)
  • 老杜Vue笔记⑥ 路由route

    动力节点vue2+3视频课程 传统web应用 传统web应用,又叫做多页面web应用:核心是一个web站点由多个HTML页面组成,点击时完成页面的切换,因为是切换到新的HTML页面上,所以当前页面会全部刷新。 单页面web应用(SPA:Single Page web Application) 整个网站只有一个HTM页面,点击时只

    2023年04月22日
    浏览(32)
  • 第五十五回:命名路由(Route)

    我们在上一章回中介绍了BoxDecoration Widget相关的内容,本章回中将介绍命名路由(Route).闲话休提,让我们一起Talk Flutter吧。 我们在这里介绍的命名路由是路由(Route)中的一种,主要用来当作导航,通过导航跳转到不同的页面,它和我们前面章回中介绍的路由类似,只不过是给路由

    2024年02月09日
    浏览(63)
  • route命令行查看或者修改默认路由

    route print命令 打开CMD,输入route print,就可以查看我们计算机的路由表,如图 看第一项0.0.0.0的网关为192.168.1.1,说明我们计算机的网关为192.168.1.1,如果我们删除自己的网关,计算机还能正常运行吗?如图 我们来看目前的网络连接状态: 可以看到目前是:无网络访问权限,也

    2024年02月08日
    浏览(51)
  • 路由vue-route的使用

    path:配置路由访问的路径 name:给路由起名字(命名路由) component:访问路由时,渲染的组件 App.vue 这个是vue-route里面提供的组件 作用:路由的出口 举例:当我访问根路由时会渲染IndexView.vue组件 IndexView.vue中的内容 而IndexView.vue中的内容会在根组件下的 router-view/ 中展示 推

    2024年01月16日
    浏览(43)
  • 【Vue】Vue-route路由

    Vue-router官网 由vue-router模块控制,需要额外安装依赖。参考官网 router-link:路由链接,跳转至路由视图,展示指定路由组件信息 router-view:路由视图,展示路由组件信息 route:路由信息 router:路由对象 router-link 路由跳转,类似a标签,路由跳转作用 router-view 路由视图,用于其

    2023年04月22日
    浏览(47)
  • route命令 路由表 Linux Centos

    route route 命令在Linux中被用于显示和操纵IP路由表。然而,现在大部分Linux发行版都推荐使用 ip route 命令代替 route ,因为 ip route 提供更多的功能和更灵活的控制。 以下是 route 命令的基本用法: 查看路由表 : route -n 这个命令显示当前机器的路由表。 -n 标志意味着数字形式的网

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包