在Flutter應用開發過程當中,除了使用Flutter官方提供的路由外,還可使用一些第三方路由框架來實現頁面管理和導航,如Fluro、Frouter等。 Fluro做爲一款優秀的Flutter企業級路由框架,Fluro的使用比官方提供的路由框架要複雜一些,可是卻很是適合中大型項目。由於它具備井井有條、條理化、方便擴展和便於總體管理路由等優勢。 使用Fluro以前須要先在pubspec.yaml文件中添加Fluro依賴,以下所示。git
dependencies:
fluro: "^1.5.1"
複製代碼
若是沒法使用上面的方式添加Fluro依賴,還可使用git的方式添加Fluro依賴,以下所示。github
dependencies:
fluro:
git: git://github.com/theyakka/fluro.git
複製代碼
成功添加Fluro庫依賴後,就可使用Fluro進行應用的路由管理與導航開發了。爲了方便對路由進行統一的管理,首先須要新建一個路由映射文件,用來對每一個路由進行管理。以下所示,是路由配置文件route_handles.dart的示例代碼。bash
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter_demo/page_a.dart';
import 'package:flutter_demo/page_b.dart';
import 'package:flutter_demo/page_empty.dart';
//空頁面
var emptyHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<String>> params) {
return PageEmpty();
});
//A頁面
var aHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
return PageA();
});
//B頁面
var bHandler = new Handler(
handlerFunc: (BuildContext context, Map<String, List<Object>> params) {
return PageB();
});
複製代碼
完成基本的路由配置後,還須要一個靜態的路由整體配置文件,方便咱們在路由頁面中使用。以下所示,是路由整體配置文件routes.dart的示例代碼。架構
import 'package:fluro/fluro.dart';
import 'package:flutter_demo/route_handles.dart';
class Routes {
static String page_a = "/"; //須要注意
static String page_b = "/b";
static void configureRoutes(Router router) {
router.define(page_a, handler: aHandler);
router.define(page_b, handler: bHandler);
router.notFoundHandler =emptyHandler; //空頁面
}
}
複製代碼
在進行路由的整體配置時,還須要處理不存在的路徑狀況,即便用空頁面或者默認頁面進行代替。同時,須要注意的是應用的首頁必定要用「/」進行配置。 爲了方便使用,還須要把Router進行靜態化,這樣在任何一個頁面均可以直接調用它。以下所示,是application.dart文件的示例代碼。app
import 'package:fluro/fluro.dart';
class Application{
static Router router;
}
複製代碼
完成上述操做後,就能夠在main.dart文件中引入路由配置文件和靜態化文件了,以下所示。框架
import 'package:fluro/fluro.dart';
import 'package:flutter_demo/routes.dart';
import 'application.dart';
void main() {
Router router = Router();
Routes.configureRoutes(router);
Application.router = router;
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo App',
onGenerateRoute: Application.router.generator,
);
}
}
複製代碼
若是要在跳轉到某個頁面,只須要使用Application.router.navigateTo()方法便可,以下所示。less
Application.router.navigateTo(context,"/b"); //b爲配置路由
複製代碼
運行上面的示例代碼,效果以下圖所示。 ide