Flutter 命名路由

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

我们可以通过创建一个新的Route,使用Navigator来导航到一个新的页面,但是如果在应用中很多地方都需要导航到同一个页面(比如在开发中,首页、推荐、分类页都可能会跳到详情页),那么就会存在很多重复的代码。在这种情况下,我们就可以使用 命名路由。
优点:

  • 名称路由是将名字和路由的映射关系,在一个地方进行统一管理
  • 有了命名路由,我们可以通过Navigator.pushNamed() 方法来跳转到新的页面

命名路由怎么使用?
1、可以放在MaterialApp的 initialRouteroutes
initialRoute : 设置应用程序从哪一个路由开始启动,设置了该属性,就不需要再设置home 属性了
2、routes:定义名称和路由之间的映射关系,类型为 Map<String, WidgetBuilder>

基本代码如下:

return MaterialApp(
  title: 'Flutter Demo',
  theme: ThemeData(
    primarySwatch: Colors.blue, splashColor: Colors.transparent
  ),
  initialRoute: "/",
  routes: {
    "/home": (ctx) => HYHomePage(),
    "/detail": (ctx) => HYDetailPage()
  },
);

在使用跳转的时候则:

_onPushTap(BuildContext context) {
  Navigator.of(context).pushNamed("/detail");
}

为了更加规范使用路由,则在开发中让每个界面都对 routeName 统一,这样每个界面都定义一个路由常量来使用

class HYHomePage extends StatefulWidget {
  static const String routeName = "/home";
}

class HYDetailPage extends StatelessWidget {
  static const String routeName = "/detail";
}

为了更好的管理路由映射,则单独创建一个文件进行管理
管理路由文件代码如下:

import 'package:flutter/material.dart';
import 'package:list/douban/Data/my_provider_demo.dart';
import '../Page/detail.dart';
import '../Page/about.dart';
import '../Page/un_known.dart';
import 'package:list/douban/main.dart';

class HYRouter {

  static final Map<String, WidgetBuilder> routes = {
    MyHomePage1.routeName:(context) => MyHomePage1(),// 默认界面
    Deatail.routeName:(context) => Deatail(),
    AboutPage.routeName:(context) => AboutPage(),
};
// 默认界面
  static final String initialRoute = MyHomePage1.routeName;

  // 钩子函数
static final RouteFactory generateRoute = (settings) {
  if (settings.name == Deatail.routeName){
    return MaterialPageRoute(builder: (context){
      // settings.arguments
      return Deatail();
    }
    );
  }
  return null;
};

// 错误界面
static final RouteFactory unKnownRoute = (settings)  {
  return MaterialPageRoute(builder: (context) {
    return UnknownPage();
  });
};

}

则,MaterialApp 代码也需要优化

Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      routes: HYRouter.routes,
      onGenerateRoute:HYRouter.unKnownRoute,
      onUnknownRoute: HYRouter.unKnownRoute,
      initialRoute: HYRouter.initialRoute,
    );

跳转

 TextButton(child: Text("打开详情"),
                  onPressed: () {
                  print("点击打开详情");
                 final result = Navigator.of(context).pushNamed(Deatail.routeName,arguments: "去详情界面的数据");
                 result.then((value) {
                   print("${value}");
                 });
                  },
                )

在跳转的界面接受参数

Widget build(BuildContext context) {

    final message = ModalRoute.of(context)?.settings.arguments as String;
    }

上述就完成最基本的命名路由的注册,映射关系,以及跳转。文章来源地址https://www.toymoban.com/news/detail-625139.html

  • 路由钩子 onGenerateRoute的钩子函数
    加入我们有一个界面已经创建好,并且传入对应的参数message,并且已经有一个 对应的构造方法,此时如果将其放到路由映射表中则不合适。因为该界面必需要求传入一个参数,这时候我们就可以使用onGenerateRoute的钩子函数
  • 当我们通过pushNamed进行跳转,但是对应的name没有在routes中有映射关系,那么就会执行onGenerateRoute钩子函数;
  • 我们可以在该函数中,手动创建对应的Route进行返回;
  • 该函数有一个参数RouteSettings,该类有两个常用的属性:
    - name: 跳转的路径名称
    - arguments:跳转时携带的参数
onGenerateRoute: (settings) {
  if (settings.name == "/about") {
    return MaterialPageRoute(
      builder: (ctx) {
        return HYAboutPage(settings.arguments);
      }
    );
  }
  returnnull;
},
  • onUnknownRoute
    如果我们打开的一个路由名称是根本不存在,这个时候我们希望跳转到一个统一的错误页面。
onUnknownRoute: (settings) {
  return MaterialPageRoute(
    builder: (ctx) {
      return UnknownPage();
    }
  );
},

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

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

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

相关文章

  • 利用Flutter的特性最大程度提升iOS应用的用户体验

    本文探讨了使用Flutter开发的iOS应用能否上架,以及上架的具体流程。苹果提供了App Store作为正式上架渠道,同时也有TestFlight供开发者进行内测。合规并通过审核后,Flutter应用可以顺利上架。但上架过程可能存在一些挑战,因此可能需要专业技术人员或上架服务商的协助。

    2024年04月10日
    浏览(49)
  • Flutter学习之旅 - 路由

    Flutter路由介绍 flutter中的路由通俗就是页面跳转。在Flutter中通过 Navigator (学过 reactjs 或 小程序 的小伙伴应该很清楚)组件管理路由导航 Flutter给我们提供了俩种配置路由跳转的方式: 1.基本路由 2.命名路由 普通路由 模板的知识请看这里 普通路由传值 跳转传值和调用组件传值

    2024年02月03日
    浏览(70)
  • Flutter之自定义路由切换动画

    在Flutter中,我们可以通过Navigator来实现路由管理,包括路由的跳转和返回等。默认情况下,Flutter提供了一些简单的路由切换动画,但是有时候我们需要自定义一些特殊的动画效果来提高用户体验。本文将介绍如何在Flutter中实现自定义的路由切换动画。 在Flutter中,路由切换

    2024年02月10日
    浏览(37)
  • Flutter路由的几种用法

    Flutter路由跳转 search.dart页面 命名路由跳转需要先配置路由 routers.dart配置文件 然后需要在首页添加initialRoute和onGenerateRoute配置 context属性中写配置中的路径,arguments属性中是跳转需要带的参数,跳转到form.dart页面并接收参数。 命名路由替换跳转用pushReplacementNamed,跳转新页面

    2024年02月04日
    浏览(40)
  • Flutter超好用的路由库-fluro

    fluro是一个流行的Flutter插件,用于实现高级路由管理。它提供了灵活的路由配置和导航功能, 支持命名路由、参数传递、路由拦截、动画效果 等,使得在Flutter应用程序中管理页面导航变得更加简单和可扩展。下面是对fluro插件的详细介绍: 您可以通过在pubspec.yaml文件中添加

    2024年02月08日
    浏览(31)
  • Flutter的路由router-页面跳转

    在Flutter中,路由(Router)是用于管理不同页面之间导航的机制。它允许您在应用程序中切换和管理不同的屏幕或视图。Flutter提供了多种方式来实现路由,包括基本路由、命名路由和第三方路由管理库。下面是对这些不同方式的详细介绍: Flutter提供了一种基本的路由管理方式

    2024年02月08日
    浏览(50)
  • flutter系列之:如何自定义动画路由

    目录 简介 自定义跳转使用 flutter动画基础 实现一个自定义的route 总结 flutter中有默认的Route组件,叫做MaterialPageRoute,一般情况下我们在flutter中进行跳转的话,只需要向Navigator中传入一个MaterialPageRoute就可以了。 但是MaterialPageRoute太普通了,如果我们想要做点不同的跳转特效

    2023年04月19日
    浏览(46)
  • flutter getx nested navigation 嵌套路由

    https://youtu.be/SXER4JVBFps 嵌套路由可以用在如购物确认向导界面切换。 使用 getx 实现嵌套路由,需要如下步骤: 通过 Navigator 组件的 key 属性 用 Get.nestedKey(1) 进行标记 onGenerateRoute 决定去哪个视图界面 initialRoute 初始路由 通过 Get.toNamed 的 id 属性执行嵌套路由 第一步:准备工作

    2024年02月11日
    浏览(41)
  • flutter开发实战-常用的路由Route配置

    flutter开发实战-常用的路由Route配置 路由(Route)在移动开发中通常指页面(Page),这跟 Web 开发中单页应用的 Route 概念意义是相同的,Route 在 Android中 通常指一个 Activity,在 iOS 中指一个 ViewController。所谓路由管理,就是管理页面之间如何跳转,通常也可被称为导航管理。

    2024年02月13日
    浏览(50)
  • Flutter动画库:animations(路由过渡动画或者页面切换动画)

    animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。 这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 看了下官方文档和官方例子,然后就有点懵。差点以为找错库了。还好flutter中的库可以直接点开(

    2024年02月16日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包