flutter 自定義 LoadingView、LoadingDialog加載控件

頁面狀態(tài)管理控件

項(xiàng)目github地址

項(xiàng)目簡介

? ? 項(xiàng)目開發(fā)中會(huì)使用到加載彈窗和頁面狀態(tài)管理控件,本項(xiàng)目有兩個(gè)自定義控件,ios 和android 效果一致

? ? 一個(gè)是加載彈窗控件 LoadingDialog

? ? 一個(gè)是頁面狀態(tài)管理控件 LoadingView

實(shí)現(xiàn)方式

? ? 加載動(dòng)畫彈窗使用的 showDialog() 方式實(shí)現(xiàn),通過傳入自定義的控件 LoadingDialog 來達(dá)到效果

? ? 頁面狀態(tài)管理控件通過傳入 state,根據(jù) steta 返回不同的頁面來實(shí)現(xiàn)的

加載彈窗的使用

? ? showDialog(

? ? ? ? context: context,

? ? ? ? builder: (_) {

? ? ? ? ? return LoadingDialog();

? ? ? ? }

? ? );


? ? 如果需要監(jiān)聽控件關(guān)閉時(shí)的動(dòng)作傳入 dismissListener 即可

? ? showDialog(

? ? ? ? context: context,

? ? ? ? builder: (_) {

? ? ? ? ? return LoadingDialog(

? ? ? ? ? ? dismissListener: () {

? ? ? ? ? ? ? //彈窗消失時(shí)操作

? ? ? ? ? ? },

? ? ? ? ? );

? ? ? ? }

? ? );


? ? 默認(rèn)點(diǎn)擊控件外部會(huì)隱藏,如果需要點(diǎn)擊外部不隱藏,可以傳入 outsideDismiss 參數(shù)為 false 或者修改默認(rèn)值


? ? 頁面狀態(tài)控件使用

? ? return Scaffold(

? ? ? body: LoadingView(

? ? ? ? state: _state,

? ? ? ? //加載成功時(shí)顯示的頁面

? ? ? ? contentWidget: _buildContentView (),

? ? ? ? //自定義狀態(tài)頁面,當(dāng) state 為 custom 時(shí)顯示

? ? ? ? customWidget: _buildCustomView (),

? ? ? ? allRetryListener: () {

? ? ? ? ? _showLoadingNow(LoadingState.loading);

? ? ? ? ? _startTimer(LoadingState.success);

? ? ? ? },

? ? ? ),

? ? );


? ? 如果需要對(duì)單獨(dú)頁面的重新加載進(jìn)行處理,比如網(wǎng)絡(luò)異常需要單獨(dú)處理如下

? ? return Scaffold(

? ? ? body: LoadingView(

? ? ? ? state: _state,

? ? ? ? //加載成功時(shí)顯示的頁面

? ? ? ? contentWidget: _buildContentView (),

? ? ? ? //自定義狀態(tài)頁面,當(dāng) state 為 custom 時(shí)顯示

? ? ? ? customWidget: _buildCustomView (),

? ? ? ? allRetryListener: () {

? ? ? ? ? //統(tǒng)一的重新加載處理

? ? ? ? },

? ? ? ? intentErrorRetryListener: () {

? ? ? ? ? //單獨(dú)設(shè)置來網(wǎng)絡(luò)異常的處理,當(dāng)在網(wǎng)絡(luò)異常頁面點(diǎn)擊重新加載的時(shí)候會(huì)走這里而不會(huì)走統(tǒng)一處理的函數(shù)

? ? ? ? },

? ? ? ),

? ? );

附上 android、ios 運(yùn)行效果圖

項(xiàng)目github地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容