feat(routing): 设置入口改分流规则下钻行 + 双形态导航
- settings_page.dart: smartRoute 布尔开关行 → 分流规则下钻行(标题 + 当前模式 pill + chevron),点击 desktop/tablet 切 navViewProvider 内容区下钻,mobile 全屏 push RoutingScreen(与 account_page.dart 的 open() 双形态导航同一范式)。 - navigation_provider.dart: 新增 NavView.routing + kSettingsSubViews 集合(登记 settings 的下钻子页,供 shell backTarget 判断返回 settings 而非 account)。 - desktop_shell.dart/tablet_shell.dart: 内容区 switch 挂 RoutingScreen(embedded: true),backTarget 优先判 kSettingsSubViews → 回 settings。 - settings_ia_test.dart: 追加下钻行断言(标题+模式pill+点击导航到 RoutingScreen)。 - 重录 desktop_settings golden(唯一因本刀布局变化受影响的 golden)。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,7 @@ import '../widgets/account_screens.dart';
|
||||
import '../widgets/content_top_bar.dart';
|
||||
import '../widgets/nav_sidebar.dart';
|
||||
import '../widgets/pangolin_icons.dart';
|
||||
import '../widgets/routing_screen.dart';
|
||||
|
||||
class DesktopShell extends ConsumerWidget {
|
||||
const DesktopShell({super.key});
|
||||
@@ -56,6 +57,7 @@ class DesktopShell extends ConsumerWidget {
|
||||
NavView.orders: t.ordersTitle,
|
||||
NavView.invite: t.inviteTitle,
|
||||
NavView.notifications: t.notifTitle,
|
||||
NavView.routing: t.routingRulesTitle,
|
||||
};
|
||||
|
||||
void go(NavView v) => ref.read(navViewProvider.notifier).state = v;
|
||||
@@ -89,14 +91,18 @@ class DesktopShell extends ConsumerWidget {
|
||||
return InviteScreen(t: t, embedded: true);
|
||||
case NavView.notifications:
|
||||
return NotificationsScreen(t: t, embedded: true);
|
||||
// 设置下钻子页(内容区,顶栏带返回到 settings)
|
||||
case NavView.routing:
|
||||
return const RoutingScreen(embedded: true);
|
||||
}
|
||||
}
|
||||
|
||||
// 子页返回目标:payment → purchase(换方式/失败重试仍在购买语境内);
|
||||
// 其余下钻子页(含 purchase 本身)→ account。
|
||||
// 设置下钻子页 → settings;其余下钻子页(含 purchase 本身)→ account。
|
||||
VoidCallback? backTarget() {
|
||||
if (view == NavView.payment) return () => go(NavView.purchase);
|
||||
if (view == NavView.notifications) return () => go(NavView.account);
|
||||
if (kSettingsSubViews.contains(view)) return () => go(NavView.settings);
|
||||
if (kAccountSubViews.contains(view)) return () => go(NavView.account);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import '../state/navigation_provider.dart';
|
||||
import '../widgets/content_top_bar.dart';
|
||||
import '../widgets/nav_sidebar.dart';
|
||||
import '../widgets/pangolin_icons.dart';
|
||||
import '../widgets/routing_screen.dart';
|
||||
|
||||
class TabletShell extends ConsumerWidget {
|
||||
const TabletShell({super.key});
|
||||
@@ -46,6 +47,7 @@ class TabletShell extends ConsumerWidget {
|
||||
NavView.contact: t.contactTitle,
|
||||
NavView.invite: t.inviteTitle,
|
||||
NavView.notifications: t.notifTitle,
|
||||
NavView.routing: t.routingRulesTitle,
|
||||
};
|
||||
|
||||
void go(NavView v) => ref.read(navViewProvider.notifier).state = v;
|
||||
@@ -64,14 +66,17 @@ class TabletShell extends ConsumerWidget {
|
||||
return const ContactPage();
|
||||
case NavView.notifications:
|
||||
return NotificationsScreen(t: t, embedded: true);
|
||||
case NavView.routing:
|
||||
return const RoutingScreen(embedded: true);
|
||||
default: // account / plans / redeem / devices → 账户(其余下钻在账户页内)
|
||||
return const AccountPage(isWide: true);
|
||||
}
|
||||
}
|
||||
|
||||
// 通知子页返回目标:回账户(镜像桌面 desktop_shell.dart::backTarget)。
|
||||
// 通知子页返回目标:回账户;设置下钻子页 → settings(镜像桌面 desktop_shell.dart::backTarget)。
|
||||
VoidCallback? backTarget() {
|
||||
if (view == NavView.notifications) return () => go(NavView.account);
|
||||
if (kSettingsSubViews.contains(view)) return () => go(NavView.settings);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user