最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flutter 路由插件fluro的使用

 更新時間:2021年06月22日 10:11:39   作者:島上碼農(nóng)  
使用原生的路由基本上能夠滿足大部分需求,但如果想要對頁面做類似瀏覽器 url 那樣的路由,或者控制頁面跳轉(zhuǎn)的轉(zhuǎn)場動畫,那么原生的路由需要做不少的改造。在 pub 上,有優(yōu)秀的路由插件 fluro 解決這類問題。本文介紹該插件的使用方法

前面兩篇文章我們介紹了Flutter 的原生導(dǎo)航器 Navigator 實現(xiàn)頁面跳轉(zhuǎn),路由及路由攔截的使用,具體可以參考之前的文章:

//www.fzitv.net/article/215167.htm

//www.fzitv.net/article/214856.htm

使用原生的路由基本上能夠滿足大部分需求,但如果想要對頁面做類似瀏覽器 url 那樣的路由,或者控制頁面跳轉(zhuǎn)的轉(zhuǎn)場動畫,那么原生的路由需要做不少的改造。在 pub 上,有優(yōu)秀的路由插件 fluro 解決這類問題。

fluro的使用方法

fluro 的使用步驟比較簡單,分為下面三個步驟:

  • 構(gòu)建FluroRouter路由實例,一個應(yīng)用一個實例即可;
  • 定義路由路徑的處理器(Handler),用于匹配不同路由路徑的處理方法。
  • 在 MaterialApp 中把 onGenerateRoute設(shè)置為 FluroRouter.generator方法來構(gòu)建系統(tǒng)路由。

需要注意的是,F(xiàn)luro 默認(rèn)會把路徑“/”當(dāng)做根目錄,因此必須定義根目錄的 Handler。另外對于路由不存在的情況,可以設(shè)置FluroRouter.notFoundHandler定義錯誤路由處理器。

路由處理器Handler

fluro 的關(guān)鍵實現(xiàn)是 Handler,Handler 的定義如下:

class Handler {
  Handler({this.type = HandlerType.route, required this.handlerFunc});
  final HandlerType type;
  final HandlerFunc handlerFunc;
}

構(gòu)造函數(shù)有兩個屬性,一個是 HandlerType 枚舉,分為 route和 function 兩個值,其中用于路由的是 route,也是默認(rèn)值。handlerFunc是必傳的,這是響應(yīng)路由的一個方法,需要返回一個 Widget,以便跳轉(zhuǎn)到對應(yīng)的頁面。

typedef Widget? HandlerFunc(
    BuildContext? context, Map<String, List<String>> parameters);

HandlerFunc接收上下文 context,以及攜帶了路由參數(shù),這個參數(shù)是一個Map,對應(yīng)路由路徑的多個路由參數(shù)。例如/dynamic/:id 路由,如果實際路由為/dynamic/1?event=a&event=b,則 parameters 的格式如下:

{
  "id": ["1"],
  "event": ["a", "b"]
}

需要注意路由參數(shù)的數(shù)據(jù)類型全部是String 類型,通過這個 Handler,可以將路由參數(shù)傳遞到下級頁面。

使用示例

我們?yōu)榱私y(tǒng)一管理路由,定義一個類 RouterManager,里面的屬性均為靜態(tài)成員,以便直接通過類訪問,而無需創(chuàng)建示例。當(dāng)然考慮封裝性,也可以做成單例模式。需要注意,F(xiàn)luroRouter 只能初始化一次,否則會導(dǎo)致熱重載報錯提示路由已經(jīng)被定義。我們把上兩篇的路由跳轉(zhuǎn)替換為fluro 跳轉(zhuǎn),RouterManager 的代碼如下:

//省略 import

class RouterManager {
  static String splashPath = '/';
  static String loginPath = '/login';
  static String homePath = '/home';
  static String dynamicPath = '/dynamic';
  static String dynamicDetailPath = '$dynamicPath/:id';

  static FluroRouter router;

  static void initRouter() {
    if (router == null) {
      router = FluroRouter();
      defineRoutes();
    }
  }

  static var loginHandler =
      Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
    return LoginPage();
  });

  static var dynamicDetailHandler =
      Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
    return DynamicDetailPage(params['id'][0]);
  });

  static var splashHandler =
      Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
    return Splash();
  });

  static var homeHandler =
      Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
    return AppHomePage();
  });

  static var notFoundHandler =
      Handler(handlerFunc: (BuildContext context, Map<String, dynamic> params) {
    return NotFound();
  });

  static void defineRoutes() {
    router.define(splashPath, handler: splashHandler);
    router.define(homePath, handler: homeHandler);
    router.define(loginPath, handler: loginHandler);
    router.define(dynamicDetailPath, handler: dynamicDetailHandler);
    router.notFoundHandler = notFoundHandler;
  }
}

實際只需要調(diào)用 RouterManager.initRouter 方法即可完成路由的初始化,這個需要在 main.dart 的 MaterialApp 中完成,代碼如下。與之前的代碼相比,不再需要設(shè)置navigationKey參數(shù)和 initialRoute參數(shù),只是需要在 build 方法里調(diào)用初始化路由的方法。

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    RouterManager.initRouter();
    return MaterialApp(
      //...
      onGenerateRoute:
          RouterManager.router.generator,
    );
  }
}

頁面跳轉(zhuǎn)

頁面跳轉(zhuǎn)調(diào)用有多種形式,本例我們用到了三種,分別是:

  • 清除路由堆棧跳轉(zhuǎn):即跳轉(zhuǎn)后的頁面作為根頁面(沒有返回按鈕),這種適合閃屏頁跳到首頁。代碼如下:
RouterManager.router.navigateTo(context, RouterManager.homePath, clearStack: true);
  • 普通跳轉(zhuǎn):無參數(shù)直接跳轉(zhuǎn),代碼如下:
RouterManager.router.navigateTo(context, RouterManager.loginPath);
  • 帶參數(shù)跳轉(zhuǎn):路由路徑攜帶參數(shù),和普通跳轉(zhuǎn)類似,只是拼接了路徑參數(shù)和 query 參數(shù):
RouterManager.router.navigateTo(context, '${RouterManager.dynamicPath}/$id?event=a&event=b')

運行效果

我們將閃屏頁跳轉(zhuǎn)到首頁,動態(tài)跳轉(zhuǎn)到詳情頁,以及登錄頁和404頁面進行了更換,運行效果如下圖所示。注意看整個轉(zhuǎn)場方式的不同,正常的轉(zhuǎn)場切換是從底部到頂部彈出,但404是從左到右彈出(和原生的 push 一樣)。這個后續(xù)可以在 Handler 里調(diào)整或者在路由跳轉(zhuǎn)的時候定義轉(zhuǎn)場動畫,我們下一篇再來介紹這方面的使用。

以上就是Flutter 路由插件fluro的使用的詳細內(nèi)容,更多關(guān)于Flutter 路由插件fluro的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Flutter?Flow實現(xiàn)滑動顯隱層示例詳解

    Flutter?Flow實現(xiàn)滑動顯隱層示例詳解

    這篇文章主要為大家介紹了Flutter?Flow實現(xiàn)滑動顯隱層示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 懸浮對話框Android代碼實現(xiàn)

    懸浮對話框Android代碼實現(xiàn)

    這篇文章主要為大家詳細介紹了懸浮對話框Android代碼實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android BottomNavigationView底部導(dǎo)航效果

    Android BottomNavigationView底部導(dǎo)航效果

    這篇文章主要為大家詳細介紹了Android BottomNavigationView底部導(dǎo)航效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Android實現(xiàn)外部喚起應(yīng)用跳轉(zhuǎn)指定頁面的方法

    Android實現(xiàn)外部喚起應(yīng)用跳轉(zhuǎn)指定頁面的方法

    這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)外部喚起應(yīng)用跳轉(zhuǎn)指定頁面的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Android最簡單的限制輸入方法(只包含數(shù)字、字母和符號)

    Android最簡單的限制輸入方法(只包含數(shù)字、字母和符號)

    這篇文章主要給大家介紹了關(guān)于Android最簡單的限制輸入的實現(xiàn)方法,限制輸入框只能輸入數(shù)字、字母和符號,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看 吧
    2018-11-11
  • Android實現(xiàn)照片墻效果的實例代碼

    Android實現(xiàn)照片墻效果的實例代碼

    Android實現(xiàn)照片墻效果的設(shè)計思路其實也非常簡單,用一個GridView控件當(dāng)作“墻”,然后隨著GridView的滾動將一張張照片貼在“墻”上,這些照片可以是手機本地中存儲的,也可以是從網(wǎng)上下載的
    2018-05-05
  • Android中Xposed框架篇---修改系統(tǒng)位置信息實現(xiàn)自身隱藏功能實例

    Android中Xposed框架篇---修改系統(tǒng)位置信息實現(xiàn)自身隱藏功能實例

    本篇文章介紹了Android中Xposed框架的使用,詳細的介紹了修改系統(tǒng)位置信息實現(xiàn)自身隱藏功能實例,有需要的朋友可以了解一下。
    2016-11-11
  • Android實現(xiàn)中文按拼音排序方法

    Android實現(xiàn)中文按拼音排序方法

    這篇文章主要為大家詳細介紹了Android實現(xiàn)中文按拼音排序方法,很實用,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android實現(xiàn)橡皮筋回彈和平移縮放效果

    Android實現(xiàn)橡皮筋回彈和平移縮放效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)橡皮筋回彈和平移縮放效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android軟鍵盤擋住輸入框的終極解決方案

    Android軟鍵盤擋住輸入框的終極解決方案

    最近在開發(fā)android的項目,在項目開發(fā)中遇到各種坑,今天小編就給大家分享一個關(guān)于軟鍵盤擋住輸入框的問題,下面給大家介紹的非常詳細,具有一定的參考借鑒價值,對軟鍵盤擋住輸入框的知識感興趣的朋友一起看看吧
    2016-10-10

最新評論

偃师市| 贡山| 盐池县| 瓦房店市| 通江县| 连州市| 锡林郭勒盟| 木兰县| 湘潭县| 四川省| 正安县| 两当县| 句容市| 卢湾区| 嫩江县| 调兵山市| 东乡县| 松潘县| 琼海市| 内江市| 堆龙德庆县| 开封市| 金华市| 高安市| 阿拉善左旗| 察哈| 楚雄市| 光山县| 江北区| 三原县| 茶陵县| 上虞市| 类乌齐县| 博客| 岚皋县| 固始县| 光泽县| 太原市| 云南省| 昌平区| 饶平县|