part of 'routes.dart'; @TypedGoRoute( name: BrowserRoute.name, path: '/', routes: [ TypedGoRoute(name: 'WebPageRoute', path: 'page/:url'), TypedGoRoute( name: 'SearchRoute', path: 'search/:tabType/:searchText', ), TypedGoRoute(name: 'TorProxyRoute', path: 'tor_proxy'), TypedGoRoute( name: 'ContextMenuRoute', path: 'context_menu', ), TypedGoRoute( name: 'ContainerListRoute', path: 'containers', routes: [ TypedGoRoute( name: 'ContainerCreateRoute', path: 'create', ), TypedGoRoute( name: 'ContainerEditRoute', path: 'edit', ), ], ), ], ) class BrowserRoute extends GoRouteData with _$BrowserRoute { static const name = 'BrowserRoute'; @override Widget build(BuildContext context, GoRouterState state) { return const BrowserScreen(); } } class WebPageRoute extends GoRouteData with _$WebPageRoute { final String url; final WebPageInfo? $extra; const WebPageRoute({required this.url, required this.$extra}); @override Page buildPage(BuildContext context, GoRouterState state) { return DialogPage( builder: (_) => WebPageDialog(url: Uri.parse(url), precachedInfo: $extra), ); } } enum TabType { regular, private } class SearchRoute extends GoRouteData with _$SearchRoute { static const String emptySearchText = ' '; final TabType tabType; //This should be nullable but isnt allowed by go_router final String searchText; const SearchRoute({ required this.tabType, this.searchText = SearchRoute.emptySearchText, }); @override Widget build(BuildContext context, GoRouterState state) { return SearchScreen( tabType: tabType, initialSearchText: (searchText.isEmpty || searchText == emptySearchText) ? null : searchText, ); } } class TorProxyRoute extends GoRouteData with _$TorProxyRoute { @override Widget build(BuildContext context, GoRouterState state) { return const TorProxyScreen(); } } class ContainerListRoute extends GoRouteData with _$ContainerListRoute { @override Widget build(BuildContext context, GoRouterState state) { return const ContainerListScreen(); } } class ContainerEditRoute extends GoRouteData with _$ContainerEditRoute { final ContainerData $extra; ContainerEditRoute(this.$extra); @override Widget build(BuildContext context, GoRouterState state) { return ContainerEditScreen.edit(initialContainer: $extra); } } class ContainerCreateRoute extends GoRouteData with _$ContainerCreateRoute { final ContainerData $extra; ContainerCreateRoute(this.$extra); @override Widget build(BuildContext context, GoRouterState state) { return ContainerEditScreen.create(initialContainer: $extra); } } class ContextMenuRoute extends GoRouteData with _$ContextMenuRoute { final String $extra; const ContextMenuRoute(this.$extra); @override Page buildPage(BuildContext context, GoRouterState state) { return DialogPage( builder: (_) => ContextMenuDialog(hitResult: HitResultJson.fromJson($extra)), ); } }