base_page.dart
2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import 'package:flutter/material.dart';
import 'package:Parlando/routers/fluro_navigator.dart';
import 'package:Parlando/util/log_utils.dart';
import 'package:Parlando/util/toast_utils.dart';
import 'package:Parlando/widgets/progress_dialog.dart';
import 'base_presenter.dart';
import 'mvps.dart';
mixin BasePageMixin<T extends StatefulWidget, P extends BasePresenter>
on State<T> implements IMvpView {
P? presenter;
P 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 {
showDialog<void>(
context: context,
barrierDismissible: false,
barrierColor: const Color(0x00FFFFFF), // 默认dialog背景色为半透明黑色,这里修改为透明(1.20添加属性)
builder:(_) {
return WillPopScope(
onWillPop: () async {
// 拦截到返回键,证明dialog被手动关闭
_isShowDialog = false;
return Future.value(true);
},
child: buildProgress(),
);
},
);
} catch(e) {
/// 异常原因主要是页面没有build完成就调用Progress。
debugPrint(e.toString());
}
}
}
@override
void showToast(String string) {
Toast.show(string);
}
/// 可自定义Progress
Widget buildProgress() => const ProgressDialog(hintText: '正在加载...');
@override
void didChangeDependencies() {
presenter?.didChangeDependencies();
Log.d('$T ==> didChangeDependencies');
super.didChangeDependencies();
}
@override
void dispose() {
presenter?.dispose();
Log.d('$T ==> dispose');
super.dispose();
}
@override
void deactivate() {
presenter?.deactivate();
Log.d('$T ==> deactivate');
super.deactivate();
}
@override
void didUpdateWidget(T oldWidget) {
presenter?.didUpdateWidgets<T>(oldWidget);
Log.d('$T ==> didUpdateWidgets');
super.didUpdateWidget(oldWidget);
}
@override
void initState() {
Log.d('$T ==> initState');
presenter = createPresenter();
presenter?.view = this;
presenter?.initState();
super.initState();
}
}