fix issues with $extra, use query parameter

This commit is contained in:
Fabian Freund
2025-09-27 11:14:42 +02:00
parent e360342a6d
commit 8325748d29
3 changed files with 40 additions and 12 deletions
+3 -3
View File
@@ -80,12 +80,12 @@ class SearchRoute extends GoRouteData with $SearchRoute {
//This should be nullable but isnt allowed by go_router //This should be nullable but isnt allowed by go_router
final String searchText; final String searchText;
final bool $extra; final bool launchedFromIntent;
const SearchRoute({ const SearchRoute({
required this.tabType, required this.tabType,
this.searchText = SearchRoute.emptySearchText, this.searchText = SearchRoute.emptySearchText,
this.$extra = false, this.launchedFromIntent = false,
}); });
@override @override
@@ -95,7 +95,7 @@ class SearchRoute extends GoRouteData with $SearchRoute {
initialSearchText: (searchText.isEmpty || searchText == emptySearchText) initialSearchText: (searchText.isEmpty || searchText == emptySearchText)
? null ? null
: searchText, : searchText,
launchedFromIntent: $extra, launchedFromIntent: launchedFromIntent,
); );
} }
} }
+35 -7
View File
@@ -353,7 +353,13 @@ mixin $SearchRoute on GoRouteData {
tabType: _$TabTypeEnumMap._$fromName(state.pathParameters['tabType']!)!, tabType: _$TabTypeEnumMap._$fromName(state.pathParameters['tabType']!)!,
searchText: searchText:
state.pathParameters['searchText'] ?? SearchRoute.emptySearchText, state.pathParameters['searchText'] ?? SearchRoute.emptySearchText,
$extra: state.extra as bool, launchedFromIntent:
_$convertMapValue(
'launched-from-intent',
state.uri.queryParameters,
_$boolConverter,
) ??
false,
); );
SearchRoute get _self => this as SearchRoute; SearchRoute get _self => this as SearchRoute;
@@ -361,22 +367,24 @@ mixin $SearchRoute on GoRouteData {
@override @override
String get location => GoRouteData.$location( String get location => GoRouteData.$location(
'/search/${Uri.encodeComponent(_$TabTypeEnumMap[_self.tabType]!)}/${Uri.encodeComponent(_self.searchText)}', '/search/${Uri.encodeComponent(_$TabTypeEnumMap[_self.tabType]!)}/${Uri.encodeComponent(_self.searchText)}',
queryParams: {
if (_self.launchedFromIntent != false)
'launched-from-intent': _self.launchedFromIntent.toString(),
},
); );
@override @override
void go(BuildContext context) => context.go(location, extra: _self.$extra); void go(BuildContext context) => context.go(location);
@override @override
Future<T?> push<T>(BuildContext context) => Future<T?> push<T>(BuildContext context) => context.push<T>(location);
context.push<T>(location, extra: _self.$extra);
@override @override
void pushReplacement(BuildContext context) => void pushReplacement(BuildContext context) =>
context.pushReplacement(location, extra: _self.$extra); context.pushReplacement(location);
@override @override
void replace(BuildContext context) => void replace(BuildContext context) => context.replace(location);
context.replace(location, extra: _self.$extra);
} }
const _$TabTypeEnumMap = { const _$TabTypeEnumMap = {
@@ -592,6 +600,26 @@ mixin $OpenSharedContentRoute on GoRouteData {
context.replace(location, extra: _self.$extra); context.replace(location, extra: _self.$extra);
} }
T? _$convertMapValue<T>(
String key,
Map<String, String> map,
T? Function(String) converter,
) {
final value = map[key];
return value == null ? null : converter(value);
}
bool _$boolConverter(String value) {
switch (value) {
case 'true':
return true;
case 'false':
return false;
default:
throw UnsupportedError('Cannot convert "$value" into a bool.');
}
}
extension<T extends Enum> on Map<T, String> { extension<T extends Enum> on Map<T, String> {
T? _$fromName(String? value) => T? _$fromName(String? value) =>
entries.where((element) => element.value == value).firstOrNull?.key; entries.where((element) => element.value == value).firstOrNull?.key;
+2 -2
View File
@@ -99,9 +99,9 @@ class MainApp extends HookConsumerWidget {
ref.read(selectedTabTypeProvider) ?? ref.read(selectedTabTypeProvider) ??
settings.defaultCreateTabType, settings.defaultCreateTabType,
searchText: sharedContent.text, searchText: sharedContent.text,
$extra: true, //launched from intent launchedFromIntent: true, //launched from intent
); );
await router.push(route.location, extra: route.$extra); await router.push(route.location);
} }
} }
}); });