From cd2a4d4c8aed1671fc531538d2c7d437059ed237 Mon Sep 17 00:00:00 2001 From: Alex Isaienko Date: Thu, 19 Sep 2024 01:26:22 +0300 Subject: [PATCH 1/3] BuildContext propagation for onGeneratePages --- lib/src/url_router.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/src/url_router.dart b/lib/src/url_router.dart index 71079e8..8c36b88 100644 --- a/lib/src/url_router.dart +++ b/lib/src/url_router.dart @@ -15,7 +15,7 @@ class UrlRouter extends RouterDelegate with ChangeNotifier, PopNavigator /// Should build a stack of pages, based on the current location. /// This is technically optional, as you could decide to implement your /// own custom navigator inside the `builder` - final List> Function(UrlRouter router)? onGeneratePages; + final List> Function(BuildContext context, UrlRouter router)? onGeneratePages; /// Wrap widgets around the [MaterialApp]s [Navigator] widget. /// Primarily used for providing scaffolding like a `SideBar`, `TitleBar` around the page stack. @@ -85,7 +85,7 @@ class UrlRouter extends RouterDelegate with ChangeNotifier, PopNavigator @override Widget build(BuildContext context) { - final pages = onGeneratePages?.call(this) ?? []; + final pages = onGeneratePages?.call(context, this) ?? []; //TODO: Add more use cases for this, figure out if this is really what we want to do, or should we just always return false. bool handlePopPage(Route route, dynamic settings) { if (pages.length > 1 && route.didPop(settings)) { From 7b93500e18b08fa21a713848561f4ca6aae4fc22 Mon Sep 17 00:00:00 2001 From: Alex Isaienko Date: Thu, 19 Sep 2024 01:31:30 +0300 Subject: [PATCH 2/3] BuildContext propagation for onPopPage --- lib/src/url_router.dart | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/src/url_router.dart b/lib/src/url_router.dart index 8c36b88..1c921a2 100644 --- a/lib/src/url_router.dart +++ b/lib/src/url_router.dart @@ -23,7 +23,7 @@ class UrlRouter extends RouterDelegate with ChangeNotifier, PopNavigator final Widget Function(UrlRouter router, Widget navigator)? builder; /// Optionally provide a way for the parent to implement custom `onPopPage` logic. - final PopPageCallback? onPopPage; + final bool Function(BuildContext context, Route route, dynamic result)? onPopPage; /// Optionally invoked just prior to the location being changed. /// Allows a parent class to protect or redirect certain routes. The callback can return the original url to allow the location change, @@ -97,7 +97,9 @@ class UrlRouter extends RouterDelegate with ChangeNotifier, PopNavigator this.context = context; Widget content = Navigator( key: _navKey, - onPopPage: onPopPage ?? handlePopPage, + onPopPage: onPopPage != null + ? (route, settings) => onPopPage!(context, route, settings) + : handlePopPage, pages: pages, ); if (builder != null) { From b4e9a550f81f5f7c81e0696782591d0cdcbc01d7 Mon Sep 17 00:00:00 2001 From: Alex Isaienko Date: Thu, 19 Sep 2024 02:10:53 +0300 Subject: [PATCH 3/3] core_test.dart fix --- test/core_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/core_test.dart b/test/core_test.dart index 974ae1e..c63b9ce 100644 --- a/test/core_test.dart +++ b/test/core_test.dart @@ -14,7 +14,7 @@ UrlRouter getSinglePageRouter([String? initial, OnChangingCallback? onChanging]) url: initial ?? '/', builder: (_, navigator) => Container(child: navigator), onChanging: onChanging, - onGeneratePages: (router) { + onGeneratePages: (context, router) { return [ /// Create a single page that renders the current url MaterialPage(