路由工具类

直接代码

class NavigatorUtil {/// 跳转页面static push(BuildContext context, Widget page) async {final result = await Navigator.push(context, MaterialPageRoute(builder: (context) => page));return result;}/// 跳转页面static pushNamed(BuildContext context, String routeName, {Object arguments,}){Navigator.pushNamed(context, routeName, arguments: arguments);}/// 跳转并有返回值static Future<T> getValuePush<T extends Object>(BuildContext context, Widget page, {bool isAnimate = true}) {Completer<T> completer = Completer();Navigator.push<T>(context, (isAnimate) ? MaterialPageRoute(builder: (context) => page) : AutoRoute(builder: (context) => page)).then((value) {completer.complete(value);});return completer.future;}/// 跳转并有返回值,根据路由namestatic Future<T> getValuePushName<T extends Object>(BuildContext context, String newPage, {Object arguments,}) {Completer<T> completer = Completer();Navigator.pushNamed<T>(context, newPage, arguments: arguments).then((value) {completer.complete(value);});return completer.future;}/// 替代路由,pushReplacement和popAndPushNamed类似,有小差别/// pushReplacementNamed:当用户成功登录并且现在在 HomeScreen 上时,您不希望用户还能够返回到 LoginScreen。/// 因此,登录应完全由首页替换。另一个例子是从 SplashScreen 转到 HomeScreen。 它应该只显示一次,用户不能再从 HomeScreen 返回它。/// 在这种情况下,由于我们要进入一个全新的屏幕,我们可能需要借助此方法。////// popAndPushNamed:假设您正在有一个 Shopping 应用程序,该应用程序在 ProductsListScreen 中显示产品列表,用户可以在 FiltersScreen 中应用过滤商品。/// 当用户单击“应用筛选”按钮时,应弹出 FiltersScreen 并使用新的过滤器值推回到 ProductsListScreen。/// 这里 popAndPushNamed 显然更为合适。/// screen3 screen4/// screen2 screen2/// screen1 screen1static pushReplacement<TO>(BuildContext context, Widget newPage, {TO result}) {Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => newPage,), result: result);}static pushReplacementNamed<TO>(BuildContext context, String newName, {TO result, Object arguments,}) {Navigator.pushReplacementNamed(context, newName, result: result, arguments: arguments);}/// 替代路由,popAndPushNamed和pushReplacement,有小差别/// screen3 screen4/// screen2 screen2/// screen1 screen1static popAndPushNamed<TO>(BuildContext context, String newName, {TO result, Object arguments,}) {Navigator.popAndPushNamed(context, newName, result: result, arguments: arguments);}/// 跳转到指定界面,弹出中间部分/// screen4/// screen3/// screen2 screen5/// screen1 screen1 loginScreen/// predicate参数 (Route<dynamic> route) => false 能够确保删除先前所有实例,比如上面的loginScreen; ModalRoute.withName('/screen1') 跳转到直到哪个界面停止static pushAndRemoveUtil(BuildContext context, Widget newPage, RoutePredicate predicate){Navigator.pushAndRemoveUntil(context, new MaterialPageRoute(builder: (_) => newPage), predicate);}static pushNamedAndRemoveUntil(BuildContext context, String newRouteName, RoutePredicate predicate, {Object arguments,}){Navigator.pushNamedAndRemoveUntil(context, newRouteName, predicate, arguments: arguments);}/// 反复执行pop 直到该函数的参数predicate返回true为止。/// screen3/// screen2/// screen1 screen1static popUntil(BuildContext context, String name){Navigator.popUntil(context, ModalRoute.withName(name));}}

flutter的路由工具类相关推荐

  1. flutter倒计时TimerUtil工具类

    更多文章请查看 lutter从入门 到精通 flutter 提供了 Timer 来执行定时任务 common_utils 工具类已经 封装了 Timer 一个计时工具类 TimerUtil,可实现倒计 ...

  2. Flutter MD5加密工具类

    第一步 更新pubspec.yaml dependencies:flutter:sdk: fluttercrypto: ^2.0.6 2  创建工具类 import 'dart:convert'; i ...

  3. Flutter时间转换工具类

    日期转换成时间戳 ///日期转时间戳static int dateToTimestamp(String date, {isMicroseconds = false}) {DateTime dateTi ...

  4. Flutter - 一个fultter练习项目(仿写微信UI、实现一些常用效果、封装通用组件和工具类)

    demo 地址: https://github.com/iotjin/jh_flutter_demo 代码不定时更新,请前往github查看最新代码 pwd:123456 代码不定期更新 注:Flut ...

  5. Flutter工具类 (二) 图片加载框架

    导入依赖 # 图片加载库cached_network_image: ^3.2.1 工具类 import 'dart:math';import 'package:cached_network_image ...

  6. java rabbitmq 工具类_RabbitMq通用管理工具类

    import java.io.IOException; import java.util.concurrent.TimeoutException; import com.rabbitmq.client ...

  7. http工具类(支持https,连接池和失败重试)

    在实际项目中,经常会遇到调用外部(第三方)的接口,如果调用量较大的话,可能需要考虑连接池.失败重试.SSL证书等问题,以提升性能和稳定性. 以下代码是封装的小组件,供大家参考. maven依赖 < ...

  8. android 字体像素转换工具类_android px,dp,sp大小转换工具

    package com.voole.playerlib.util; import android.content.Context; /** * Android大小单位转换工具类 * * float s ...

  9. Flutter进阶—路由和导航

    大部分应用程序都有多个屏幕或页面,并希望用户能从当前屏幕平滑过渡到另一个屏幕,Flutter的路由和导航功能可以帮助我们管理应用程序中的用户界面之间的命名和过渡. 管理多个用户界面有两个核心概念和类: ...

  10. Flutter之路由与导航

    先放效果,瞎写一通,不过我发现自己挺享受自己创作设计的过程的,真的废寝忘食hhh 贴代码 //main.dartimport 'package:flutter/material.dart'; impo ...

最新文章

  1. Java项目:OA办公自动化系统设计和实现(java+springboot+freemarker+mysql+maven+mybatis+jpa)
  2. double free or corruption (fasttop)
  3. junit 引入spring 注解管理_第05章 Spring 整合 Junit
  4. html5音乐播放器设计论文,基于微信小程序的音乐播放器设计和毕业论文
  5. Linux系统管理第六周作业【Linux微职位】
  6. MSN无法登陆错误汇总
  7. Excel对比两个Sheet数据的异同
  8. 基于二阶矩阵的优化问题(一)线搜索策略(附matlab代码)
  9. 魔鬼!人工智能文章生成器
  10. echarts树形结构实现组织架构图
  11. 【量化交易】 量化因子 情绪类因子计算
  12. sencha list
  13. 为此计算机所有用户安装加载项,此网站需要运行以下加载项……如果您信任该网站和该加载项并允许运行该加载项...
  14. SQL语句(增删改查)
  15. 获取CloudFlare上的所有域名的ID (zone_identifier) - by PHP
  16. 我是谁,读《薇娅:人生是用来改变的》有感
  17. 每日一题 --- P1093 [NOIP2007 普及组] 奖学金[洛谷][JAVA]
  18. 我也玩android了
  19. vue网络应用:天气查询
  20. 质子交换膜燃料电池流场设计(节选自课程设计作业)

热门文章

  1. linux内核分析及应用 -- 输入输出(下)
  2. (七)洞悉linux下的Netfilteriptables:状态防火墙
  3. Uboot下SPI FLASH的添加(SPI 控制器采用软件模拟的方式)
  4. ffmpeg代码实现自定义encoder
  5. stl vector与list详细对比
  6. CSDN博客停用公告
  7. 字符串函数---atof()函数详解及实现
  8. NYOJ题目48-小明的调查作业
  9. python字典有序还是无序_python--基础语法
  10. 平滑滤波器模板尺寸与平滑效果的关系_冲压模具丨折弯尺寸、毛刺、、卯合、滑块不顺的根源...