base_page_state.dart 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import 'package:flutter/material.dart';
  2. import 'package:liftmanager/routers/fluro_navigator.dart';
  3. import 'package:liftmanager/utils/toast.dart';
  4. import 'package:liftmanager/utils/utils.dart';
  5. import 'package:liftmanager/widgets/progress_dialog.dart';
  6. import 'base_page_presenter.dart';
  7. import 'mvps.dart';
  8. abstract class BasePageState<T extends StatefulWidget, V extends BasePagePresenter> extends State<T> implements IMvpView {
  9. V presenter;
  10. BasePageState() {
  11. presenter = createPresenter();
  12. presenter.view = this;
  13. }
  14. V createPresenter();
  15. @override
  16. BuildContext getContext() {
  17. return context;
  18. }
  19. @override
  20. void closeProgress() {
  21. if (mounted && _isShowDialog){
  22. _isShowDialog = false;
  23. NavigatorUtils.goBack(context);
  24. }
  25. }
  26. bool _isShowDialog = false;
  27. @override
  28. void showProgress() {
  29. /// 避免重复弹出
  30. if (mounted && !_isShowDialog){
  31. _isShowDialog = true;
  32. try{
  33. showTransparentDialog(
  34. context: context,
  35. barrierDismissible: false,
  36. builder:(_) {
  37. return WillPopScope(
  38. onWillPop: () async {
  39. // 拦截到返回键,证明dialog被手动关闭
  40. _isShowDialog = false;
  41. return Future.value(true);
  42. },
  43. child: const ProgressDialog(hintText: "正在加载..."),
  44. );
  45. }
  46. );
  47. }catch(e){
  48. /// 异常原因主要是页面没有build完成就调用Progress。
  49. print(e);
  50. }
  51. }
  52. }
  53. @override
  54. void showToast(String string) {
  55. toasts(string);
  56. }
  57. @override
  58. void didChangeDependencies() {
  59. super.didChangeDependencies();
  60. presenter?.didChangeDependencies();
  61. }
  62. @override
  63. void dispose() {
  64. super.dispose();
  65. presenter?.dispose();
  66. }
  67. @override
  68. void deactivate() {
  69. super.deactivate();
  70. presenter?.deactivate();
  71. }
  72. @override
  73. void didUpdateWidget(T oldWidget) {
  74. super.didUpdateWidget(oldWidget);
  75. didUpdateWidgets<T>(oldWidget);
  76. }
  77. @override
  78. void initState() {
  79. super.initState();
  80. presenter?.initState();
  81. }
  82. void didUpdateWidgets<W>(W oldWidget) {
  83. presenter?.didUpdateWidgets<W>(oldWidget);
  84. }
  85. }