Flutter路由fluro引入配置和使用的具體方法
Flutter本身提供了路由機(jī)制,作個(gè)人的小型項(xiàng)目,完全足夠了。但是如果你要作企業(yè)級(jí)開發(fā),可能就會(huì)把入口文件變得臃腫不堪。而再Flutter問世之初,就已經(jīng)了企業(yè)級(jí)路由方案fluro。
flutter_fluro簡(jiǎn)介
fluro簡(jiǎn)化了Flutter的路由開發(fā),也是目前Flutter生態(tài)中最成熟的路由框架。
GitHub地址:https://github.com/theyakka/fluro
它出現(xiàn)的比較早啊,是目前用戶最多的Flutter路由解決方案,目前Github上有將近1000Star,可以說是相當(dāng)了不起了。
引入fluro
在pubspec.yaml文件里,直接注冊(cè)版本依賴,代碼如下。(注意要最新版)
dependencies: fluro: "^1.5.1"
如果你這個(gè)版本下載不下來,你也可以使用git的方式注冊(cè)依賴,這樣頁(yè)是可以下載包的(這也是小伙伴提的一個(gè)問題),代碼如下:
dependencies: fluro: git: git://github.com/theyakka/fluro.git
在項(xiàng)目的入口文件,也就是main.dart中引入,代碼如下:
import 'package:fluro/fluro.dart';
通過上面的三步,就算把Fluro引入到項(xiàng)目中了,下面就可以開心的使用了。
初始化Fluro
現(xiàn)在可以進(jìn)行使用了,使用時(shí)需要先在Build方法里進(jìn)行初始化,其實(shí)就是把對(duì)象new出來。
final router = Router();
編寫rotuer_handler
handler相當(dāng)于一個(gè)路由的規(guī)則,比如我們要到詳細(xì)頁(yè)面,這時(shí)候就需要傳遞商品的ID,那就要寫一個(gè)handler。這次我按照大型企業(yè)級(jí)真實(shí)項(xiàng)目開發(fā)來部署項(xiàng)目目錄和文件,把路由全部分開,Handler單獨(dú)寫成一個(gè)文件。新建一個(gè)routers文件夾,然后新建router_handler.dart文件
import 'package:flutter/material.dart';
import 'package:fluro/fluro.dart';
import '../pages/details_page.dart';
Handler detailsHanderl =Handler(
handlerFunc: (BuildContext context,Map<String,List<String>> params){
String goodsId = params['id'].first;
print('index>details goodsID is ${goodsId}');
return DetailsPage(goodsId);
}
);
這樣一個(gè)Handler就寫完了。Hanlder的編寫是路由中最重要的一個(gè)環(huán)境,知識(shí)點(diǎn)也是比較多的,這里我們學(xué)的只是最簡(jiǎn)單的一個(gè)Handler編寫,以后會(huì)隨著課程的增加,我們會(huì)再繼續(xù)深入講解Handler的編寫方法。
Hanlder只是對(duì)每個(gè)路由的獨(dú)立配置文件,fluro當(dāng)然還需要一個(gè)總體配置文件。配置好后,我們還需要一個(gè)靜態(tài)化文件,方便我們?cè)赨I頁(yè)面進(jìn)行使用。
配置路由
我們還需要對(duì)路由有一個(gè)總體的配置,比如跟目錄,出現(xiàn)不存在的路徑如何顯示,工作中我們經(jīng)常把這個(gè)文件單獨(dú)寫一個(gè)文件。在routes.dart里,新建一個(gè)routes.dart文件。
代碼如下:
import 'package:flutter/material.dart';
import 'package:fluro/fluro.dart';
import './router_handler.dart';
class Routes { //配置類
static String root = '/'; //根目錄
static String detailsPage = '/detail'; //詳情頁(yè)面
//靜態(tài)方法
static void configureRoutes(Router router){//路由配置
//找不到路由
router.notFoundHandler = new Handler(
handlerFunc: (BuildContext context,Map<String,List<String>> params){
print('ERROR====>ROUTE WAS NOT FONUND!!!');
}
);
//整體配置
router.define(detailsPage, handler: detailsHandler);
}
}
把Fluro的Router靜態(tài)化
這一步就是為了使用方便,直接把Router進(jìn)行靜態(tài)化,這樣在任何一個(gè)頁(yè)面都可以直接調(diào)用,不用再New 去調(diào)用了。
在routers下面新建了application.dart文件。代碼如下:
import 'package:fluro/fluro.dart';
class Application{
static Router router;
}
靜態(tài)化Router,這樣我們?cè)谑褂玫臅r(shí)候就可以直接用 Application.Router就可以了。
現(xiàn)在我們基本就把Fluro的路由配置好了,這樣的配置雖然稍顯復(fù)雜,但是跟層次和條理化,擴(kuò)展性也很強(qiáng)。
把路由注冊(cè)/注入到頂層
打開main.dart文件,首頁(yè)引入配置文件和靜態(tài)化文件,routes.dart和application.dart,代碼如下:
import './routers/routes.dart'; import './routers/application.dart';
引入后需要進(jìn)行賦值,進(jìn)行注入程序。這里展示主要build代碼。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
//-------------------主要代碼start
final router = Router(); //路由初始化
Routes.configureRoutes(router);
Application.router = router;
//-------------------主要代碼end
return Container(
child: MaterialApp(
title:'百姓生活+',
debugShowCheckedModeBanner: false,
//----------------主要代碼start
onGenerateRoute: Application.router.generator, //路由靜態(tài)化
//----------------主要代碼end
theme: ThemeData(
primaryColor:Colors.pink,
),
home:IndexPage()
),
);
}
}
上面代碼就是注入整個(gè)程序,讓我們?cè)谌魏雾?yè)面直接引入application.dart就可以使用。
在首頁(yè)使用
現(xiàn)在要在首頁(yè)里使用路由,直接在首頁(yè)打開商品詳細(xì)頁(yè)面。
先引入application.dart文件:
import './routers/application.dart';
然后再火爆專區(qū)的列表中使用配置好的路由,打開商品詳細(xì)頁(yè)面details_page.dart。
打開home_page.dart文件,找到火爆專區(qū)列表里的ontap事件,然后在ontap事件中直接使用application進(jìn)行跳轉(zhuǎn),代碼如下:
Application.router.navigateTo(context,"/detail?id=${val['goodsId']}");
這時(shí)候可以測(cè)試一下,如果一切正常,應(yīng)該可以打開商品詳細(xì)頁(yè)面了。
總結(jié):
單獨(dú)寫一個(gè)Handler文件,每個(gè)Handler都寫在里面,每個(gè)路由單獨(dú)定義,然后進(jìn)行跳轉(zhuǎn)頁(yè)面都是在Handler里做的。如果有10個(gè)頁(yè)面,把10個(gè)頁(yè)面的Handler都做完了,要到routes.dart文件里去進(jìn)行總體配置define,再進(jìn)行靜態(tài)化,然后在主main.dart文件里注入,最后就可以使用了。
每添加一個(gè)路由,router文件和Handler文件都要進(jìn)行配置。
到此這篇關(guān)于Flutter路由fluro引入配置和使用的具體方法的文章就介紹到這了,更多相關(guān)Flutter fluro配置使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android利用CircleImageView實(shí)現(xiàn)圓形頭像的方法
這篇文章主要介紹了Android利用CircleImageView實(shí)現(xiàn)圓形頭像的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android實(shí)現(xiàn)圖片異步請(qǐng)求加三級(jí)緩存
這篇文章主要向大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片異步請(qǐng)求加三級(jí)緩存的相關(guān)資料,需要的朋友可以參考下2016-02-02
基于Android引入IjkPlayer無(wú)法播放mkv格式視頻的解決方法
下面小編就為大家分享一篇基于Android引入IjkPlayer無(wú)法播放mkv格式視頻的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
android自定義控件ImageView實(shí)現(xiàn)圓形圖片
這篇文章主要為大家詳細(xì)介紹了android自定義控件ImageView實(shí)現(xiàn)圓形圖片,適用于用戶頭像,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
android全屏去掉title欄的多種實(shí)現(xiàn)方法
android全屏去掉title欄包括以下幾個(gè)部分:實(shí)現(xiàn)應(yīng)用中的所有activity都全屏/實(shí)現(xiàn)單個(gè)activity全屏/實(shí)現(xiàn)單個(gè)activity去掉title欄/自定義標(biāo)題內(nèi)容/自定義標(biāo)題布局等等感興趣的可參考下啊2013-02-02
Android無(wú)需權(quán)限調(diào)起系統(tǒng)相機(jī)
在進(jìn)行一些小型APP的開發(fā),或者是對(duì)拍照界面沒有自定義要求時(shí),我們可以用調(diào)起系統(tǒng)相機(jī)的方式快速完成拍照需求2023-03-03
使用Eclipse配置android開發(fā)環(huán)境教程
這篇文章主要介紹了使用Eclipse配置android開發(fā)環(huán)境教程,本文講解了下載需要用到的工具、下載完需要的工具之后開始安裝、讓Ecplise自動(dòng)安裝Android開發(fā)插件(ADT- plugin)、配置Andiord SDK路徑、測(cè)試開發(fā)一個(gè)Android項(xiàng)目等內(nèi)容,需要的朋友可以參考下2015-04-04
5分鐘快速實(shí)現(xiàn)Android爆炸破碎酷炫動(dòng)畫特效的示例
本篇文章主要介紹了5分鐘快速實(shí)現(xiàn)Android爆炸破碎酷炫動(dòng)效的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12
Android基于高德地圖poi的仿微信獲取位置功能實(shí)例代碼
這篇文章主要介紹了Android基于高德地圖poi的仿微信獲取位置功能,當(dāng)用戶打開頁(yè)面自動(dòng)定位,同時(shí)搜索周邊所有poi,點(diǎn)擊搜索按鈕輸入關(guān)鍵字,獲取關(guān)鍵字搜索結(jié)果,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友參考下吧2017-12-12
Android消息推送:手把手教你集成小米推送(附demo)
本篇文章主要介紹了Android消息推送:手把手教你集成小米推送,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。2016-12-12

