缺陷:通过url的方式传递参数,不支持中文 如/page?params1=标题¶ms=颜色 需要进行编码转换实测英文用这种转码方式也不会有问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import 'dart:convert' ;class FluroConvertUtils { static String fluroCnParamsEncode(String originalCn) { StringBuffer sb = StringBuffer (); var encoded = Utf8Encoder().convert(originalCn); encoded.forEach((val) => sb.write('$val ,' )); return sb.toString().substring(0 , sb.length - 1 ).toString(); } static String fluroCnParamsDecode(String encodedCn) { var decoded = encodedCn.split('[' ).last.split(']' ).first.split(',' ); var list = <int >[]; decoded.forEach((s) => list.add(int .parse(s.trim()))); return Utf8Decoder().convert(list); } }
一、route_handlers.dart定义所有要跳转的页面参数 route_handlers.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import 'package:fluro/fluro.dart' ;var homeHandler = new Handler( handlerFunc: (BuildContext context, Map <String , List <String >> params) { return HomePage(); }); var addRssUrlHandler = new Handler( handlerFunc: (BuildContext context,Map <String ,List <String >> params){ return AddRssUrlPage(); } ); var flareTestHandler = new Handler( handlerFunc: (BuildContext context,Map <String ,List <String >> params){ var title = FluroConvertUtils.fluroCnParamsDecode( params['title' ]?.first); var color = FluroConvertUtils.fluroCnParamsDecode( params['color' ]?.first); return FlareTestPage(title: title, color: color); } );
二、routes.dart定义所有路由的地址 routes.dart
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import 'package:fluro/fluro.dart' ;import 'package:flutter/material.dart' ;class Routes { static String home = "/" ; static String addRss = "/addRss" ; static String flareTest = "/flareTest" ; static void configureRoutes(Router router){ router.notFoundHandler = new Handler( handlerFunc: (BuildContext context,Map <String ,List <String >> params){ print ('Route was not found !!!' ); } ); router.define(home,handler:homeHandler); router.define(addRss,handler: addRssUrlHandler); router.define(flareTest,handler: flareTestHandler); } }
三、定义全局的router application.dart
1 2 3 class Application { static Router router; }
四、main.dart中初始化router 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 MyApp({ Key key, }) : super (key: key){ final router = new Router(); Routes.configureRoutes(router); Application.router = router; } MaterialApp( title: 'Rss阅读器' , theme: ThemeData( primarySwatch: Colors.cyan, ), onGenerateRoute: Application.router.generator, )
五、页面跳转 1 2 3 4 Application.router.navigateTo(context, Routes.addRss); Application.router.navigateTo(context, '${Routes.flareTest} ?title=${FluroConvertUtils.fluroCnParamsEncode('标题' )} &color=${FluroConvertUtils.fluroCnParamsEncode('颜色' )} ' , transition: TransitionType.fadeIn);