Skip to content

Commit 6298015

Browse files
committed
Normalize initial route information in page control
Introduced a static normalize() method in FletRouteInformationProvider to ensure initial and pushed route information have a normalized path. Updated PageControl to use the normalized initial route, improving consistency in route handling.
1 parent ca32bf3 commit 6298015

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

packages/flet/lib/src/controls/page.dart

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,15 @@ class _PageControlState extends State<PageControl> with WidgetsBindingObserver {
8080
_updateMultiViews();
8181

8282
_routeParser = RouteParser();
83-
_routeInformationProvider = FletRouteInformationProvider(
84-
initialRouteInformation: RouteInformation(uri: Uri(path: '/')),
83+
final defaultRouteName =
84+
WidgetsBinding.instance.platformDispatcher.defaultRouteName;
85+
final initialUri =
86+
Uri.tryParse(defaultRouteName) ?? Uri(path: '/');
87+
final initial = FletRouteInformationProvider.normalize(
88+
RouteInformation(uri: initialUri),
8589
);
90+
_routeInformationProvider =
91+
FletRouteInformationProvider(initialRouteInformation: initial);
8692

8793
_routeState = RouteState(_routeParser);
8894
_routeState.addListener(_routeChanged);

packages/flet/lib/src/routing/route_information_provider.dart

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
import 'package:flutter/widgets.dart';
22

33
class FletRouteInformationProvider extends PlatformRouteInformationProvider {
4-
FletRouteInformationProvider({
5-
required super.initialRouteInformation,
6-
});
7-
8-
@override
9-
Future<bool> didPushRouteInformation(RouteInformation routeInformation) {
4+
static RouteInformation normalize(RouteInformation routeInformation) {
105
final uri = routeInformation.uri;
11-
12-
debugPrint("FletRouteInformationProvider.didPushRouteInformation: $uri");
13-
14-
// Convert "flet://flet-host/aaa" -> "/aaa" (keep query/fragment)
15-
final normalized = RouteInformation(
6+
return RouteInformation(
167
uri: Uri(
178
path: uri.path.isEmpty ? '/' : uri.path,
189
query: uri.query,
1910
fragment: uri.fragment,
2011
),
2112
state: routeInformation.state,
2213
);
14+
}
15+
16+
FletRouteInformationProvider({
17+
required super.initialRouteInformation,
18+
});
19+
20+
@override
21+
Future<bool> didPushRouteInformation(RouteInformation routeInformation) {
22+
final normalized = normalize(routeInformation);
23+
debugPrint(
24+
"FletRouteInformationProvider.didPushRouteInformation: ${routeInformation.uri} -> ${normalized.uri}");
2325

2426
// IMPORTANT: returning the result of super ensures this event is "handled"
2527
// (so iOS won't log "Failed to handle route information...").

0 commit comments

Comments
 (0)