頁面狀態(tài)管理控件
項(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)行效果圖

