Skip to content

Commit dd55e8a

Browse files
committed
feat: add fromURL and prevURL for RouteSettings
1 parent 594c869 commit dd55e8a

29 files changed

+466
-177
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 4.11.0
2+
3+
- feat: add fromURL and prevURL for RouteSettings
4+
15
## 4.10.0
26

37
- feat: upgrade to flutter 3.19.x

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/NavigationController.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
6161
route.settings.params,
6262
route.settings.animated,
6363
route.fromEntrypoint,
64+
null,
65+
null,
6466
route.fromPageId,
6567
) { }
6668
}
@@ -115,9 +117,11 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
115117
params: T? = null,
116118
animated: Boolean,
117119
fromEntrypoint: String = NAVIGATION_NATIVE_ENTRYPOINT,
120+
fromURL: String? = null,
121+
prevURL: String? = null,
118122
fromPageId: Int = NAVIGATION_ROUTE_PAGE_ID_NONE,
119123
poppedResult: NullableAnyCallback? = null,
120-
result: NullableIntCallback?
124+
result: NullableIntCallback?,
121125
) {
122126
if (routeType != RouteType.NONE) {
123127
result?.invoke(null)
@@ -154,6 +158,8 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
154158
// 序列化参数
155159
val settings = RouteSettings(url, index).also {
156160
it.params = ModuleJsonSerializers.serializeParams(params)
161+
it.fromURL = fromURL
162+
it.prevURL = prevURL ?: ThrioNavigator.lastRoute()?.settings?.url
157163
it.animated = animated
158164
}
159165
val settingsData = hashMapOf<String, Any?>().also {

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/PageObserverChannel.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,22 +77,22 @@ internal class PageObserverChannel constructor(
7777
}
7878

7979
override fun willAppear(routeSettings: RouteSettings) {
80-
val arguments = routeSettings.toArgumentsWithParams(null)
80+
val arguments = routeSettings.toArgumentsWithoutParams()
8181
channel.invokeMethod("willAppear", arguments)
8282
}
8383

8484
override fun didAppear(routeSettings: RouteSettings) {
85-
val arguments = routeSettings.toArgumentsWithParams(null)
85+
val arguments = routeSettings.toArgumentsWithoutParams()
8686
channel.invokeMethod("didAppear", arguments)
8787
}
8888

8989
override fun willDisappear(routeSettings: RouteSettings) {
90-
val arguments = routeSettings.toArgumentsWithParams(null)
90+
val arguments = routeSettings.toArgumentsWithoutParams()
9191
channel.invokeMethod("willDisappear", arguments)
9292
}
9393

9494
override fun didDisappear(routeSettings: RouteSettings) {
95-
val arguments = routeSettings.toArgumentsWithParams(null)
95+
val arguments = routeSettings.toArgumentsWithoutParams()
9696
channel.invokeMethod("didDisappear", arguments)
9797
}
9898
}

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/RouteObserverChannel.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,22 +51,22 @@ internal class RouteObserverChannel constructor(
5151
}
5252

5353
override fun didPush(routeSettings: RouteSettings) {
54-
val arguments = routeSettings.toArgumentsWithParams(null)
54+
val arguments = routeSettings.toArgumentsWithoutParams()
5555
channel.invokeMethod("didPush", arguments)
5656
}
5757

5858
override fun didPop(routeSettings: RouteSettings) {
59-
val arguments = routeSettings.toArgumentsWithParams(null)
59+
val arguments = routeSettings.toArgumentsWithoutParams()
6060
channel.invokeMethod("didPop", arguments)
6161
}
6262

6363
override fun didPopTo(routeSettings: RouteSettings) {
64-
val arguments = routeSettings.toArgumentsWithParams(null)
64+
val arguments = routeSettings.toArgumentsWithoutParams()
6565
channel.invokeMethod("didPopTo", arguments)
6666
}
6767

6868
override fun didRemove(routeSettings: RouteSettings) {
69-
val arguments = routeSettings.toArgumentsWithParams(null)
69+
val arguments = routeSettings.toArgumentsWithoutParams()
7070
channel.invokeMethod("didRemove", arguments)
7171
}
7272

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/RouteReceiveChannel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,15 @@ internal class RouteReceiveChannel(
6666
val url = arguments["url"] as String
6767
val params = arguments["params"]
6868
val animated = arguments["animated"] == true
69+
val fromURL = arguments["fromURL"] as String?
70+
val prevURL = arguments["prevURL"] as String?
6971
NavigationController.Push.push(
7072
url,
7173
params,
7274
animated,
73-
channel.entrypoint
75+
channel.entrypoint,
76+
fromURL,
77+
prevURL,
7478
) {
7579
result(it)
7680
}

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/RouteSettings.kt

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,35 @@ import com.foxsofter.flutter_thrio.module.ModuleJsonDeserializers
2828
data class RouteSettings(val url: String, val index: Int) {
2929

3030
var params: Any? = null
31+
var fromURL: String? = null
32+
var prevURL: String? = null
3133
var animated: Boolean = true
3234
var isNested: Boolean = false
3335

3436
val name get() = "$index $url"
3537

36-
fun toArguments(): Map<String, Any?> = mapOf(
37-
"url" to url,
38-
"index" to index,
39-
"animated" to animated,
40-
"isNested" to isNested,
41-
"params" to params
42-
)
43-
44-
fun toArgumentsWithParams(params: Any?): Map<String, Any?> = when (params) {
45-
null -> mapOf(
38+
fun toArguments(): Map<String, Any?> {
39+
val args = mutableMapOf(
4640
"url" to url,
4741
"index" to index,
4842
"animated" to animated,
49-
"isNested" to isNested
43+
"isNested" to isNested,
44+
"params" to params,
5045
)
51-
else -> mapOf(
46+
if (fromURL?.isNotEmpty() == true) args["fromURL"] = fromURL
47+
if (prevURL?.isNotEmpty() == true) args["prevURL"] = prevURL
48+
return args.toMap()
49+
}
50+
51+
fun toArgumentsWithoutParams(): Map<String, Any?> {
52+
val args = mutableMapOf<String, Any?>(
5253
"url" to url,
5354
"index" to index,
5455
"animated" to animated,
55-
"isNested" to isNested,
56-
"params" to params
5756
)
57+
if (fromURL?.isNotEmpty() == true) args["fromURL"] = fromURL
58+
if (prevURL?.isNotEmpty() == true) args["prevURL"] = prevURL
59+
return args.toMap()
5860
}
5961

6062
fun toArgumentsWith(newUrl: String, newIndex: Int): Map<String, Any?> = mapOf(
@@ -65,7 +67,6 @@ data class RouteSettings(val url: String, val index: Int) {
6567
"newIndex" to newIndex,
6668
)
6769

68-
6970
override fun equals(other: Any?): Boolean {
7071
return other != null && other is RouteSettings && url == other.url && index == other.index
7172
}
@@ -85,9 +86,13 @@ data class RouteSettings(val url: String, val index: Int) {
8586
val params = ModuleJsonDeserializers.deserializeParams(arguments["params"])
8687
val animated =
8788
if (arguments["animated"] != null) arguments["animated"] as Boolean else false
89+
val fromURL = arguments["fromURL"] as String?
90+
val prevURL = arguments["prevURL"] as String?
8891
return RouteSettings(url, index).also {
8992
it.params = params
9093
it.animated = animated
94+
if (fromURL != null) it.fromURL = fromURL
95+
if (prevURL != null) it.prevURL = prevURL
9196
}
9297
}
9398
}

android/src/main/kotlin/com/foxsofter/flutter_thrio/navigator/ThrioNavigator.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,15 @@ object ThrioNavigator {
3434
url: String,
3535
params: T? = null,
3636
animated: Boolean = true,
37+
fromURL: String? = null,
38+
prevURL: String? = null,
3739
poppedResult: NullableAnyCallback? = null,
3840
result: NullableIntCallback = {}
3941
) = NavigationController.Push.push<T>(
4042
url, params, animated,
4143
NAVIGATION_NATIVE_ENTRYPOINT,
44+
fromURL,
45+
prevURL,
4246
NAVIGATION_ROUTE_PAGE_ID_NONE,
4347
poppedResult,
4448
result
@@ -48,11 +52,15 @@ object ThrioNavigator {
4852
fun push(
4953
url: String,
5054
animated: Boolean = true,
55+
fromURL: String? = null,
56+
prevURL: String? = null,
5157
poppedResult: NullableAnyCallback? = null,
5258
result: NullableIntCallback = {}
5359
) = NavigationController.Push.push(
5460
url, null, animated,
5561
NAVIGATION_NATIVE_ENTRYPOINT,
62+
fromURL,
63+
prevURL,
5664
NAVIGATION_ROUTE_PAGE_ID_NONE,
5765
poppedResult,
5866
result

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -426,7 +426,7 @@
426426
CLANG_ENABLE_MODULES = YES;
427427
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
428428
DEFINES_MODULE = YES;
429-
DEVELOPMENT_TEAM = 6J39XG5NG8;
429+
DEVELOPMENT_TEAM = "";
430430
ENABLE_BITCODE = NO;
431431
INFOPLIST_FILE = Runner/Info.plist;
432432
LD_RUNPATH_SEARCH_PATHS = (
@@ -556,7 +556,7 @@
556556
CLANG_ENABLE_MODULES = YES;
557557
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
558558
DEFINES_MODULE = YES;
559-
DEVELOPMENT_TEAM = 6J39XG5NG8;
559+
DEVELOPMENT_TEAM = "";
560560
ENABLE_BITCODE = NO;
561561
INFOPLIST_FILE = Runner/Info.plist;
562562
LD_RUNPATH_SEARCH_PATHS = (
@@ -579,7 +579,7 @@
579579
CLANG_ENABLE_MODULES = YES;
580580
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
581581
DEFINES_MODULE = YES;
582-
DEVELOPMENT_TEAM = 6J39XG5NG8;
582+
DEVELOPMENT_TEAM = "";
583583
ENABLE_BITCODE = NO;
584584
INFOPLIST_FILE = Runner/Info.plist;
585585
LD_RUNPATH_SEARCH_PATHS = (

example/lib/src/biz/biz2/flutter6/flutter6.route_custom_handler.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Future<void> on$RouteCustomHandlerRegister(
1717
params,
1818
animated = true,
1919
result,
20+
fromURL,
2021
}) =>
2122
'good' as TPopParams);
2223
registerFunc(
@@ -27,12 +28,14 @@ Future<void> on$RouteCustomHandlerRegister(
2728
params,
2829
animated = true,
2930
result,
31+
fromURL,
3032
}) =>
3133
ThrioNavigator.push<TParams, TPopParams>(
3234
url: biz.biz1.flutter3.url,
3335
params: params,
3436
animated: animated,
3537
result: result,
38+
fromURL: fromURL,
3639
));
3740

3841
registerFunc('justascheme://open/biz2/home', <TParams, TPopParams>(
@@ -41,6 +44,7 @@ Future<void> on$RouteCustomHandlerRegister(
4144
params,
4245
animated = true,
4346
result,
47+
fromURL,
4448
}) {
4549
result?.call(-1); // 不拦截
4650
return null;
@@ -54,11 +58,13 @@ Future<void> on$RouteCustomHandlerRegister(
5458
params,
5559
animated = true,
5660
result,
61+
fromURL,
5762
}) =>
5863
ThrioNavigator.push<TParams, TPopParams>(
5964
url: biz.biz1.flutter3.url,
6065
params: params,
6166
animated: animated,
6267
result: result,
68+
fromURL: fromURL,
6369
));
6470
}

ios/Classes/Navigator/NavigatorRouteReceiveChannel.m

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ - (void)_onPush {
102102
}
103103
id params = [arguments[@"params"] isKindOfClass:NSNull.class] ? nil : arguments[@"params"];
104104
BOOL animated = [arguments[@"animated"] boolValue];
105+
NSString *fromURL = arguments[@"fromURL"];
106+
NSString *prevURL = arguments[@"prevURL"];
105107
NavigatorVerbose(@"on push: %@", url);
106108
__strong typeof(weakself) strongSelf = weakself;
107109
[ThrioNavigator _pushUrl:url
@@ -113,6 +115,8 @@ - (void)_onPush {
113115
result(idx);
114116
}
115117
}
118+
fromURL:fromURL
119+
prevURL:prevURL
116120
poppedResult:nil];
117121
}];
118122
}

0 commit comments

Comments
 (0)