From dc0f1194cf3fb665f811346e0e19b1cb445591ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Ckma-n?= <“anasatwork99@gmail.com”> Date: Tue, 4 Aug 2026 18:01:31 +0500 Subject: [PATCH] feat: add set alias to KaiselNavigator --- packages/kaisel_core/lib/kaisel_core.dart | 1 + packages/kaisel_core/lib/src/kaisel_router.dart | 9 +++++++++ packages/kaisel_core/test/kaisel_config_test.dart | 12 ++++++++++++ 3 files changed, 22 insertions(+) diff --git a/packages/kaisel_core/lib/kaisel_core.dart b/packages/kaisel_core/lib/kaisel_core.dart index ec68632..8dd613e 100644 --- a/packages/kaisel_core/lib/kaisel_core.dart +++ b/packages/kaisel_core/lib/kaisel_core.dart @@ -27,6 +27,7 @@ export 'src/kaisel_router.dart' show KaiselActiveFlow, KaiselNavigator, + KaiselNavigatorSet, KaiselRouter, KaiselTransitionCallback; export 'src/kaisel_stack_codec.dart'; diff --git a/packages/kaisel_core/lib/src/kaisel_router.dart b/packages/kaisel_core/lib/src/kaisel_router.dart index b29984f..5ebeaf4 100644 --- a/packages/kaisel_core/lib/src/kaisel_router.dart +++ b/packages/kaisel_core/lib/src/kaisel_router.dart @@ -110,6 +110,15 @@ abstract class KaiselNavigator implements KaiselListenable { bool get replacesHistoryEntry; } +/// Stack-assignment operations for a type-erased [KaiselNavigator]. +extension KaiselNavigatorSet on KaiselNavigator { + /// Replace this navigator's stack with [stack]. + /// + /// This is an assignment-oriented alias for [restoreStack]. Use + /// [restoreStack] when restoring previously captured navigation state. + Future set(List stack) => restoreStack(stack); +} + /// Identity-stable wrapper for a route on the stack. /// /// Two value-equal routes (e.g. `const Home()` pushed twice) still need diff --git a/packages/kaisel_core/test/kaisel_config_test.dart b/packages/kaisel_core/test/kaisel_config_test.dart index 1a71e20..7eb6c9d 100644 --- a/packages/kaisel_core/test/kaisel_config_test.dart +++ b/packages/kaisel_core/test/kaisel_config_test.dart @@ -335,4 +335,16 @@ void main() { expect(r.stack, const [_HomeRoot()]); }); }); + + group('KaiselNavigator.set', () { + test('replaces the stack through the type-erased interface', () async { + final router = KaiselRouter<_Home>(initial: const _HomeRoot()); + addTearDown(router.dispose); + final KaiselNavigator navigator = router; + + await navigator.set(const [_HomeRoot(), _Product('a')]); + + expect(router.stack, const [_HomeRoot(), _Product('a')]); + }); + }); }