博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter 路由跳转fluro
阅读量:4050 次
发布时间:2019-05-25

本文共 4220 字,大约阅读时间需要 14 分钟。

文章目录

添加依赖

#路由跳转  fluro: ^1.4.0

新建相关文件

  1. 新建application.dart文件,用于跳转时获取router

import 'package:fluro/fluro.dart';class Application{  static Router router;}

2. 新建route_handlers.dart文件,用于初始化跳转到各个页面的handle,并获取到上个页面传递过来的值,然后在初始化要跳转到的页面.

import 'package:fluro/fluro.dart';import 'package:flutter/material.dart';import 'package:flutter_my_demo/page/home.dart';import 'package:flutter_my_demo/page/webview.dart';var homeHandler = new Handler(    handlerFunc: (BuildContext context, Map
> params) { return new HomePage();});var webViewHandler = new Handler( handlerFunc: (BuildContext context, Map
> params) { //获取路由跳转传来的参数 String url = params["url"].first; String title = params["title"].first; return new WebViewPage(url, title);});

3. 新建routes.dart文件,用于绑定路由地址和对应的handler.

import 'package:flutter/material.dart';import 'package:fluro/fluro.dart';import 'package:flutter_my_demo/route/route_handlers.dart';class Routes {  static String root = "/";  static String home = "/home";  static String web = "/web";  static void configureRoutes(Router router){    router.notFoundHandler = new Handler(        handlerFunc: (BuildContext context,Map
> params){ print("route is not find !"); }); router.define(home, handler: homeHandler); router.define(web, handler: webViewHandler); }}

初始化配置

import 'package:fluro/fluro.dart';import 'package:flutter/material.dart';import 'package:flutter_my_demo/route/application.dart';import 'package:flutter_my_demo/route/routes.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {  MyApp(){    //初始化路由    final router = new Router();    Routes.configureRoutes(router);    Application.router = router;  }  @override  Widget build(BuildContext context) {    return MaterialApp(      title: 'Flutter Demo',      theme: ThemeData(        primarySwatch: Colors.blue,      ),      home: MySplashPage(),      //初始化路由      onGenerateRoute: Application.router.generator,    );  }}

注意上边代码的两个初始化路由的步骤.

使用路由

1. 无参数跳转

Application.router.navigateTo(context, "/home",transition: TransitionType.fadeIn);

2. 有参数跳转

String route = '/web?url=${Uri.encodeComponent(itemUrl)}&title=${Uri.encodeComponent(itemTitle)}';Application.router.navigateTo(context, route,transition: TransitionType.fadeIn);

或者

Application.router.navigateTo(context, '${Routes.web}?title=${Uri.encodeComponent(itemTitle)}&url=${Uri.encodeComponent(itemUrl)}',transition: TransitionType.fadeIn);

注意:参数的值需要使用Uri.encodeComponent()方法调用一下,要不会报错.

注意:路由跳转都是进栈操作,原有页面没有销毁。如果想跳转时同时销毁页面,可用原生的路由跳转方法:

Navigator.of(context).pushAndRemoveUntil(            MaterialPageRoute(builder: (context) => HomePage()),                (route) => route == null);

路由执行startActivityForResult相似操作

在跳转后边加then操作,then未跳转的页面销毁之后,回调执行的方法。

Application.router.navigateTo(context,              '${Routes.web}?title=${Uri.encodeComponent(itemTitle)}&url=${Uri                  .encodeComponent(itemUrl)}',              transition: TransitionType.fadeIn).then((result){                if(result == "key"){                  //执行func路由,func路由为弹出弹窗                  Application.router.navigateTo(context, "/demo/func?message=$result");                }          });

在跳转到的web页面要销毁时,执行Navigator.pop(context, 'key');方法.然后就会调用上边代码中的then方法了。

func路由的handler如下:

var demoFunctionHandler = new Handler(    type: HandlerType.function,    handlerFunc: (BuildContext context, Map
> params) { String message = params["message"]?.first; showDialog( context: context, builder: (context) { return new AlertDialog( title: new Text( "Hey Hey!", style: new TextStyle( color: const Color(0xFF00D6F7), fontFamily: "Lazer84", fontSize: 22.0, ), ), content: new Text("$message"), actions:
[ new Padding( padding: new EdgeInsets.only(bottom: 8.0, right: 8.0), child: new FlatButton( onPressed: () { Navigator.of(context).pop(true); }, child: new Text("OK"), ), ), ], ); }, ); });

 

 

转载地址:http://xonci.baihongyu.com/

你可能感兴趣的文章
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
也许是世界上最简单最灵活的JAVA CRUD开发方法
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
提交jar包到maven中央仓库2019最新版本
查看>>
eclipse servers view tomcat内存配置
查看>>
HandlerExceptionResolver 踩坑记录
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>
uva-1427 Parade (单调队列优化dp)
查看>>
poj 1155 TELE (树形背包dp)
查看>>
【设计模式】学习笔记13:组合模式(Composite)
查看>>
hdu 1011 Starship Troopers (树形背包dp)
查看>>
hdu 1561 The more, The Better (树形背包dp)
查看>>
【设计模式】学习笔记14:状态模式(State)
查看>>
poj 1947 Rebuilding Roads (树形背包dp)
查看>>
【设计模式】学习笔记15:代理模式(Proxy Pattern)
查看>>