-
Notifications
You must be signed in to change notification settings - Fork 0
/
loading.dart
107 lines (95 loc) · 2.95 KB
/
loading.dart
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
104
105
106
107
import 'package:flutter/material.dart';
import 'package:bot_toast/bot_toast.dart';
import 'package:flutter_study_app/config/index.dart';
class MyLoading {
static Set dict = Set();
static bool _status = false;
static show(String uri, [String text]) {
dict.add(uri);
if (_status == true || dict.length >= 2) {
return ;
}
_status = true;
BotToast.showCustomLoading(
toastBuilder: (_) => MyCustomLoadingDialog(text)
);
Future.delayed(Duration(milliseconds: MyConfig.timeout), () {
hide();
});
}
static complete(String uri) {
dict.remove(uri);
if (dict.length == 0 && _status == true) {
_status = false;
hide();
}
}
static hide([String text]) {
BotToast.closeAllLoading();
if (text != null) {
err(text);
}
}
static err([String text = '请求失败']) {
BotToast.showText(text: text);
}
}
showMyCustomLoadingDialog(BuildContext context, { int milliseconds = 100, String text, }) {
showDialog(
context: context,
barrierDismissible: true,
builder: (context) {
return MyCustomLoadingDialog(text, milliseconds);
}
);
}
class MyCustomLoadingDialog extends StatelessWidget {
final int milliseconds;
final String text;
MyCustomLoadingDialog([this.text = "加载中...", this.milliseconds = 100]);
@override
Widget build(BuildContext context) {
Duration insetAnimationDuration = Duration(milliseconds: milliseconds);
Curve insetAnimationCurve = Curves.decelerate;
RoundedRectangleBorder _defaultDialogShape = RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(2.0)));
return AnimatedPadding(
padding: MediaQuery.of(context).viewInsets +
const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
duration: insetAnimationDuration,
curve: insetAnimationCurve,
child: MediaQuery.removeViewInsets(
removeLeft: true,
removeTop: true,
removeRight: true,
removeBottom: true,
context: context,
child: Center(
child: SizedBox(
width: 120,
height: 120,
child: Material(
elevation: 24.0,
color: Theme.of(context).dialogBackgroundColor,
type: MaterialType.card,
//在这里修改成我们想要显示的widget就行了,外部的属性跟其他Dialog保持一致
child: new Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(),
Padding(
padding: const EdgeInsets.only(top: 20),
child: Text(text ?? "加载中"),
),
],
),
shape: _defaultDialogShape,
),
),
),
),
);
}
}