fluro_navigator.dart
3.29 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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'routers.dart';
/// fluro的路由跳转工具类
class NavigatorUtils {
static void push(BuildContext context, String path,
{bool replace = false, bool clearStack = false, Object? arguments}) {
unfocus();
Routes.router.navigateTo(
context,
path,
replace: replace,
clearStack: clearStack,
transition: TransitionType.native,
routeSettings: RouteSettings(
arguments: arguments,
),
);
}
static void pushResult(
BuildContext context, String path, Function(Object) function,
{bool replace = false, bool clearStack = false, Object? arguments}) {
unfocus();
Routes.router
.navigateTo(
context,
path,
replace: replace,
clearStack: clearStack,
transition: TransitionType.native,
routeSettings: RouteSettings(
arguments: arguments,
),
)
.then((Object? result) {
// 页面返回result为null
if (result == null) {
return;
}
function(result);
}).catchError((dynamic error) {
debugPrint('$error');
});
}
/// 返回
static void goBack(BuildContext context) {
unfocus();
Navigator.pop(context);
}
/// 带参数返回
static void goBackWithParams(BuildContext context, Object result) {
unfocus();
Navigator.pop<Object>(context, result);
}
/// 跳到WebView页
static void goWebViewPage(BuildContext context, String title, String url) {
//fluro 不支持传中文,需转换
push(context,
'${Routes.webViewPage}?title=${Uri.encodeComponent(title)}&url=${Uri.encodeComponent(url)}');
}
static void unfocus() {
// 使用下面的方式,会触发不必要的build。
// FocusScope.of(context).unfocus();
// https://github.com/flutter/flutter/issues/47128#issuecomment-627551073
FocusManager.instance.primaryFocus?.unfocus();
}
///普通打开页面的方法
///[context] 上下文对象
///[targetPage] 目标页面
///[isReplace] 是否替换当前页面 A -B
///[opaque] 是否以背景透明的方式打开页面
static void pushPageByFade({
required BuildContext context,
required Widget targetPage,
bool isReplace = false,
int startMills = 400,
bool opaque = false,
Function(dynamic value)? dismissCallBack,
}) {
PageRoute pageRoute = PageRouteBuilder(
//背景透明 方式打开新的页面
opaque: opaque,
pageBuilder: (BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation) {
return targetPage;
},
transitionDuration: Duration(milliseconds: startMills),
//动画
transitionsBuilder: (BuildContext context, Animation<double> animation,
Animation<double> secondaryAnimation, Widget child) {
return FadeTransition(
opacity: animation,
child: child,
);
},
);
if (isReplace) {
Navigator.of(context).pushReplacement(pageRoute).then((value) {
if (dismissCallBack != null) {
dismissCallBack(value);
}
});
} else {
Navigator.of(context).push(pageRoute).then((value) {
if (dismissCallBack != null) {
dismissCallBack(value);
}
});
}
}
}