網(wǎng)站首頁 編程語言 正文
一 概述
- GetPage Middleware中間件介紹
- 如何定義GetMiddleware
- GetPage Middleware使用示例
二 GetPage Middleware中間件介紹
2.1 什么是Middleware中間件
- 中間件是介于應(yīng)用系統(tǒng)和系統(tǒng)軟件之間的一類軟件,它使用系統(tǒng)軟件所提供的基礎(chǔ)服務(wù)(功能),銜接網(wǎng)絡(luò)上應(yīng)用系統(tǒng)的各個部分或不同的應(yīng)用,能夠達(dá)到資源共享、功能共享的目的百度百科
- 此處指:執(zhí)行路由跳轉(zhuǎn)前的頁面,比如Get.to()跳轉(zhuǎn)之前的那個頁面
2.2 GetPage Middleware在那里配置
void main() => runApp(GetMaterialApp(
getPages: [
GetPage(
name: '/home',
page: () => HomeWidget(),
middlewares: [GetMiddleware(priority: 1), GetMiddleware(priority: 2)])
],
));
說明:
- 在main.dart中的GetMaterialApp/getPages/GetPage進(jìn)行配置
- middlewares是個數(shù)組,可配置多個,并且有優(yōu)先級
- middlewares的配置,在要跳轉(zhuǎn)的頁面進(jìn)行配置,不是跳轉(zhuǎn)前頁面配置
三 如何定義GetMiddleware
3.1 定義一個類繼承GetMiddleware
class MiddleWare1 extends GetMiddleware {}
3.2 設(shè)置優(yōu)先級priority
class MiddleWare1 extends GetMiddleware {
@override
// TODO: implement priority
int? get priority => -1;
}
說明:優(yōu)先級越低越先執(zhí)行
3.3 重寫GetMiddleware中的幾個方法
class MiddleWare1 extends GetMiddleware {
@override
// TODO: implement priority
int? get priority => -1;
//重定向,當(dāng)正在搜索被調(diào)用路由的頁面時,將調(diào)用該函數(shù)
@override
RouteSettings? redirect(String? route) {
print('redirect1----');
//return super.redirect(route);
return const RouteSettings(name: AppRoutes.login);
}
//創(chuàng)建任何內(nèi)容之前調(diào)用此函數(shù)
@override
GetPage? onPageCalled(GetPage? page) {
print('onPageCalled1----');
//return super.onPageCalled(page);
//return page?.copy(name: AppRoutes.login);
return GetPage(name: AppRoutes.login, page: () => LoginWidget());
}
//這個函數(shù)將在綁定初始化之前被調(diào)用。在這里您可以更改此頁面的綁定。
@override
List? onBindingsStart(List? bindings) {
print('onBindingsStart1----');
//return super.onBindingsStart(bindings);
bindings?.add(LoginBinding());
return bindings;
}
//此函數(shù)將在綁定初始化后立即調(diào)用。在這里,您可以在創(chuàng)建綁定之后和創(chuàng)建頁面小部件之前執(zhí)行一些操作
@override
GetPageBuilder? onPageBuildStart(GetPageBuilder? page) {
print('onPageBuildStart1----');
//return super.onPageBuildStart(page);
return page;
}
//該函數(shù)將在調(diào)用 GetPage.page 函數(shù)后立即調(diào)用,并為您提供函數(shù)的結(jié)果。并獲取將顯示的小部件
@override
Widget onPageBuilt(Widget page) {
print('onPageBuilt1 ----');
//return super.onPageBuilt(page);
return page;
}
//此函數(shù)將在處理完頁面的所有相關(guān)對象(控制器、視圖等)后立即調(diào)用
@override
void onPageDispose() {
print('onPageDispose1 ----');
super.onPageDispose();
}
}
說明:
- RouteSettings? redirect:搜索路由進(jìn)行重定向時執(zhí)行此方法,比如Get.to()
- GetPage? onPageCalled:跳轉(zhuǎn)到到頁面顯示執(zhí)行此方法,通過
page?.copy(name: AppRoutes.login)
或者GetPage(name: AppRoutes.login, page: () => LoginWidget())
顯示頁面 - List
? onBindingsStart:頁面顯示綁定初始化調(diào)用位置 - GetPageBuilder? onPageBuildStart:綁定初始化后立即調(diào)用位置
- Widget onPageBuilt:返回GetPage.page的頁面
- void onPageDispose():頁面處理完調(diào)用函數(shù)位置
四 GetPage Middleware使用示例
4.1 效果圖說明
跳轉(zhuǎn)頁面 | 要跳轉(zhuǎn)到頁面 | 中間件1(優(yōu)先度) | 中間件2(優(yōu)先度) |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
說明:
- 在Me界面,點擊切換路由—Detail按鈕
- 如果沒有中間件,點擊此按鈕,會跳轉(zhuǎn)到Detail界面
- 設(shè)置了middlewares,如果優(yōu)先級為Login的Middle,則顯示Login界面
- 設(shè)置了middlewares,如果優(yōu)先級為Other的Middle,則顯示Other界面
4.2 代碼示例
main中的routes
static final List routes = [
GetPage(
name: AppRoutes.main,
page: () => IndexWidget(),
binding: IndexBinding(),
),
GetPage(
name: AppRoutes.login,
page: () => LoginWidget(),
binding: LoginBinding()),
GetPage(
name: AppRoutes.detail,
page: () => DetailWidget(),
middlewares: [MiddleWare1(), MiddleWare2()],
),
GetPage(name: AppRoutes.other, page: () => OtherWidget())
];
說明:在Detail設(shè)置middlewares,用于攔截中間件
MeWidget界面中的點擊按鈕
class MeWidget extends StatelessWidget{
@override
Widget build(BuildContext context) {
return Center(child: Column(children: [
Text('Me'),
RaisedButton(child: Text("切換路由-Detail"),onPressed: ()=>{Get.toNamed(AppRoutes.detail)})
],));
}
}
說明:此處的路由搜索為detail,執(zhí)行方法為Get.toName
自定義MiddleWare1
class MiddleWare1 extends GetMiddleware {
@override
// TODO: implement priority
int? get priority => -1;
//重定向
@override
RouteSettings? redirect(String? route) {
print('redirect1----');
//return super.redirect(route);
return const RouteSettings(name: AppRoutes.login);
}
//創(chuàng)建任何內(nèi)容之前調(diào)用此函數(shù)
@override
GetPage? onPageCalled(GetPage? page) {
print('onPageCalled1----');
//return super.onPageCalled(page);
//return page?.copy(name: AppRoutes.login);
return GetPage(name: AppRoutes.login, page: () => LoginWidget());
}
//這個函數(shù)將在綁定初始化之前被調(diào)用。在這里您可以更改此頁面的綁定。
@override
List? onBindingsStart(List? bindings) {
print('onBindingsStart1----');
//return super.onBindingsStart(bindings);
bindings?.add(LoginBinding());
return bindings;
}
//此函數(shù)將在綁定初始化后立即調(diào)用。在這里,您可以在創(chuàng)建綁定之后和創(chuàng)建頁面小部件之前執(zhí)行一些操作
@override
GetPageBuilder? onPageBuildStart(GetPageBuilder? page) {
print('onPageBuildStart1----');
//return super.onPageBuildStart(page);
return page;
}
//該函數(shù)將在調(diào)用 GetPage.page 函數(shù)后立即調(diào)用,并為您提供函數(shù)的結(jié)果。并獲取將顯示的小部件
@override
Widget onPageBuilt(Widget page) {
print('onPageBuilt1 ----');
//return super.onPageBuilt(page);
return page;
}
//此函數(shù)將在處理完頁面的所有相關(guān)對象(控制器、視圖等)后立即調(diào)用
@override
void onPageDispose() {
print('onPageDispose1 ----');
super.onPageDispose();
}
}
自定義MiddleWare2
class MiddleWare2 extends GetMiddleware{
@override
// TODO: implement priority
int? get priority =>-2;
//重定向
@override
RouteSettings? redirect(String? route) {
print('redirect2----');
//return super.redirect(route);
return const RouteSettings(name: AppRoutes.other );
}
//onPageCalled
@override
GetPage? onPageCalled(GetPage? page) {
print('onPageCalled2----');
//return super.onPageCalled(page);
return page?.copy(name: AppRoutes.other);
//return GetPage(name: AppRoutes.other, page:()=> OtherWidget());
}
//onBindingsStart
@override
List? onBindingsStart(List? bindings) {
print('onBindingsStart2----');
//return super.onBindingsStart(bindings);
return bindings;
}
//onPageBuildStart
@override
GetPageBuilder? onPageBuildStart(GetPageBuilder? page) {
print('onPageBuildStart2----');
return super.onPageBuildStart(page);
}
//onPageBuilt
@override
Widget onPageBuilt(Widget page) {
print('onPageBuilt2 ----');
return super.onPageBuilt(page);
}
//onPageDispose
@override
void onPageDispose() {
print('onPageDispose2 ----');
super.onPageDispose();
}
}
五 參考
- Github-getX-GetPage Middleware-官方文檔
- CSDN下載-參考代碼
原文鏈接:https://blog.csdn.net/Calvin_zhou/article/details/124698000
- 上一篇:larvel8 批量刪除
- 下一篇:Android水波紋效果
相關(guān)推薦
- 2022-08-25 R語言多元線性回歸實例詳解_R語言
- 2022-03-15 request doesn‘t contain a multipart/form-data or m
- 2022-02-24 antv/g2圖表tooltip自定義并展示坐標(biāo)之外的數(shù)據(jù)
- 2022-04-11 C#定時任務(wù)框架Quartz.NET介紹與用法_C#教程
- 2023-02-15 docker容器存儲清理刪除所需命令和方法_docker
- 2022-11-14 Windows進(jìn)程的創(chuàng)建與結(jié)束
- 2021-12-08 linux中g(shù)rub啟動引導(dǎo)程序的加密介紹_Linux
- 2022-10-15 C語言庫函數(shù)qsort的使用及模擬實現(xiàn)_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支