Flutter一个简单的Route Helper/Navigator Helper

在Flutter中route是一个绕不开必须面对并且很常用的东西。

Route就是路由,顾名思义,负责你页面之间的跳转。

路由分静态路由动态路由

  • 静态路由: 不需要传参的,这样等二路由可以直接定义在MaterialApp/WidgetApp里,这样可以通过Navigator.pushNamed使用。
  • 动态路由: 就是传入一个动态路由并且带参数,或者你自定义的。

在这里我们可以使用一个工具类来实现跳转,因为我们在实际项目和开发工程的时候,我们使用到的路由大部分是动态的,也就是需要传参数的,所以工具类中只包含了静态路由

import 'dart:async';

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

class RouteHelper{
  static Future<T> pushWidget<T>(
      BuildContext context,
      Widget widget,{
      bool replaceRoot = false,
      bool replaceCurrent =false,
  }){
    return pushRoute(
      context,
      MaterialPageRoute(builder: (context) => widget),
      replaceRoot: replaceRoot,
      replaceCurrent: replaceCurrent,
    );
  }

  static Future<T> pushRoute<T>(
      BuildContext context,
      PageRoute<T> route,{
      bool replaceRoot = false,
      bool replaceCurrent = false,
  }){
    assert(!(replaceRoot == true && replaceCurrent == true));
    if(replaceRoot == true){
      return Navigator.pushAndRemoveUntil(
          context,
          route,
          _rootRoute
      );
    }
    if(replaceCurrent == true){
      return Navigator.pushReplacement(context, route);
    }
    return Navigator.push(context, route);
  }
}

var _rootRoute = ModalRoute.withName("home");

解读这个类,有两个方法一个是接收PageRoute,一个是接收Widget

接收Widget的是讲Widget包装MaterialPageRoute,然后传给另一个方法。

另一个方法包含三种情况,一种是替换根节点,一种是替换当前页面,还有一种就是我们最平常的push。

他们会根据传参的不同返回不同的方法。

我们还有一个_rootRoute变量,这个变量的目的是用于替换根节点“home”是我们定义在MaterialApp里的initialRoute,这样一一对应才能保证替换根节点。

当然这个类也可以继续扩展,比如将routes定义在内,然后传route name参数,接着通过routes来提取出named对应的Widget/Route接着传入pushRoute方法进行跳转即可。

这个简便的Helper还有另一个好处,就是可以方法后续批量替换Route实现,比如有一天你想自定义一个PageRoute,不适用MaterialPageRoute,那么你只需要替换pushRoute的第二个参数MaterialPageRoute即可。

当然这种方法也是可以接受返回值的。

RouteHelper.pushWidget(context, SecPage(param: '...')).then((value){
                print('返回带的参数====>$value');
              });

具体使用性如何就看个人了,我个人觉得这样不错,就算是加动画效果我们可以在类里面自己改就好了。而且还不需要任何依赖!!!

这是我认识的一位大佬写的类,有兴趣的可以去读读大作,他的一些开源库在pub的评分超高!!!!
大佬博客地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值