@mison/ag-kit-cn 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agent/.shared/ui-ux-pro-max/data/charts.csv +26 -0
- package/.agent/.shared/ui-ux-pro-max/data/colors.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/icons.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/landing.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/data/products.csv +97 -0
- package/.agent/.shared/ui-ux-pro-max/data/prompts.csv +24 -0
- package/.agent/.shared/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.agent/.shared/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.agent/.shared/ui-ux-pro-max/data/styles.csv +59 -0
- package/.agent/.shared/ui-ux-pro-max/data/typography.csv +58 -0
- package/.agent/.shared/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.agent/.shared/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.agent/.shared/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/core.py +258 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.agent/.shared/ui-ux-pro-max/scripts/search.py +106 -0
- package/.agent/ARCHITECTURE.md +285 -0
- package/.agent/agents/backend-specialist.md +268 -0
- package/.agent/agents/code-archaeologist.md +106 -0
- package/.agent/agents/database-architect.md +225 -0
- package/.agent/agents/debugger.md +225 -0
- package/.agent/agents/devops-engineer.md +242 -0
- package/.agent/agents/documentation-writer.md +104 -0
- package/.agent/agents/explorer-agent.md +73 -0
- package/.agent/agents/frontend-specialist.md +618 -0
- package/.agent/agents/game-developer.md +162 -0
- package/.agent/agents/mobile-developer.md +382 -0
- package/.agent/agents/orchestrator.md +438 -0
- package/.agent/agents/penetration-tester.md +188 -0
- package/.agent/agents/performance-optimizer.md +187 -0
- package/.agent/agents/product-manager.md +112 -0
- package/.agent/agents/product-owner.md +95 -0
- package/.agent/agents/project-planner.md +405 -0
- package/.agent/agents/qa-automation-engineer.md +103 -0
- package/.agent/agents/security-auditor.md +170 -0
- package/.agent/agents/seo-specialist.md +111 -0
- package/.agent/agents/test-engineer.md +158 -0
- package/.agent/mcp_config.json +12 -0
- package/.agent/rules/GEMINI.md +273 -0
- package/.agent/scripts/auto_preview.py +148 -0
- package/.agent/scripts/checklist.py +217 -0
- package/.agent/scripts/session_manager.py +120 -0
- package/.agent/scripts/verify_all.py +327 -0
- package/.agent/skills/api-patterns/SKILL.md +84 -0
- package/.agent/skills/api-patterns/api-style.md +42 -0
- package/.agent/skills/api-patterns/auth.md +24 -0
- package/.agent/skills/api-patterns/documentation.md +26 -0
- package/.agent/skills/api-patterns/graphql.md +41 -0
- package/.agent/skills/api-patterns/rate-limiting.md +31 -0
- package/.agent/skills/api-patterns/response.md +37 -0
- package/.agent/skills/api-patterns/rest.md +40 -0
- package/.agent/skills/api-patterns/scripts/api_validator.py +211 -0
- package/.agent/skills/api-patterns/security-testing.md +122 -0
- package/.agent/skills/api-patterns/trpc.md +41 -0
- package/.agent/skills/api-patterns/versioning.md +22 -0
- package/.agent/skills/app-builder/SKILL.md +75 -0
- package/.agent/skills/app-builder/agent-coordination.md +74 -0
- package/.agent/skills/app-builder/feature-building.md +53 -0
- package/.agent/skills/app-builder/project-detection.md +34 -0
- package/.agent/skills/app-builder/scaffolding.md +118 -0
- package/.agent/skills/app-builder/tech-stack.md +40 -0
- package/.agent/skills/app-builder/templates/SKILL.md +39 -0
- package/.agent/skills/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/.agent/skills/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/.agent/skills/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/.agent/skills/app-builder/templates/nextjs-fullstack/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-saas/TEMPLATE.md +122 -0
- package/.agent/skills/app-builder/templates/nextjs-static/TEMPLATE.md +169 -0
- package/.agent/skills/app-builder/templates/nuxt-app/TEMPLATE.md +134 -0
- package/.agent/skills/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/.agent/skills/app-builder/templates/react-native-app/TEMPLATE.md +119 -0
- package/.agent/skills/architecture/SKILL.md +57 -0
- package/.agent/skills/architecture/context-discovery.md +43 -0
- package/.agent/skills/architecture/examples.md +94 -0
- package/.agent/skills/architecture/pattern-selection.md +68 -0
- package/.agent/skills/architecture/patterns-reference.md +50 -0
- package/.agent/skills/architecture/trade-off-analysis.md +77 -0
- package/.agent/skills/bash-linux/SKILL.md +201 -0
- package/.agent/skills/behavioral-modes/SKILL.md +264 -0
- package/.agent/skills/brainstorming/SKILL.md +164 -0
- package/.agent/skills/brainstorming/dynamic-questioning.md +359 -0
- package/.agent/skills/clean-code/SKILL.md +200 -0
- package/.agent/skills/code-review-checklist/SKILL.md +125 -0
- package/.agent/skills/database-design/SKILL.md +54 -0
- package/.agent/skills/database-design/database-selection.md +43 -0
- package/.agent/skills/database-design/indexing.md +39 -0
- package/.agent/skills/database-design/migrations.md +50 -0
- package/.agent/skills/database-design/optimization.md +36 -0
- package/.agent/skills/database-design/orm-selection.md +30 -0
- package/.agent/skills/database-design/schema-design.md +56 -0
- package/.agent/skills/database-design/scripts/schema_validator.py +172 -0
- package/.agent/skills/deployment-procedures/SKILL.md +241 -0
- package/.agent/skills/doc.md +177 -0
- package/.agent/skills/documentation-templates/SKILL.md +194 -0
- package/.agent/skills/frontend-design/SKILL.md +418 -0
- package/.agent/skills/frontend-design/animation-guide.md +331 -0
- package/.agent/skills/frontend-design/color-system.md +307 -0
- package/.agent/skills/frontend-design/decision-trees.md +418 -0
- package/.agent/skills/frontend-design/motion-graphics.md +306 -0
- package/.agent/skills/frontend-design/scripts/accessibility_checker.py +183 -0
- package/.agent/skills/frontend-design/scripts/ux_audit.py +727 -0
- package/.agent/skills/frontend-design/typography-system.md +345 -0
- package/.agent/skills/frontend-design/ux-psychology.md +1118 -0
- package/.agent/skills/frontend-design/visual-effects.md +383 -0
- package/.agent/skills/game-development/2d-games/SKILL.md +119 -0
- package/.agent/skills/game-development/3d-games/SKILL.md +135 -0
- package/.agent/skills/game-development/SKILL.md +167 -0
- package/.agent/skills/game-development/game-art/SKILL.md +185 -0
- package/.agent/skills/game-development/game-audio/SKILL.md +190 -0
- package/.agent/skills/game-development/game-design/SKILL.md +129 -0
- package/.agent/skills/game-development/mobile-games/SKILL.md +108 -0
- package/.agent/skills/game-development/multiplayer/SKILL.md +132 -0
- package/.agent/skills/game-development/pc-games/SKILL.md +144 -0
- package/.agent/skills/game-development/vr-ar/SKILL.md +123 -0
- package/.agent/skills/game-development/web-games/SKILL.md +150 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +155 -0
- package/.agent/skills/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/.agent/skills/i18n-localization/SKILL.md +154 -0
- package/.agent/skills/i18n-localization/scripts/i18n_checker.py +241 -0
- package/.agent/skills/intelligent-routing/SKILL.md +335 -0
- package/.agent/skills/lint-and-validate/SKILL.md +44 -0
- package/.agent/skills/lint-and-validate/scripts/lint_runner.py +184 -0
- package/.agent/skills/lint-and-validate/scripts/type_coverage.py +173 -0
- package/.agent/skills/mcp-builder/SKILL.md +176 -0
- package/.agent/skills/mobile-design/SKILL.md +394 -0
- package/.agent/skills/mobile-design/decision-trees.md +516 -0
- package/.agent/skills/mobile-design/mobile-backend.md +491 -0
- package/.agent/skills/mobile-design/mobile-color-system.md +420 -0
- package/.agent/skills/mobile-design/mobile-debugging.md +122 -0
- package/.agent/skills/mobile-design/mobile-design-thinking.md +355 -0
- package/.agent/skills/mobile-design/mobile-navigation.md +458 -0
- package/.agent/skills/mobile-design/mobile-performance.md +767 -0
- package/.agent/skills/mobile-design/mobile-testing.md +356 -0
- package/.agent/skills/mobile-design/mobile-typography.md +432 -0
- package/.agent/skills/mobile-design/platform-android.md +666 -0
- package/.agent/skills/mobile-design/platform-ios.md +561 -0
- package/.agent/skills/mobile-design/scripts/mobile_audit.py +670 -0
- package/.agent/skills/mobile-design/touch-psychology.md +537 -0
- package/.agent/skills/nextjs-react-expert/1-async-eliminating-waterfalls.md +311 -0
- package/.agent/skills/nextjs-react-expert/2-bundle-bundle-size-optimization.md +241 -0
- package/.agent/skills/nextjs-react-expert/3-server-server-side-performance.md +489 -0
- package/.agent/skills/nextjs-react-expert/4-client-client-side-data-fetching.md +263 -0
- package/.agent/skills/nextjs-react-expert/5-rerender-re-render-optimization.md +581 -0
- package/.agent/skills/nextjs-react-expert/6-rendering-rendering-performance.md +431 -0
- package/.agent/skills/nextjs-react-expert/7-js-javascript-performance.md +683 -0
- package/.agent/skills/nextjs-react-expert/8-advanced-advanced-patterns.md +149 -0
- package/.agent/skills/nextjs-react-expert/SKILL.md +286 -0
- package/.agent/skills/nextjs-react-expert/scripts/convert_rules.py +222 -0
- package/.agent/skills/nextjs-react-expert/scripts/react_performance_checker.py +252 -0
- package/.agent/skills/nodejs-best-practices/SKILL.md +333 -0
- package/.agent/skills/parallel-agents/SKILL.md +194 -0
- package/.agent/skills/performance-profiling/SKILL.md +149 -0
- package/.agent/skills/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/.agent/skills/plan-writing/SKILL.md +152 -0
- package/.agent/skills/powershell-windows/SKILL.md +166 -0
- package/.agent/skills/python-patterns/SKILL.md +441 -0
- package/.agent/skills/red-team-tactics/SKILL.md +203 -0
- package/.agent/skills/rust-pro/SKILL.md +190 -0
- package/.agent/skills/seo-fundamentals/SKILL.md +135 -0
- package/.agent/skills/seo-fundamentals/scripts/seo_checker.py +215 -0
- package/.agent/skills/server-management/SKILL.md +161 -0
- package/.agent/skills/systematic-debugging/SKILL.md +114 -0
- package/.agent/skills/tailwind-patterns/SKILL.md +269 -0
- package/.agent/skills/tdd-workflow/SKILL.md +149 -0
- package/.agent/skills/testing-patterns/SKILL.md +178 -0
- package/.agent/skills/testing-patterns/scripts/test_runner.py +219 -0
- package/.agent/skills/vulnerability-scanner/SKILL.md +276 -0
- package/.agent/skills/vulnerability-scanner/checklists.md +131 -0
- package/.agent/skills/vulnerability-scanner/scripts/security_scan.py +459 -0
- package/.agent/skills/web-design-guidelines/SKILL.md +57 -0
- package/.agent/skills/webapp-testing/SKILL.md +187 -0
- package/.agent/skills/webapp-testing/scripts/playwright_runner.py +173 -0
- package/.agent/workflows/brainstorm.md +113 -0
- package/.agent/workflows/create.md +59 -0
- package/.agent/workflows/debug.md +103 -0
- package/.agent/workflows/deploy.md +176 -0
- package/.agent/workflows/enhance.md +63 -0
- package/.agent/workflows/orchestrate.md +242 -0
- package/.agent/workflows/plan.md +89 -0
- package/.agent/workflows/preview.md +80 -0
- package/.agent/workflows/restore-localize-compat.md +525 -0
- package/.agent/workflows/status.md +86 -0
- package/.agent/workflows/test.md +144 -0
- package/.agent/workflows/ui-ux-pro-max.md +295 -0
- package/AGENT_FLOW.md +609 -0
- package/CHANGELOG.md +68 -0
- package/LICENSE +21 -0
- package/README.md +260 -0
- package/bin/adapters/base.js +63 -0
- package/bin/adapters/codex.js +391 -0
- package/bin/adapters/gemini.js +137 -0
- package/bin/ag-kit.js +1336 -0
- package/bin/core/builder.js +80 -0
- package/bin/core/generator.js +59 -0
- package/bin/core/resource-loader.js +64 -0
- package/bin/core/transformer.js +208 -0
- package/bin/interactive.js +65 -0
- package/bin/utils/atomic-writer.js +97 -0
- package/bin/utils/git-helper.js +68 -0
- package/bin/utils/managed-block.js +65 -0
- package/bin/utils/manifest.js +241 -0
- package/bin/utils.js +82 -0
- package/docs/codex-rules-template.md +36 -0
- package/docs/mapping-spec.md +68 -0
- package/docs/multi-target-adapter.md +80 -0
- package/docs/official/README.md +53 -0
- package/docs/official/antigravity/agent-modes-settings.md +64 -0
- package/docs/official/antigravity/rules-workflows.md +96 -0
- package/docs/official/antigravity/skills.md +147 -0
- package/docs/official/codex/agents-md.md +119 -0
- package/docs/official/codex/config-advanced.md +358 -0
- package/docs/official/codex/config-basic.md +141 -0
- package/docs/official/codex/config-reference.md +223 -0
- package/docs/official/codex/config-sample.md +216 -0
- package/docs/official/codex/mcp.md +107 -0
- package/docs/official/codex/rules.md +79 -0
- package/docs/official/codex/skills.md +114 -0
- package/docs/official/sources-index.md +32 -0
- package/docs/operations.md +145 -0
- package/docs/terminology-style-guide.md +69 -0
- package/package.json +51 -0
- package/scripts/postinstall-check.js +112 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
# 移动端导航参考(Mobile Navigation Reference)
|
|
2
|
+
|
|
3
|
+
> 导航模式、深度链接(Deep Linking)、返回行为处理,以及 Tab/Stack/Drawer 的选择。
|
|
4
|
+
> **导航是 App 的骨架——做错了,所有体验都会显得“坏掉了”。**
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 导航选择决策树(Navigation Selection Decision Tree)
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
你是什么类型的应用?
|
|
12
|
+
│
|
|
13
|
+
├── 3-5 个顶层入口(同等重要)
|
|
14
|
+
│ └── ✅ Tab Bar / Bottom Navigation(底部标签)
|
|
15
|
+
│ 示例:社交、E-commerce、电商工具
|
|
16
|
+
│
|
|
17
|
+
├── 深层级内容(逐级深入)
|
|
18
|
+
│ └── ✅ Stack Navigation(堆栈导航)
|
|
19
|
+
│ 示例:设置、邮箱文件夹
|
|
20
|
+
│
|
|
21
|
+
├── 顶层入口很多(>5)
|
|
22
|
+
│ └── ✅ Drawer Navigation(抽屉导航)
|
|
23
|
+
│ 示例:Gmail、复杂企业应用
|
|
24
|
+
│
|
|
25
|
+
├── 单一线性流程
|
|
26
|
+
│ └── ✅ 仅使用 Stack(向导/引导)
|
|
27
|
+
│ 示例:结算、首次设置流程
|
|
28
|
+
│
|
|
29
|
+
└── 平板/折叠屏
|
|
30
|
+
└── ✅ Navigation Rail + List-Detail
|
|
31
|
+
示例:iPad 邮件、笔记
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 2. Tab Bar 导航(Tab Bar Navigation)
|
|
37
|
+
|
|
38
|
+
### 何时使用(When to Use)
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
✅ 适合 Tab Bar 的情况:
|
|
42
|
+
├── 3-5 个顶层目的地
|
|
43
|
+
├── 目的地同等重要
|
|
44
|
+
├── 用户频繁切换
|
|
45
|
+
├── 每个 Tab 维护独立的导航栈
|
|
46
|
+
└── App 使用时长较短、碎片化
|
|
47
|
+
|
|
48
|
+
❌ 不适合 Tab Bar 的情况:
|
|
49
|
+
├── 顶层入口超过 5 个
|
|
50
|
+
├── 目的地存在明确层级
|
|
51
|
+
├── 各 Tab 使用频率严重不均
|
|
52
|
+
└── 内容需要按顺序流转
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Tab Bar 最佳实践(Tab Bar Best Practices)
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
iOS Tab Bar:
|
|
59
|
+
├── 高度:49pt(含 Home 指示条为 83pt)
|
|
60
|
+
├── 最大项数:5
|
|
61
|
+
├── 图标:SF Symbols,25×25pt
|
|
62
|
+
├── 文本:始终显示(无障碍)
|
|
63
|
+
├── 激活态:Tint 颜色
|
|
64
|
+
|
|
65
|
+
Android Bottom Navigation:
|
|
66
|
+
├── 高度:80dp
|
|
67
|
+
├── 最大项数:5(理想 3-5)
|
|
68
|
+
├── 图标:Material Symbols,24dp
|
|
69
|
+
├── 文本:始终显示
|
|
70
|
+
├── 激活态:Pill 形状 + 填充图标
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Tab 状态保留(Tab State Preservation)
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
规则:每个 Tab 维护独立的导航栈。
|
|
77
|
+
|
|
78
|
+
用户路径:
|
|
79
|
+
1. Home Tab → 进入商品详情 → 加入购物车
|
|
80
|
+
2. 切到 Profile Tab
|
|
81
|
+
3. 再切回 Home Tab
|
|
82
|
+
→ 应回到“加入购物车”页面,而非 Home 根页面
|
|
83
|
+
|
|
84
|
+
实现:
|
|
85
|
+
├── React Navigation:每个 Tab 内独立 Navigator
|
|
86
|
+
├── Flutter:使用 IndexedStack 保持状态
|
|
87
|
+
└── 切换 Tab 不得重置栈
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 3. Stack 导航(Stack Navigation)
|
|
93
|
+
|
|
94
|
+
### 核心概念(Core Concepts)
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
堆栈模型:卡片一层层叠加
|
|
98
|
+
|
|
99
|
+
Push:把新页面压栈
|
|
100
|
+
Pop:移除顶部页面(返回)
|
|
101
|
+
Replace:替换当前页面
|
|
102
|
+
Reset:清空栈并设置新根
|
|
103
|
+
|
|
104
|
+
视觉:新页面从右侧滑入(LTR)
|
|
105
|
+
返回:页面向右滑出
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Stack 导航模式(Stack Navigation Patterns)
|
|
109
|
+
|
|
110
|
+
| 模式(Pattern) | 场景(Use Case) | 实现(Implementation) |
|
|
111
|
+
|-----------------|------------------|------------------------|
|
|
112
|
+
| **Simple Stack** | 线性流程 | 每步 Push |
|
|
113
|
+
| **Nested Stack** | 分区内子导航 | Tab 内部 Stack |
|
|
114
|
+
| **Modal Stack** | 聚焦任务 | 以 Modal 形式呈现 |
|
|
115
|
+
| **Auth Stack** | 登录/主流程切换 | 条件 Root |
|
|
116
|
+
|
|
117
|
+
### 返回键处理(Back Button Handling)
|
|
118
|
+
|
|
119
|
+
```
|
|
120
|
+
iOS:
|
|
121
|
+
├── 从左侧边缘滑返回(系统)
|
|
122
|
+
├── 导航栏返回按钮(可选)
|
|
123
|
+
├── 交互式返回手势
|
|
124
|
+
└── 无充分理由不要屏蔽滑动返回
|
|
125
|
+
|
|
126
|
+
Android:
|
|
127
|
+
├── 系统返回键/手势
|
|
128
|
+
├── 工具栏 Up 按钮(可选,深层页面)
|
|
129
|
+
├── 预测性返回动画(Android 14+)
|
|
130
|
+
└── 必须正确处理返回(Activity/Fragment)
|
|
131
|
+
|
|
132
|
+
跨平台通用规则:
|
|
133
|
+
├── 返回永远是“向上返回栈”
|
|
134
|
+
├── 不要劫持返回去做别的事
|
|
135
|
+
├── 丢弃未保存数据前需二次确认
|
|
136
|
+
└── 深度链接进入必须可完整返回
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 4. Drawer 导航(Drawer Navigation)
|
|
142
|
+
|
|
143
|
+
### 何时使用(When to Use)
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
✅ 适合 Drawer 的情况:
|
|
147
|
+
├── 顶层入口超过 5 个
|
|
148
|
+
├── 有一部分入口不常访问
|
|
149
|
+
├── 功能复杂且模块多
|
|
150
|
+
├── 导航需要展示品牌/用户信息
|
|
151
|
+
└── 平板/大屏可做常驻 Drawer
|
|
152
|
+
|
|
153
|
+
❌ 不适合 Drawer 的情况:
|
|
154
|
+
├── 入口 5 个以内(优先 Tabs)
|
|
155
|
+
├── 所有入口同等重要
|
|
156
|
+
├── 以移动端为主的轻量应用
|
|
157
|
+
└── 强依赖“可发现性”(Drawer 默认隐藏)
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### Drawer 模式(Drawer Patterns)
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
Modal Drawer:
|
|
164
|
+
├── 覆盖内容(背后有遮罩)
|
|
165
|
+
├── 边缘滑动打开
|
|
166
|
+
├── 汉堡按钮(☰)触发
|
|
167
|
+
└── 移动端最常见
|
|
168
|
+
|
|
169
|
+
Permanent Drawer:
|
|
170
|
+
├── 始终可见(大屏)
|
|
171
|
+
├── 内容区域右移
|
|
172
|
+
├── 适合生产力应用
|
|
173
|
+
└── 平板/桌面
|
|
174
|
+
|
|
175
|
+
Navigation Rail(Android):
|
|
176
|
+
├── 窄竖栏
|
|
177
|
+
├── 图标 + 可选文本
|
|
178
|
+
├── 适配竖屏平板
|
|
179
|
+
└── 宽度 80dp
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 5. Modal 导航(Modal Navigation)
|
|
185
|
+
|
|
186
|
+
### Modal vs Push
|
|
187
|
+
|
|
188
|
+
```
|
|
189
|
+
PUSH(Stack): MODAL:
|
|
190
|
+
├── 横向滑入 ├── 纵向上滑(sheet)
|
|
191
|
+
├── 层级内流转 ├── 独立任务
|
|
192
|
+
├── 返回回到上一级 ├── 关闭(X)回到原处
|
|
193
|
+
├── 共享导航上下文 ├── 独立导航上下文
|
|
194
|
+
└── “向内深入” └── “聚焦完成任务”
|
|
195
|
+
|
|
196
|
+
适合用 MODAL 的场景:
|
|
197
|
+
├── 创建新内容
|
|
198
|
+
├── 设置/偏好
|
|
199
|
+
├── 完成交易
|
|
200
|
+
├── 自包含流程
|
|
201
|
+
├── 快速操作
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Modal 类型(Modal Types)
|
|
205
|
+
|
|
206
|
+
| 类型(Type) | iOS | Android | 场景(Use Case) |
|
|
207
|
+
|-------------|-----|---------|------------------|
|
|
208
|
+
| **Sheet** | `.sheet` | Bottom Sheet | 快速任务 |
|
|
209
|
+
| **Full Screen** | `.fullScreenCover` | 全屏 Activity | 复杂表单 |
|
|
210
|
+
| **Alert** | Alert | Dialog | 确认操作 |
|
|
211
|
+
| **Action Sheet** | Action Sheet | Menu/Bottom Sheet | 选项选择 |
|
|
212
|
+
|
|
213
|
+
### Modal 关闭方式(Modal Dismissal)
|
|
214
|
+
|
|
215
|
+
```
|
|
216
|
+
用户期望的关闭方式:
|
|
217
|
+
├── 点击 X / Close
|
|
218
|
+
├── 下拉关闭(sheet)
|
|
219
|
+
├── 点击遮罩(非关键任务)
|
|
220
|
+
├── Android 系统返回
|
|
221
|
+
├── 硬件返回键(旧 Android)
|
|
222
|
+
|
|
223
|
+
规则:只有在“未保存数据”时才允许阻止关闭。
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 6. 深度链接(Deep Linking)
|
|
229
|
+
|
|
230
|
+
### 为什么从第一天就要做 Deep Links
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
Deep links 能支持:
|
|
234
|
+
├── 推送通知跳转
|
|
235
|
+
├── 内容分享
|
|
236
|
+
├── 营销活动
|
|
237
|
+
├── Spotlight/Search 集成
|
|
238
|
+
├── Widget 跳转
|
|
239
|
+
├── 外部应用集成
|
|
240
|
+
|
|
241
|
+
后期补做会非常痛苦:
|
|
242
|
+
├── 需要重构导航
|
|
243
|
+
├── 屏幕依赖关系不清晰
|
|
244
|
+
├── 参数传递复杂
|
|
245
|
+
└── 必须从一开始规划
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### URL 结构(URL Structure)
|
|
249
|
+
|
|
250
|
+
```
|
|
251
|
+
Scheme://host/path?params
|
|
252
|
+
|
|
253
|
+
示例:
|
|
254
|
+
├── myapp://product/123
|
|
255
|
+
├── https://myapp.com/product/123(Universal/App Link)
|
|
256
|
+
├── myapp://checkout?promo=SAVE20
|
|
257
|
+
├── myapp://tab/profile/settings
|
|
258
|
+
|
|
259
|
+
层级应与导航一致:
|
|
260
|
+
├── myapp://home
|
|
261
|
+
├── myapp://home/product/123
|
|
262
|
+
├── myapp://home/product/123/reviews
|
|
263
|
+
└── URL path = navigation path
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### 深度链接导航规则(Deep Link Navigation Rules)
|
|
267
|
+
|
|
268
|
+
```
|
|
269
|
+
1. 全栈构建(FULL STACK CONSTRUCTION)
|
|
270
|
+
myapp://product/123 应当:
|
|
271
|
+
├── Home 作为栈根
|
|
272
|
+
├── Product 页面压到顶部
|
|
273
|
+
└── 返回键回到 Home
|
|
274
|
+
|
|
275
|
+
2. 鉴权意识(AUTHENTICATION AWARENESS)
|
|
276
|
+
若深链需要登录:
|
|
277
|
+
├── 记录目标页面
|
|
278
|
+
├── 跳转登录
|
|
279
|
+
├── 登录后回到目标页面
|
|
280
|
+
|
|
281
|
+
3. 无效链接(INVALID LINKS)
|
|
282
|
+
目标不存在时:
|
|
283
|
+
├── 回退到兜底页面(home)
|
|
284
|
+
├── 显示错误提示
|
|
285
|
+
└── 不可崩溃或白屏
|
|
286
|
+
|
|
287
|
+
4. 有状态导航(STATEFUL NAVIGATION)
|
|
288
|
+
活跃会话中收到深链:
|
|
289
|
+
├── 不要清空当前栈
|
|
290
|
+
├── 直接压栈,或
|
|
291
|
+
├── 询问用户是否跳转
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 7. 导航状态持久化(Navigation State Persistence)
|
|
297
|
+
|
|
298
|
+
### 需要持久化的内容(What to Persist)
|
|
299
|
+
|
|
300
|
+
```
|
|
301
|
+
应该持久化:
|
|
302
|
+
├── 当前 Tab 选择
|
|
303
|
+
├── 列表滚动位置
|
|
304
|
+
├── 表单草稿
|
|
305
|
+
├── 最近导航栈
|
|
306
|
+
└── 用户偏好
|
|
307
|
+
|
|
308
|
+
不应持久化:
|
|
309
|
+
├── Modal 状态(对话框)
|
|
310
|
+
├── 临时 UI 状态
|
|
311
|
+
├── 过期数据(返回时应刷新)
|
|
312
|
+
├── 认证状态(用安全存储)
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
### 实现示例(Implementation)
|
|
316
|
+
|
|
317
|
+
```javascript
|
|
318
|
+
// React Navigation - State Persistence
|
|
319
|
+
const [isReady, setIsReady] = useState(false);
|
|
320
|
+
const [initialState, setInitialState] = useState();
|
|
321
|
+
|
|
322
|
+
useEffect(() => {
|
|
323
|
+
const loadState = async () => {
|
|
324
|
+
const savedState = await AsyncStorage.getItem('NAV_STATE');
|
|
325
|
+
if (savedState) setInitialState(JSON.parse(savedState));
|
|
326
|
+
setIsReady(true);
|
|
327
|
+
};
|
|
328
|
+
loadState();
|
|
329
|
+
}, []);
|
|
330
|
+
|
|
331
|
+
const handleStateChange = (state) => {
|
|
332
|
+
AsyncStorage.setItem('NAV_STATE', JSON.stringify(state));
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
<NavigationContainer
|
|
336
|
+
initialState={initialState}
|
|
337
|
+
onStateChange={handleStateChange}
|
|
338
|
+
>
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## 8. 过渡动画(Transition Animations)
|
|
344
|
+
|
|
345
|
+
### 平台默认(Platform Defaults)
|
|
346
|
+
|
|
347
|
+
```
|
|
348
|
+
iOS Transitions:
|
|
349
|
+
├── Push:从右滑入
|
|
350
|
+
├── Modal:从底部上滑(sheet)或淡入
|
|
351
|
+
├── Tab 切换:淡入淡出
|
|
352
|
+
├── 交互式:滑动返回
|
|
353
|
+
|
|
354
|
+
Android Transitions:
|
|
355
|
+
├── Push:淡入 + 右滑
|
|
356
|
+
├── Modal:从底部上滑
|
|
357
|
+
├── Tab 切换:淡入淡出或无动画
|
|
358
|
+
├── Shared element:Hero 动画
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### 自定义过渡(Custom Transitions)
|
|
362
|
+
|
|
363
|
+
```
|
|
364
|
+
适合自定义的情况:
|
|
365
|
+
├── 需要匹配品牌调性
|
|
366
|
+
├── 需要共享元素关联
|
|
367
|
+
├── 需要特殊揭示效果
|
|
368
|
+
└── 必须克制,<300ms
|
|
369
|
+
|
|
370
|
+
适合默认的情况:
|
|
371
|
+
├── 大多数场景
|
|
372
|
+
├── 标准 drill-down
|
|
373
|
+
├── 平台一致性优先
|
|
374
|
+
└── 性能敏感路径
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### 共享元素过渡(Shared Element Transitions)
|
|
378
|
+
|
|
379
|
+
```
|
|
380
|
+
在两个屏之间建立元素连结:
|
|
381
|
+
|
|
382
|
+
Screen A:产品卡片图片
|
|
383
|
+
↓(点击)
|
|
384
|
+
Screen B:同一图片的详情放大
|
|
385
|
+
|
|
386
|
+
图片从卡片位置动画到详情位置。
|
|
387
|
+
|
|
388
|
+
实现方式:
|
|
389
|
+
├── React Navigation:shared element 库
|
|
390
|
+
├── Flutter:Hero widget
|
|
391
|
+
├── SwiftUI:matchedGeometryEffect
|
|
392
|
+
└── Compose:Shared element transitions
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## 9. 导航反模式(Navigation Anti-Patterns)
|
|
398
|
+
|
|
399
|
+
### ❌ 导航“罪状”(Navigation Sins)
|
|
400
|
+
|
|
401
|
+
| 反模式(Anti-Pattern) | 问题(Problem) | 解决方案(Solution) |
|
|
402
|
+
|------------------------|----------------|----------------------|
|
|
403
|
+
| **返回不一致** | 用户迷失,不可预测 | 始终 pop stack |
|
|
404
|
+
| **隐藏式导航** | 功能不可发现 | 明显 Tabs/Drawer 触发点 |
|
|
405
|
+
| **过深层级** | 用户迷路 | 最多 3-4 层 + 面包屑 |
|
|
406
|
+
| **破坏滑动返回** | iOS 用户不适 | 不要覆盖手势 |
|
|
407
|
+
| **无深度链接** | 不能分享/通知差 | 从一开始规划 |
|
|
408
|
+
| **Tab 栈被重置** | 切换时丢失上下文 | 保持 Tab 状态 |
|
|
409
|
+
| **主流程用 Modal** | 无法回溯 | 用 Stack 导航 |
|
|
410
|
+
|
|
411
|
+
### ❌ AI 常见导航错误(AI Navigation Mistakes)
|
|
412
|
+
|
|
413
|
+
```
|
|
414
|
+
AI 常见问题:
|
|
415
|
+
├── 什么都用 Modal(错误)
|
|
416
|
+
├── 忘记 Tab 状态保持(错误)
|
|
417
|
+
├── 忽略 Deep Linking(错误)
|
|
418
|
+
├── 覆盖平台返回行为(错误)
|
|
419
|
+
├── 切换 Tab 时重置栈(错误)
|
|
420
|
+
└── 忽视预测性返回(Android 14+)
|
|
421
|
+
|
|
422
|
+
规则:遵循平台导航模式。
|
|
423
|
+
不要重复造轮子。
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
---
|
|
427
|
+
|
|
428
|
+
## 10. 导航检查清单(Navigation Checklist)
|
|
429
|
+
|
|
430
|
+
### 导航架构前(Before Navigation Architecture)
|
|
431
|
+
|
|
432
|
+
- [ ] 应用类型已确定(tabs/drawer/stack)。
|
|
433
|
+
- [ ] 顶层入口数量已统计。
|
|
434
|
+
- [ ] Deep link URL scheme 已规划。
|
|
435
|
+
- [ ] 认证流程与导航已集成。
|
|
436
|
+
- [ ] 平板/大屏场景已考虑。
|
|
437
|
+
|
|
438
|
+
### 每个页面前(Before Every Screen)
|
|
439
|
+
|
|
440
|
+
- [ ] 能否返回?(无死路)
|
|
441
|
+
- [ ] 是否规划了 Deep link?
|
|
442
|
+
- [ ] 离开/返回时状态是否保留?
|
|
443
|
+
- [ ] 过渡是否匹配页面关系?
|
|
444
|
+
- [ ] 是否需要鉴权?是否已处理?
|
|
445
|
+
|
|
446
|
+
### 发布前(Before Release)
|
|
447
|
+
|
|
448
|
+
- [ ] 所有 Deep links 已测试。
|
|
449
|
+
- [ ] 返回键全路径可用。
|
|
450
|
+
- [ ] Tab 状态保持正常。
|
|
451
|
+
- [ ] iOS 边缘滑动返回正常。
|
|
452
|
+
- [ ] Android 14+ 预测性返回正常。
|
|
453
|
+
- [ ] Universal/App Links 已配置。
|
|
454
|
+
- [ ] 推送通知深链可用。
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
> **记住(Remember)**:导航做到“无感”才是好导航。用户不应该思考“怎么去”,而是“直接到达”。如果用户在意导航,说明它有问题。
|