Skip to content

Commit

Permalink
feat: add fromURL and prevURL for RouteSettings
Browse files Browse the repository at this point in the history
  • Loading branch information
foxsofter committed Apr 28, 2024
1 parent 594c869 commit dd55e8a
Show file tree
Hide file tree
Showing 29 changed files with 466 additions and 177 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 4.11.0

- feat: add fromURL and prevURL for RouteSettings

## 4.10.0

- feat: upgrade to flutter 3.19.x
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
route.settings.params,
route.settings.animated,
route.fromEntrypoint,
null,
null,
route.fromPageId,
) { }
}
Expand Down Expand Up @@ -115,9 +117,11 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
params: T? = null,
animated: Boolean,
fromEntrypoint: String = NAVIGATION_NATIVE_ENTRYPOINT,
fromURL: String? = null,
prevURL: String? = null,
fromPageId: Int = NAVIGATION_ROUTE_PAGE_ID_NONE,
poppedResult: NullableAnyCallback? = null,
result: NullableIntCallback?
result: NullableIntCallback?,
) {
if (routeType != RouteType.NONE) {
result?.invoke(null)
Expand Down Expand Up @@ -154,6 +158,8 @@ internal object NavigationController : Application.ActivityLifecycleCallbacks {
// 序列化参数
val settings = RouteSettings(url, index).also {
it.params = ModuleJsonSerializers.serializeParams(params)
it.fromURL = fromURL
it.prevURL = prevURL ?: ThrioNavigator.lastRoute()?.settings?.url
it.animated = animated
}
val settingsData = hashMapOf<String, Any?>().also {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,22 +77,22 @@ internal class PageObserverChannel constructor(
}

override fun willAppear(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("willAppear", arguments)
}

override fun didAppear(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didAppear", arguments)
}

override fun willDisappear(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("willDisappear", arguments)
}

override fun didDisappear(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didDisappear", arguments)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,22 @@ internal class RouteObserverChannel constructor(
}

override fun didPush(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didPush", arguments)
}

override fun didPop(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didPop", arguments)
}

override fun didPopTo(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didPopTo", arguments)
}

override fun didRemove(routeSettings: RouteSettings) {
val arguments = routeSettings.toArgumentsWithParams(null)
val arguments = routeSettings.toArgumentsWithoutParams()
channel.invokeMethod("didRemove", arguments)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,15 @@ internal class RouteReceiveChannel(
val url = arguments["url"] as String
val params = arguments["params"]
val animated = arguments["animated"] == true
val fromURL = arguments["fromURL"] as String?
val prevURL = arguments["prevURL"] as String?
NavigationController.Push.push(
url,
params,
animated,
channel.entrypoint
channel.entrypoint,
fromURL,
prevURL,
) {
result(it)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,33 +28,35 @@ import com.foxsofter.flutter_thrio.module.ModuleJsonDeserializers
data class RouteSettings(val url: String, val index: Int) {

var params: Any? = null
var fromURL: String? = null
var prevURL: String? = null
var animated: Boolean = true
var isNested: Boolean = false

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

fun toArguments(): Map<String, Any?> = mapOf(
"url" to url,
"index" to index,
"animated" to animated,
"isNested" to isNested,
"params" to params
)

fun toArgumentsWithParams(params: Any?): Map<String, Any?> = when (params) {
null -> mapOf(
fun toArguments(): Map<String, Any?> {
val args = mutableMapOf(
"url" to url,
"index" to index,
"animated" to animated,
"isNested" to isNested
"isNested" to isNested,
"params" to params,
)
else -> mapOf(
if (fromURL?.isNotEmpty() == true) args["fromURL"] = fromURL
if (prevURL?.isNotEmpty() == true) args["prevURL"] = prevURL
return args.toMap()
}

fun toArgumentsWithoutParams(): Map<String, Any?> {
val args = mutableMapOf<String, Any?>(
"url" to url,
"index" to index,
"animated" to animated,
"isNested" to isNested,
"params" to params
)
if (fromURL?.isNotEmpty() == true) args["fromURL"] = fromURL
if (prevURL?.isNotEmpty() == true) args["prevURL"] = prevURL
return args.toMap()
}

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


override fun equals(other: Any?): Boolean {
return other != null && other is RouteSettings && url == other.url && index == other.index
}
Expand All @@ -85,9 +86,13 @@ data class RouteSettings(val url: String, val index: Int) {
val params = ModuleJsonDeserializers.deserializeParams(arguments["params"])
val animated =
if (arguments["animated"] != null) arguments["animated"] as Boolean else false
val fromURL = arguments["fromURL"] as String?
val prevURL = arguments["prevURL"] as String?
return RouteSettings(url, index).also {
it.params = params
it.animated = animated
if (fromURL != null) it.fromURL = fromURL
if (prevURL != null) it.prevURL = prevURL
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,15 @@ object ThrioNavigator {
url: String,
params: T? = null,
animated: Boolean = true,
fromURL: String? = null,
prevURL: String? = null,
poppedResult: NullableAnyCallback? = null,
result: NullableIntCallback = {}
) = NavigationController.Push.push<T>(
url, params, animated,
NAVIGATION_NATIVE_ENTRYPOINT,
fromURL,
prevURL,
NAVIGATION_ROUTE_PAGE_ID_NONE,
poppedResult,
result
Expand All @@ -48,11 +52,15 @@ object ThrioNavigator {
fun push(
url: String,
animated: Boolean = true,
fromURL: String? = null,
prevURL: String? = null,
poppedResult: NullableAnyCallback? = null,
result: NullableIntCallback = {}
) = NavigationController.Push.push(
url, null, animated,
NAVIGATION_NATIVE_ENTRYPOINT,
fromURL,
prevURL,
NAVIGATION_ROUTE_PAGE_ID_NONE,
poppedResult,
result
Expand Down
6 changes: 3 additions & 3 deletions example/ios/Runner.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -426,7 +426,7 @@
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 6J39XG5NG8;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
Expand Down Expand Up @@ -556,7 +556,7 @@
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 6J39XG5NG8;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
Expand All @@ -579,7 +579,7 @@
CLANG_ENABLE_MODULES = YES;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = 6J39XG5NG8;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ Future<void> on$RouteCustomHandlerRegister(
params,
animated = true,
result,
fromURL,
}) =>
'good' as TPopParams);
registerFunc(
Expand All @@ -27,12 +28,14 @@ Future<void> on$RouteCustomHandlerRegister(
params,
animated = true,
result,
fromURL,
}) =>
ThrioNavigator.push<TParams, TPopParams>(
url: biz.biz1.flutter3.url,
params: params,
animated: animated,
result: result,
fromURL: fromURL,
));

registerFunc('justascheme://open/biz2/home', <TParams, TPopParams>(
Expand All @@ -41,6 +44,7 @@ Future<void> on$RouteCustomHandlerRegister(
params,
animated = true,
result,
fromURL,
}) {
result?.call(-1); // 不拦截
return null;
Expand All @@ -54,11 +58,13 @@ Future<void> on$RouteCustomHandlerRegister(
params,
animated = true,
result,
fromURL,
}) =>
ThrioNavigator.push<TParams, TPopParams>(
url: biz.biz1.flutter3.url,
params: params,
animated: animated,
result: result,
fromURL: fromURL,
));
}
4 changes: 4 additions & 0 deletions ios/Classes/Navigator/NavigatorRouteReceiveChannel.m
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ - (void)_onPush {
}
id params = [arguments[@"params"] isKindOfClass:NSNull.class] ? nil : arguments[@"params"];
BOOL animated = [arguments[@"animated"] boolValue];
NSString *fromURL = arguments[@"fromURL"];
NSString *prevURL = arguments[@"prevURL"];
NavigatorVerbose(@"on push: %@", url);
__strong typeof(weakself) strongSelf = weakself;
[ThrioNavigator _pushUrl:url
Expand All @@ -113,6 +115,8 @@ - (void)_onPush {
result(idx);
}
}
fromURL:fromURL
prevURL:prevURL
poppedResult:nil];
}];
}
Expand Down
12 changes: 10 additions & 2 deletions ios/Classes/Navigator/NavigatorRouteSettings.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,16 @@ NS_ASSUME_NONNULL_BEGIN
+ (instancetype)settingsWithUrl:(NSString *)url
index:(NSNumber *_Nullable)index
nested:(BOOL)nested
params:(id _Nullable)params;
params:(id _Nullable)params
fromURL:(NSString *_Nullable)fromURL
prevURL:(NSString *_Nullable)prevURL;

- (instancetype)initWithUrl:(NSString *)url
index:(NSNumber *_Nullable)index
nested:(BOOL)nested
params:(id _Nullable)params;
params:(id _Nullable)params
fromURL:(NSString *_Nullable)fromURL
prevURL:(NSString *_Nullable)prevURL;

- (instancetype)init NS_UNAVAILABLE;

Expand All @@ -55,6 +59,10 @@ NS_ASSUME_NONNULL_BEGIN

@property (nonatomic, copy, readonly, nullable) id params;

@property (nonatomic, copy, readonly) NSString *fromURL;

@property (nonatomic, copy, readonly) NSString *prevURL;

- (BOOL)isEqualToRouteSettings:(NavigatorRouteSettings *)other;

@end
Expand Down
Loading

0 comments on commit dd55e8a

Please sign in to comment.