import 'package:flutter/material.dart'; import 'package:liftmanager/routers/fluro_navigator.dart'; import 'package:liftmanager/utils/toast.dart'; import 'package:liftmanager/utils/utils.dart'; import 'package:liftmanager/widgets/progress_dialog.dart'; import 'base_page_presenter.dart'; import 'mvps.dart'; abstract class BasePageState extends State implements IMvpView { V presenter; BasePageState() { presenter = createPresenter(); presenter.view = this; } V createPresenter(); @override BuildContext getContext() { return context; } @override void closeProgress() { if (mounted && _isShowDialog){ _isShowDialog = false; NavigatorUtils.goBack(context); } } bool _isShowDialog = false; @override void showProgress() { /// 避免重复弹出 if (mounted && !_isShowDialog){ _isShowDialog = true; try{ showTransparentDialog( context: context, barrierDismissible: false, builder:(_) { return WillPopScope( onWillPop: () async { // 拦截到返回键,证明dialog被手动关闭 _isShowDialog = false; return Future.value(true); }, child: const ProgressDialog(hintText: "正在加载..."), ); } ); }catch(e){ /// 异常原因主要是页面没有build完成就调用Progress。 print(e); } } } @override void showToast(String string) { toasts(string); } @override void didChangeDependencies() { super.didChangeDependencies(); presenter?.didChangeDependencies(); } @override void dispose() { super.dispose(); presenter?.dispose(); } @override void deactivate() { super.deactivate(); presenter?.deactivate(); } @override void didUpdateWidget(T oldWidget) { super.didUpdateWidget(oldWidget); didUpdateWidgets(oldWidget); } @override void initState() { super.initState(); presenter?.initState(); } void didUpdateWidgets(W oldWidget) { presenter?.didUpdateWidgets(oldWidget); } }