頁面狀態(tài)管理控件
項(xiàng)目簡介
? ? 項(xiàng)目開發(fā)中會使用到加載彈窗和頁面狀態(tài)管理控件谷饿,本項(xiàng)目有兩個自定義控件投慈,ios 和android 效果一致
? ? 一個是加載彈窗控件 LoadingDialog
? ? 一個是頁面狀態(tài)管理控件 LoadingView
實(shí)現(xiàn)方式
? ? 加載動畫彈窗使用的 showDialog() 方式實(shí)現(xiàn)承耿,通過傳入自定義的控件 LoadingDialog 來達(dá)到效果
? ? 頁面狀態(tài)管理控件通過傳入 state,根據(jù) steta 返回不同的頁面來實(shí)現(xiàn)的
加載彈窗的使用
? ? showDialog(
? ? ? ? context: context,
? ? ? ? builder: (_) {
? ? ? ? ? return LoadingDialog();
? ? ? ? }
? ? );
? ? 如果需要監(jiān)聽控件關(guān)閉時的動作傳入 dismissListener 即可
? ? showDialog(
? ? ? ? context: context,
? ? ? ? builder: (_) {
? ? ? ? ? return LoadingDialog(
? ? ? ? ? ? dismissListener: () {
? ? ? ? ? ? ? //彈窗消失時操作
? ? ? ? ? ? },
? ? ? ? ? );
? ? ? ? }
? ? );
? ? 默認(rèn)點(diǎn)擊控件外部會隱藏伪煤,如果需要點(diǎn)擊外部不隱藏加袋,可以傳入 outsideDismiss 參數(shù)為 false 或者修改默認(rèn)值
? ? 頁面狀態(tài)控件使用
? ? return Scaffold(
? ? ? body: LoadingView(
? ? ? ? state: _state,
? ? ? ? //加載成功時顯示的頁面
? ? ? ? contentWidget: _buildContentView (),
? ? ? ? //自定義狀態(tài)頁面,當(dāng) state 為 custom 時顯示
? ? ? ? customWidget: _buildCustomView (),
? ? ? ? allRetryListener: () {
? ? ? ? ? _showLoadingNow(LoadingState.loading);
? ? ? ? ? _startTimer(LoadingState.success);
? ? ? ? },
? ? ? ),
? ? );
? ? 如果需要對單獨(dú)頁面的重新加載進(jìn)行處理抱既,比如網(wǎng)絡(luò)異常需要單獨(dú)處理如下
? ? return Scaffold(
? ? ? body: LoadingView(
? ? ? ? state: _state,
? ? ? ? //加載成功時顯示的頁面
? ? ? ? contentWidget: _buildContentView (),
? ? ? ? //自定義狀態(tài)頁面职烧,當(dāng) state 為 custom 時顯示
? ? ? ? customWidget: _buildCustomView (),
? ? ? ? allRetryListener: () {
? ? ? ? ? //統(tǒng)一的重新加載處理
? ? ? ? },
? ? ? ? intentErrorRetryListener: () {
? ? ? ? ? //單獨(dú)設(shè)置來網(wǎng)絡(luò)異常的處理,當(dāng)在網(wǎng)絡(luò)異常頁面點(diǎn)擊重新加載的時候會走這里而不會走統(tǒng)一處理的函數(shù)
? ? ? ? },
? ? ? ),
? ? );