Flutter路由之fluro如何配置及跳转
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章将为大家详细讲解有关Flutter路由之fluro如何配置及跳转,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、pubspec.yaml导包,注意格式~d
千家信息网最后更新 2025年01月23日Flutter路由之fluro如何配置及跳转1、pubspec.yaml导包,注意格式~
2、新建路由类,改类是定义页面的路径,然后将页面handler和路径设置到路由中
3、新建router_handler.dart,处理参数和跳转页面
4、调用传参
5、接收数据
6、问题来了,因为fluro无法直接传中文的,这里就需要用到编码码解码了,也就是encode和decode
这篇文章将为大家详细讲解有关Flutter路由之fluro如何配置及跳转,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1、pubspec.yaml导包,注意格式~
dependencies: flutter: sdk: flutter fluro: ^1.6.3
2、新建路由类,改类是定义页面的路径,然后将页面handler和路径设置到路由中
class Routers { static Router router; //文件夹须跟main.dart目录同级 static String root = '/'; static String loginPage = '/loginPage'; static String tabsPage = '/tabsPage'; static String messageDetailPage = '/messageDetailPage'; static String serviceSettingPage = '/serviceSettingPage'; static void configureRoutes(Router router) { router.notFoundHandler = Handler( handlerFunc: (BuildContext context, Map> params) { print("ROUTE WAS NOT FOUND !!!"); return null; }); router.define(loginPage, handler: loginHandler); router.define(messageDetailPage, handler: messageDetailHandler); router.define(tabsPage, handler: tabsHandler); router.define(serviceSettingPage, handler: serviceSettingHandler); } // 对参数进行encode,解决参数中有特殊字符,影响fluro路由匹配,尤其中文 static Future navigateTo(BuildContext context, String path, {Map params, TransitionType transition = TransitionType.inFromRight, bool replace = false}) { String query = ""; if (params != null) { int index = 0; for (var key in params.keys) { var value = Uri.encodeComponent(params[key]); if (index == 0) { query = "?"; } else { query = query + "\&"; } query += "$key=$value"; index++; } } print('我是navigateTo传递的参数:$query'); path = path + query; return router.navigateTo(context, path, transition: transition, replace: replace); } static void finishAllToLoginPage() { //跳转指定页面并关闭当前所有页面 //关闭所有页面时会导致tabs_page页面先执行initState,再执行dispose,导致无法再监听,所以要注意 Global.navKey.currentState.pushAndRemoveUntil( new MaterialPageRoute(builder: (context) => new LoginPage()), (route) => route == null);//会执行所有页面的dispose }}
3、新建router_handler.dart,处理参数和跳转页面
//登录var loginHandler = new Handler( handlerFunc: (BuildContext context, Map> params) { return new LoginPage();});//消息详情页var messageDetailHandler = new Handler( handlerFunc: (BuildContext context, Map params) { //取参 String barTitle = params["bar_title"]?.first; String itemDataJson = params["item_data"]?.first; return new MessageDetailPage( barTitle: barTitle, itemDataJson: itemDataJson, );});//主页Tabsvar tabsHandler = new Handler( handlerFunc: (BuildContext context, Map > params) { return new TabsPage();});//Service settingvar serviceSettingHandler = new Handler( handlerFunc: (BuildContext context, Map > params) { return new ServiceSettingPage();});
4、调用传参
//对象需要转String String itemDataJson = FluroConvertUtils.object2string( _bulletinsList[index]); Routers.navigateTo(context, Routers.messageDetailPage, params: { 'bar_title': "Detail", 'item_data': itemDataJson, });
5、接收数据
//String转回对象 Bulletins itemData = Bulletins.fromJson(FluroConvertUtils.string2map(itemDataJson));
6、问题来了,因为fluro无法直接传中文的,这里就需要用到编码码解码了,也就是encode和decode
class FluroConvertUtils { /// fluro 传递中文参数前,先转换,fluro 不支持中文传递 static String fluroCnParamsEncode(String originalCn) { return jsonEncode(Utf8Encoder().convert(originalCn)); } /// fluro 传递后取出参数,解析 static String fluroCnParamsDecode(String encodeCn) { var list = List(); ///字符串解码 jsonDecode(encodeCn).forEach(list.add); String value = Utf8Decoder().convert(list); return value; } /// string 转为 int static int string2int(String str) { return int.parse(str); } /// string 转为 double static double string2double(String str) { return double.parse(str); } /// string 转为 bool static bool string2bool(String str) { if (str == 'true') { return true; } else { return false; } } /// object 转为 string json static String object2string (T t) { return fluroCnParamsEncode(jsonEncode(t)); } /// string json 转为 map static Map string2map(String str) { return json.decode(fluroCnParamsDecode(str)); }}
完美解决,这也是fluro使用的整个流程,基本小封装了下,还有就是Routers需要在main.dart里初始化:
MyApp() { // 注册初始化fluro final router = Router(); Routers.configureRoutes(router); Routers.router = router; }
关于"Flutter路由之fluro如何配置及跳转"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
页面
参数
路由
中文
篇文章
配置
字符
对象
更多
路径
不错
实用
特殊
主页
也就是
内容
同级
字符串
就是
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库语言练习
哪个网站使用apache服务器
天门定制软件开发价格
服务器安全运维服务
北京大学校报全刊数据库制作
数据库面试优化问题
数据库草本廯痒净
贵州天使网络技术
大华软件开发国际事业部
为什么服务器版本号不匹配
exp 导出远程数据库
林业一张图数据库地类标准
服务器与操作系统间的区别
网络安全 扫描
linux拷贝到其他服务器
app软件开发大学学什么
轰炸服务器
群晖隧道代理服务器
数据库 stmt
excel查重复数据库
建立机动车驾驶证管理系统数据库
捷成有网络安全概念吗
网络安全胶
数据库草本廯痒净
长城至翔服务器厂家
数据库应用和技术论文
网络安全实战 pdf
工业网络技术对应的职业
山东千石网络技术
数据库设置约束两者不相同