Showcase

可删除的 Showcase tab 和 purchase-gated developer guides。

Showcase tab 是可删除的 demo catalog。它方便买家检查 starter 的能力,但正式 app 可以删掉它,同时保留核心功能。

提供什么

Surface状态实现
Showcase tabRemovable demofeature/showcase/
Capability catalogRemovable democore/showcase/CapabilityCatalog.kt
Developer guidesRemovable demofeature/guide/
Shell seamsRemovable demo标记为 removable leaf 的代码行

依赖规则

feature/showcase/README.md 中的模块规则是:

Core may not name Showcase. Showcase may name core.

实际含义:

规则含义
core/ 避免 import Showcase删除 Showcase 后,core services、data、UI 和 feature screens 仍然工作
core/showcase/ 属于 leaf它只保存 catalog data,会跟 Showcase tab 一起删除
Showcase 只 launch 现有 screensTodos、upload、refer、paywall、permissions、account security 都保留 canonical homes
Leaf routes 位于 leaf 内ShowcaseRoutes.kt 拥有 Showcase 的 @Serializable destinations

Todos 是边界的好例子。它的 canonical app route 是 Home stack 里的 AppRoutes.Todos。Showcase 只是把它作为第二个 demo entry 推进自己的 nested graph。

Leaf inventory

路径角色
core/showcase/TemplateCapabilityCapabilityCategoryCapabilityStatusCapabilityCatalog
feature/showcase/Catalog screen、nested graph、Showcase routes、bespoke demos
feature/guide/Purchase-gated setup、architecture、feature、deployment guides
src/test/.../core/showcase/Catalog tests
src/test/.../feature/showcase/Route tests
src/test/.../feature/guide/Guide content tests

Catalog 内容

CapabilityCatalog.all 按 Foundation、Authentication、Backend Data、Commerce、Growth、Operations 分组。

CapabilityRoute status说明
ThemingLive demo立即给 sample surface 换色
OnboardingLive demo重播真实 onboarding flow
HapticsLive demo触发各类 haptic helper
GuidesLive demo打开 purchase-gated guide index
Supabase authLive demoSession inspector
Biometric lockDevice-onlyCatalog 中没有直接 route
Account securityLive demo复用 AccountSecurityRoute
TodosLive demo复用 TodosRoute
Storage uploadLive demo复用 UploadRoute
PaywallRequires keys复用 PaywallRoute
Redeem codeRequires keys复用 RedeemCodeScreen
Manage subscriptionRequires keys复用 ManageSubscriptionRoute
Deep linksLive demo通过 app 的 deep-link handler 走真实路由
ReferralsLive demo复用 ReferScreen
Push notificationsDevice-onlyCatalog 中没有直接 route
App ratingLive demo触发 Play In-App Review flow
PermissionsLive demo复用 PermissionsScreen
Update gateConfiguredCatalog 中没有直接 route
ObservabilityRequires keysCatalog 中没有直接 route

代码里的 CapabilityStatus 是 app 内 catalog 的标签。在 hub docs 里,整个 tab 和 bundled guides 都应视为 Removable demo

Nested graph

showcaseGraph(...) 从 shell 的一个 fenced block 中挂载。复用的 feature screens 会被推入 Showcase stack;没有自带 top bar 的 Todos 和 Permissions 会包一层 DetailScaffold

ShowcaseGraph
  -> ShowcaseHome
  -> ShowcaseTheming
  -> ShowcaseOnboarding
  -> ShowcaseHaptics
  -> ShowcaseAuthStatus
  -> ShowcaseAccountSecurity
  -> ShowcaseTodos
  -> ShowcaseUploads
  -> ShowcasePaywall
  -> ShowcaseRedeemCode
  -> ShowcaseManageSubscription
  -> ShowcasePermissions
  -> ShowcaseDeepLinks
  -> ShowcaseRefer
  -> ShowcaseRating
  -> ShowcaseGuideIndex
  -> ShowcaseGuideDocument(id)

删除步骤

这是模板 Showcase README 中验证过的删除路径。

删除 leaf folders 和它们的 tests:

app/src/main/java/com/soarstarter/kotlin/core/showcase/
app/src/main/java/com/soarstarter/kotlin/feature/showcase/
app/src/main/java/com/soarstarter/kotlin/feature/guide/
app/src/test/.../core/showcase/CapabilityCatalogTest.kt
app/src/test/.../feature/showcase/ShowcaseRouteTest.kt
app/src/test/.../feature/guide/GuideContentTest.kt

找到每个 seam:

grep -rn "removable leaf" app/src/main

feature/main/MainShellScreen.kt 中,删除 Showcase imports、ShellTab.Showcase entry 和 route mapping、toShellTab arms、isShowcaseDetail()showChrome 中的 Showcase 条件、DeepLinkDestination.Showcase case、Home 的 onOpenShowcase callback,以及 showcaseGraph(...) mount。

feature/main/AppDrawer.kt 中删除 ShellTab.Showcase drawer row。

feature/home/HomeScreen.kt 中,删除 onOpenShowcase parameters、item("inside") entry、WhatsInsideSectionCategoryTile,以及 Home-local HomeCategory / homeCategories taxonomy copy。保留 TwoColumnGridDemosSection 仍然会用到。

core/deeplink/DeepLinkResolver.ktDeepLinkDestination.kt 中删除 "showcase" / Showcase case。

src/androidTest/.../nav/NavRouteTest.kt 中,删掉 Showcase route round-trip test 和 Showcase deep-link assertions。

可选:从 res/values/strings.xmlres/values-zh/strings.xml 中删掉 showcase_*capability_*tabs_showcase。保留 tabs_todos,因为 Todos 是 core feature。

重新构建:

./gradlew assembleDebug testDebugUnitTest

删除后,tab bar 会从 Home / Component / Showcase / Me 变为 Home / Component / Me。Auth、todos、upload、paywall、refer、notifications、permissions、legal、settings 和 shared components 都会保留。

相关页面

On this page