Flutter路由框架Fluro簡介

xiangzhihong發表於2020-01-17

在Flutter應用開發過程中,除了使用Flutter官方提供的路由外,還可以使用一些第三方路由框架來實現頁面管理和導航,如Fluro、Frouter等。 Fluro作為一款優秀的Flutter企業級路由框架,Fluro的使用比官方提供的路由框架要複雜一些,但是卻非常適合中大型專案。因為它具有層次分明、條理化、方便擴充套件和便於整體管理路由等優點。 使用Fluro之前需要先在pubspec.yaml檔案中新增Fluro依賴,如下所示。

dependencies:
 fluro: "^1.5.1"
複製程式碼

如果無法使用上面的方式新增Fluro依賴,還可以使用git的方式新增Fluro依賴,如下所示。

dependencies:
 fluro:
   git: git://github.com/theyakka/fluro.git
複製程式碼

成功新增Fluro庫依賴後,就可以使用Fluro進行應用的路由管理與導航開發了。為了方便對路由進行統一的管理,首先需要新建一個路由對映檔案,用來對每個路由進行管理。如下所示,是路由配置檔案route_handles.dart的示例程式碼。

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檔案的示例程式碼。

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()方法即可,如下所示。

Application.router.navigateTo(context,"/b");   //b為配置路由
複製程式碼

執行上面的示例程式碼,效果如下圖所示。

在這裡插入圖片描述
可以發現,Fluro雖然使用上相比Flutter的Navigator要繁瑣,但是對於中大型專案卻非常適合,它的分層架構也非常方便專案後期的升級和維護,使用時可以根據實際情況進行合理的選擇。

相關文章