mobile-design

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Mobile Design System

移动设计系统

Philosophy: Touch-first. Battery-conscious. Platform-respectful. Offline-capable. Core Principle: Mobile is NOT a small desktop. THINK mobile constraints, ASK platform choice.

设计理念: 触摸优先、注重续航、尊重平台特性、支持离线使用。 核心原则: 移动设备并非小型桌面电脑。要考虑移动设备的限制,明确平台选择。

🔧 Runtime Scripts

🔧 运行时脚本

Execute these for validation (don't read, just run):
ScriptPurposeUsage
scripts/mobile_audit.py
Mobile UX & Touch Audit
python scripts/mobile_audit.py <project_path>

执行以下脚本进行验证(无需阅读,直接运行):
脚本用途使用方式
scripts/mobile_audit.py
移动UX与触摸交互审计
python scripts/mobile_audit.py <project_path>

🔴 MANDATORY: Read Reference Files Before Working!

🔴 强制要求:开始工作前务必阅读参考文件!

⛔ DO NOT start development until you read the relevant files:
⛔ 在阅读相关文件前,请勿开始开发:

Universal (Always Read)

通用文件(必须阅读)

FileContentStatus
mobile-design-thinking.md⚠️ ANTI-MEMORIZATION: Forces thinking, prevents AI defaults⬜ CRITICAL FIRST
touch-psychology.mdFitts' Law, gestures, haptics, thumb zone⬜ CRITICAL
mobile-performance.mdRN/Flutter performance, 60fps, memory⬜ CRITICAL
mobile-backend.mdPush notifications, offline sync, mobile API⬜ CRITICAL
mobile-testing.mdTesting pyramid, E2E, platform-specific⬜ CRITICAL
mobile-debugging.mdNative vs JS debugging, Flipper, Logcat⬜ CRITICAL
mobile-navigation.mdTab/Stack/Drawer, deep linking⬜ Read
mobile-typography.mdSystem fonts, Dynamic Type, a11y⬜ Read
mobile-color-system.mdOLED, dark mode, battery-aware⬜ Read
decision-trees.mdFramework/state/storage selection⬜ Read
🧠 mobile-design-thinking.md is PRIORITY! This file ensures AI thinks instead of using memorized patterns.
文件内容状态
mobile-design-thinking.md⚠️ 反固化思维:引导针对性思考,避免AI默认模式⬜ 首要关键
touch-psychology.md菲茨定律、手势、触觉反馈、拇指操作区域⬜ 关键
mobile-performance.mdReact Native/Flutter性能优化、60fps、内存管理⬜ 关键
mobile-backend.md推送通知、离线同步、移动API⬜ 关键
mobile-testing.md测试金字塔、端到端测试、平台特定测试⬜ 关键
mobile-debugging.md原生与JS调试、Flipper、Logcat⬜ 关键
mobile-navigation.md标签栏/栈式/抽屉式导航、深度链接⬜ 推荐阅读
mobile-typography.md系统字体、动态字体、无障碍设计⬜ 推荐阅读
mobile-color-system.mdOLED适配、深色模式、续航友好设计⬜ 推荐阅读
decision-trees.md框架/状态管理/存储方案选择⬜ 推荐阅读
🧠 mobile-design-thinking.md 是优先项! 该文件确保AI进行针对性思考,而非依赖固化模式。

Platform-Specific (Read Based on Target)

平台特定文件(根据目标平台阅读)

PlatformFileContentWhen to Read
iOSplatform-ios.mdHuman Interface Guidelines, SF Pro, SwiftUI patternsBuilding for iPhone/iPad
Androidplatform-android.mdMaterial Design 3, Roboto, Compose patternsBuilding for Android
Cross-PlatformBoth abovePlatform divergence pointsReact Native / Flutter
🔴 If building for iOS → Read platform-ios.md FIRST! 🔴 If building for Android → Read platform-android.md FIRST! 🔴 If cross-platform → Read BOTH and apply conditional platform logic!

平台文件内容阅读时机
iOSplatform-ios.md人机界面指南、SF Pro字体、SwiftUI模式开发iPhone/iPad应用时
Androidplatform-android.mdMaterial Design 3、Roboto字体、Compose模式开发Android应用时
跨平台上述两个文件平台差异点开发React Native / Flutter应用时
🔴 如果开发iOS应用 → 先阅读platform-ios.md! 🔴 如果开发Android应用 → 先阅读platform-android.md! 🔴 如果开发跨平台应用 → 阅读两个文件并应用平台条件逻辑!

⚠️ CRITICAL: ASK BEFORE ASSUMING (MANDATORY)

⚠️ 关键要求:先询问再假设(强制)

STOP! If the user's request is open-ended, DO NOT default to your favorites.
停!如果用户的需求不明确,请勿默认使用你偏好的方案。

You MUST Ask If Not Specified:

若未明确说明,你必须询问以下内容:

AspectAskWhy
Platform"iOS, Android, or both?"Affects EVERY design decision
Framework"React Native, Flutter, or native?"Determines patterns and tools
Navigation"Tab bar, drawer, or stack-based?"Core UX decision
State"What state management? (Zustand/Redux/Riverpod/BLoC?)"Architecture foundation
Offline"Does this need to work offline?"Affects data strategy
Target devices"Phone only, or tablet support?"Layout complexity
方面询问内容原因
平台"是iOS、Android还是两者兼顾?"影响所有设计决策
框架"是React Native、Flutter还是原生开发?"决定实现模式与工具
导航方式"是标签栏、抽屉式还是栈式导航?"核心UX决策
状态管理"使用哪种状态管理方案?(Zustand/Redux/Riverpod/BLoC?)"架构基础
离线支持"是否需要支持离线使用?"影响数据策略
目标设备"仅支持手机,还是同时支持平板?"影响布局复杂度

⛔ AI MOBILE ANTI-PATTERNS (YASAK LİSTESİ)

⛔ AI移动端反模式清单(禁止列表)

🚫 These are AI default tendencies that MUST be avoided!
🚫 这些是AI的默认倾向,必须避免!

Performance Sins

性能禁忌

❌ NEVER DOWhy It's Wrong✅ ALWAYS DO
ScrollView for long listsRenders ALL items, memory explodesUse
FlatList
/
FlashList
/
ListView.builder
Inline renderItem functionNew function every render, all items re-render
useCallback
+
React.memo
Missing keyExtractorIndex-based keys cause bugs on reorderUnique, stable ID from data
Skip getItemLayoutAsync layout = janky scrollProvide when items have fixed height
setState() everywhereUnnecessary widget rebuildsTargeted state,
const
constructors
Native driver: falseAnimations blocked by JS thread
useNativeDriver: true
always
console.log in productionBlocks JS thread severelyRemove before release build
Skip React.memo/constEvery item re-renders on any changeMemoize list items ALWAYS
❌ 绝对禁止错误原因✅ 正确做法
长列表使用ScrollView渲染所有列表项,内存占用暴增使用
FlatList
/
FlashList
/
ListView.builder
内联renderItem函数每次渲染都会创建新函数,导致所有列表项重渲染
useCallback
+
React.memo
缺少keyExtractor基于索引的键会导致重排时出现bug使用数据中的唯一、稳定ID
未设置getItemLayout异步布局导致滚动卡顿当列表项高度固定时提供该配置
随处使用setState()不必要的组件重渲染针对性状态管理、使用
const
构造函数
Native driver设为false动画会被JS线程阻塞始终设置
useNativeDriver: true
生产环境保留console.log严重阻塞JS线程发布构建前移除所有console.log
未使用React.memo/const任意变更都会导致所有列表项重渲染始终对列表项进行记忆化处理

Touch/UX Sins

触摸/UX禁忌

❌ NEVER DOWhy It's Wrong✅ ALWAYS DO
Touch target < 44pxImpossible to tap accurately, frustratingMinimum 44pt (iOS) / 48dp (Android)
Spacing < 8px between targetsAccidental taps on neighborsMinimum 8-12px gap
Gesture-only interactionsMotor impaired users excludedAlways provide button alternative
No loading stateUser thinks app crashedALWAYS show loading feedback
No error stateUser stuck, no recovery pathShow error with retry option
No offline handlingCrash/block when network lostGraceful degradation, cached data
Ignore platform conventionsUsers confused, muscle memory brokeniOS feels iOS, Android feels Android
❌ 绝对禁止错误原因✅ 正确做法
触摸目标尺寸 < 44px难以精准点击,影响用户体验最小尺寸为44pt(iOS)/48dp(Android)
触摸目标间距 < 8px容易误触相邻目标最小间距为8-12px
仅支持手势交互排斥行动不便的用户始终提供按钮替代方案
无加载状态用户会误以为应用崩溃始终显示加载反馈
无错误状态用户陷入困境,无恢复路径显示错误信息并提供重试选项
无离线处理网络断开时应用崩溃/无法使用优雅降级,使用缓存数据
忽略平台规范造成用户困惑,违背肌肉记忆iOS应用符合iOS体验,Android应用符合Android体验

Security Sins

安全禁忌

❌ NEVER DOWhy It's Wrong✅ ALWAYS DO
Token in AsyncStorageEasily accessible, stolen on rooted device
SecureStore
/
Keychain
/
EncryptedSharedPreferences
Hardcode API keysReverse engineered from APK/IPAEnvironment variables, secure storage
Skip SSL pinningMITM attacks possiblePin certificates in production
Log sensitive dataLogs can be extractedNever log tokens, passwords, PII
❌ 绝对禁止错误原因✅ 正确做法
将Token存储在AsyncStorage中容易被访问,在root设备上会被盗取使用
SecureStore
/
Keychain
/
EncryptedSharedPreferences
硬编码API密钥可从APK/IPA中逆向获取使用环境变量、安全存储
未启用SSL证书绑定可能遭受中间人攻击生产环境启用证书绑定
记录敏感数据日志可被提取绝不记录Token、密码、个人身份信息(PII)

Architecture Sins

架构禁忌

❌ NEVER DOWhy It's Wrong✅ ALWAYS DO
Business logic in UIUntestable, unmaintainableService layer separation
Global state for everythingUnnecessary re-renders, complexityLocal state default, lift when needed
Deep linking as afterthoughtNotifications, shares brokenPlan deep links from day one
Skip dispose/cleanupMemory leaks, zombie listenersClean up subscriptions, timers

❌ 绝对禁止错误原因✅ 正确做法
业务逻辑写在UI层无法测试、难以维护分离服务层
所有状态都用全局状态不必要的重渲染、复杂度高默认使用局部状态,必要时再提升状态
深度链接事后考虑通知、分享功能失效从项目初期就规划深度链接
未进行销毁/清理内存泄漏、僵尸监听器清理订阅、定时器等

📱 Platform Decision Matrix

📱 平台决策矩阵

When to Unify vs Diverge

何时统一 vs 差异化

                    UNIFY (same on both)          DIVERGE (platform-specific)
                    ───────────────────           ──────────────────────────
Business Logic      ✅ Always                     -
Data Layer          ✅ Always                     -
Core Features       ✅ Always                     -
                    
Navigation          -                             ✅ iOS: edge swipe, Android: back button
Gestures            -                             ✅ Platform-native feel
Icons               -                             ✅ SF Symbols vs Material Icons
Date Pickers        -                             ✅ Native pickers feel right
Modals/Sheets       -                             ✅ iOS: bottom sheet vs Android: dialog
Typography          -                             ✅ SF Pro vs Roboto (or custom)
Error Dialogs       -                             ✅ Platform conventions for alerts
                    统一(双平台一致)          差异化(平台特定)
                    ───────────────────           ──────────────────────────
业务逻辑      ✅ 始终统一                     -
数据层          ✅ 始终统一                     -
核心功能       ✅ 始终统一                     -
                    
导航方式          -                             ✅ iOS:边缘左滑,Android:返回按钮
手势            -                             ✅ 符合平台原生体验
图标               -                             ✅ SF Symbols vs Material Icons
日期选择器        -                             ✅ 原生选择器体验更佳
模态框/底部弹窗       -                             ✅ iOS:底部弹窗 vs Android:对话框
字体          -                             ✅ SF Pro vs Roboto(或自定义字体)
错误提示框       -                             ✅ 遵循平台提示框规范

Quick Reference: Platform Defaults

快速参考:平台默认配置

ElementiOSAndroid
Primary FontSF Pro / SF CompactRoboto
Min Touch Target44pt × 44pt48dp × 48dp
Back NavigationEdge swipe leftSystem back button/gesture
Bottom Tab IconsSF SymbolsMaterial Symbols
Action SheetUIActionSheet from bottomBottom Sheet / Dialog
ProgressSpinnerLinear progress (Material)
Pull to RefreshNative UIRefreshControlSwipeRefreshLayout

元素iOSAndroid
主字体SF Pro / SF CompactRoboto
最小触摸目标44pt × 44pt48dp × 48dp
返回导航边缘左滑系统返回按钮/手势
底部标签栏图标SF SymbolsMaterial Symbols
操作菜单从底部弹出的UIActionSheet底部弹窗 / 对话框
进度指示器环形加载器线性进度条(Material风格)
下拉刷新原生UIRefreshControlSwipeRefreshLayout

🧠 Mobile UX Psychology (Quick Reference)

🧠 移动端UX心理学(快速参考)

Fitts' Law for Touch

触摸交互的菲茨定律

Desktop: Cursor is precise (1px)
Mobile:  Finger is imprecise (~7mm contact area)

→ Touch targets MUST be 44-48px minimum
→ Important actions in THUMB ZONE (bottom of screen)
→ Destructive actions AWAY from easy reach
桌面端:光标精准(1px)
移动端:手指不精准(接触面积约7mm)

→ 触摸目标最小尺寸必须为44-48px
→ 重要操作放在拇指操作区(屏幕底部)
→ 破坏性操作放在不易触碰的区域

Thumb Zone (One-Handed Usage)

拇指操作区(单手握持场景)

┌─────────────────────────────┐
│      HARD TO REACH          │ ← Navigation, menu, back
│        (stretch)            │
├─────────────────────────────┤
│      OK TO REACH            │ ← Secondary actions
│       (natural)             │
├─────────────────────────────┤
│      EASY TO REACH          │ ← PRIMARY CTAs, tab bar
│    (thumb's natural arc)    │ ← Main content interaction
└─────────────────────────────┘
        [  HOME  ]
┌─────────────────────────────┐
│      难以触碰区域          │ ← 导航、菜单、返回按钮
│        (需伸展手指)            │
├─────────────────────────────┤
│      可触碰区域            │ ← 次要操作
│       (自然姿势)             │
├─────────────────────────────┤
│      易触碰区域          │ ← 主要CTA、标签栏
│    (拇指自然活动范围)    │ ← 主要内容交互区
└─────────────────────────────┘
        [  主页  ]

Mobile-Specific Cognitive Load

移动端特定认知负荷

DesktopMobile Difference
Multiple windowsONE task at a time
Keyboard shortcutsTouch gestures
Hover statesNO hover (tap or nothing)
Large viewportLimited space, scroll vertical
Stable attentionInterrupted constantly
For deep dive: touch-psychology.md

桌面端移动端差异
多窗口并行一次只能处理一个任务
键盘快捷键触摸手势
悬停状态无悬停(只能点击或无操作)
大视口空间有限,仅支持垂直滚动
注意力稳定频繁被打断
深入了解:touch-psychology.md

⚡ Performance Principles (Quick Reference)

⚡ 性能原则(快速参考)

React Native Critical Rules

React Native 关键规则

typescript
// ✅ CORRECT: Memoized renderItem + React.memo wrapper
const ListItem = React.memo(({ item }: { item: Item }) => (
  <View style={styles.item}>
    <Text>{item.title}</Text>
  </View>
));

const renderItem = useCallback(
  ({ item }: { item: Item }) => <ListItem item={item} />,
  []
);

// ✅ CORRECT: FlatList with all optimizations
<FlatList
  data={items}
  renderItem={renderItem}
  keyExtractor={(item) => item.id}  // Stable ID, NOT index
  getItemLayout={(data, index) => ({
    length: ITEM_HEIGHT,
    offset: ITEM_HEIGHT * index,
    index,
  })}
  removeClippedSubviews={true}
  maxToRenderPerBatch={10}
  windowSize={5}
/>
typescript
// ✅ 正确做法:记忆化renderItem + React.memo包装
const ListItem = React.memo(({ item }: { item: Item }) => (
  <View style={styles.item}>
    <Text>{item.title}</Text>
  </View>
));

const renderItem = useCallback(
  ({ item }: { item: Item }) => <ListItem item={item} />,
  []
);

// ✅ 正确做法:开启所有优化的FlatList
<FlatList
  data={items}
  renderItem={renderItem}
  keyExtractor={(item) => item.id}  // 稳定ID,而非索引
  getItemLayout={(data, index) => ({
    length: ITEM_HEIGHT,
    offset: ITEM_HEIGHT * index,
    index,
  })}
  removeClippedSubviews={true}
  maxToRenderPerBatch={10}
  windowSize={5}
/>

Flutter Critical Rules

Flutter 关键规则

dart
// ✅ CORRECT: const constructors prevent rebuilds
class MyWidget extends StatelessWidget {
  const MyWidget({super.key}); // CONST!

  
  Widget build(BuildContext context) {
    return const Column( // CONST!
      children: [
        Text('Static content'),
        MyConstantWidget(),
      ],
    );
  }
}

// ✅ CORRECT: Targeted state with ValueListenableBuilder
ValueListenableBuilder<int>(
  valueListenable: counter,
  builder: (context, value, child) => Text('$value'),
  child: const ExpensiveWidget(), // Won't rebuild!
)
dart
// ✅ 正确做法:const构造函数避免重渲染
class MyWidget extends StatelessWidget {
  const MyWidget({super.key}); // CONST!

  
  Widget build(BuildContext context) {
    return const Column( // CONST!
      children: [
        Text('静态内容'),
        MyConstantWidget(),
      ],
    );
  }
}

// ✅ 正确做法:使用ValueListenableBuilder进行针对性状态管理
ValueListenableBuilder<int>(
  valueListenable: counter,
  builder: (context, value, child) => Text('$value'),
  child: const ExpensiveWidget(), // 不会重渲染!
)

Animation Performance

动画性能

GPU-accelerated (FAST):     CPU-bound (SLOW):
├── transform               ├── width, height
├── opacity                 ├── top, left, right, bottom
└── (use these ONLY)        ├── margin, padding
                            └── (AVOID animating these)
For complete guide: mobile-performance.md

GPU加速(快速):     CPU绑定(缓慢):
├── transform               ├── width, height
├── opacity                 ├── top, left, right, bottom
└── (仅使用这些)        ├── margin, padding
                            └── (避免对这些属性做动画)
完整指南:mobile-performance.md

📝 CHECKPOINT (MANDATORY Before Any Mobile Work)

📝 检查点(开始任何移动端工作前必须完成)

Before writing ANY mobile code, you MUST complete this checkpoint:
🧠 CHECKPOINT:

Platform:   [ iOS / Android / Both ]
Framework:  [ React Native / Flutter / SwiftUI / Kotlin ]
Files Read: [ List the skill files you've read ]

3 Principles I Will Apply:
1. _______________
2. _______________
3. _______________

Anti-Patterns I Will Avoid:
1. _______________
2. _______________
Example:
🧠 CHECKPOINT:

Platform:   iOS + Android (Cross-platform)
Framework:  React Native + Expo
Files Read: touch-psychology.md, mobile-performance.md, platform-ios.md, platform-android.md

3 Principles I Will Apply:
1. FlatList with React.memo + useCallback for all lists
2. 48px touch targets, thumb zone for primary CTAs
3. Platform-specific navigation (edge swipe iOS, back button Android)

Anti-Patterns I Will Avoid:
1. ScrollView for lists → FlatList
2. Inline renderItem → Memoized
3. AsyncStorage for tokens → SecureStore
🔴 Can't fill the checkpoint? → GO BACK AND READ THE SKILL FILES.

在编写任何移动端代码前,你必须完成以下检查点:
🧠 检查点:

平台:   [ iOS / Android / 两者兼顾 ]
框架:  [ React Native / Flutter / SwiftUI / Kotlin ]
已读文件: [ 列出你已阅读的技能文件 ]

我将遵循的3项原则:
1. _______________
2. _______________
3. _______________

我将避免的反模式:
1. _______________
2. _______________
示例:
🧠 检查点:

平台:   iOS + Android(跨平台)
框架:  React Native + Expo
已读文件: touch-psychology.md, mobile-performance.md, platform-ios.md, platform-android.md

我将遵循的3项原则:
1. 所有列表使用FlatList + React.memo + useCallback
2. 触摸目标48px,主要CTA放在拇指操作区
3. 平台特定导航(iOS边缘左滑,Android返回按钮)

我将避免的反模式:
1. 长列表用ScrollView → 改用FlatList
2. 内联renderItem → 记忆化处理
3. AsyncStorage存储Token → 改用SecureStore
🔴 无法完成检查点? → 返回阅读技能文件。

🔧 Framework Decision Tree

🔧 框架决策树

WHAT ARE YOU BUILDING?
        ├── Need OTA updates + rapid iteration + web team
        │   └── ✅ React Native + Expo
        ├── Need pixel-perfect custom UI + performance critical
        │   └── ✅ Flutter
        ├── Deep native features + single platform focus
        │   ├── iOS only → SwiftUI
        │   └── Android only → Kotlin + Jetpack Compose
        ├── Existing RN codebase + new features
        │   └── ✅ React Native (bare workflow)
        └── Enterprise + existing Flutter codebase
            └── ✅ Flutter
For complete decision trees: decision-trees.md

你要开发什么?
        ├── 需要OTA更新 + 快速迭代 + 有Web团队支持
        │   └── ✅ React Native + Expo
        ├── 需要像素级完美的自定义UI + 性能要求极高
        │   └── ✅ Flutter
        ├── 深度原生功能 + 单一平台聚焦
        │   ├── 仅iOS → SwiftUI
        │   └── 仅Android → Kotlin + Jetpack Compose
        ├── 已有RN代码库 + 新增功能
        │   └── ✅ React Native(裸工作流)
        └── 企业级应用 + 已有Flutter代码库
            └── ✅ Flutter
完整决策树:decision-trees.md

📋 Pre-Development Checklist

📋 开发前检查清单

Before Starting ANY Mobile Project

开始任何移动端项目前

  • Platform confirmed? (iOS / Android / Both)
  • Framework chosen? (RN / Flutter / Native)
  • Navigation pattern decided? (Tabs / Stack / Drawer)
  • State management selected? (Zustand / Redux / Riverpod / BLoC)
  • Offline requirements known?
  • Deep linking planned from day one?
  • Target devices defined? (Phone / Tablet / Both)
  • 确认平台?(iOS / Android / 两者兼顾)
  • 选择框架?(RN / Flutter / 原生)
  • 确定导航模式?(标签栏 / 栈式 / 抽屉式)
  • 选定状态管理方案?(Zustand / Redux / Riverpod / BLoC)
  • 明确离线需求?
  • 从项目初期就规划深度链接?
  • 定义目标设备?(手机 / 平板 / 两者兼顾)

Before Every Screen

开发每个页面之前

  • Touch targets ≥ 44-48px?
  • Primary CTA in thumb zone?
  • Loading state exists?
  • Error state with retry exists?
  • Offline handling considered?
  • Platform conventions followed?
  • 触摸目标尺寸 ≥ 44-48px?
  • 主要CTA在拇指操作区?
  • 存在加载状态?
  • 存在带重试选项的错误状态?
  • 考虑了离线处理?
  • 遵循平台规范?

Before Release

发布前

  • console.log removed?
  • SecureStore for sensitive data?
  • SSL pinning enabled?
  • Lists optimized (memo, keyExtractor)?
  • Memory cleanup on unmount?
  • Tested on low-end devices?
  • Accessibility labels on all interactive elements?

  • 移除console.log?
  • 敏感数据使用SecureStore存储?
  • 启用SSL证书绑定?
  • 列表已优化(记忆化、keyExtractor)?
  • 卸载时清理内存?
  • 在低端设备上测试过?
  • 所有交互元素都有无障碍标签?

📚 Reference Files

📚 参考文件

For deeper guidance on specific areas:
FileWhen to Use
mobile-design-thinking.mdFIRST! Anti-memorization, forces context-based thinking
touch-psychology.mdUnderstanding touch interaction, Fitts' Law, gesture design
mobile-performance.mdOptimizing RN/Flutter, 60fps, memory/battery
platform-ios.mdiOS-specific design, HIG compliance
platform-android.mdAndroid-specific design, Material Design 3
mobile-navigation.mdNavigation patterns, deep linking
mobile-typography.mdType scale, system fonts, accessibility
mobile-color-system.mdOLED optimization, dark mode, battery
decision-trees.mdFramework, state, storage decisions

Remember: Mobile users are impatient, interrupted, and using imprecise fingers on small screens. Design for the WORST conditions: bad network, one hand, bright sun, low battery. If it works there, it works everywhere.
如需特定领域的深入指导:
文件使用场景
mobile-design-thinking.md首先阅读!反固化思维,引导基于场景的思考
touch-psychology.md理解触摸交互、菲茨定律、手势设计
mobile-performance.mdReact Native/Flutter优化、60fps、内存/续航管理
platform-ios.mdiOS特定设计、HIG合规
platform-android.mdAndroid特定设计、Material Design 3
mobile-navigation.md导航模式、深度链接
mobile-typography.md字体层级、系统字体、无障碍
mobile-color-system.mdOLED优化、深色模式、续航友好
decision-trees.md框架、状态管理、存储方案决策

记住: 移动用户缺乏耐心、频繁被打断,且用不精准的手指操作小屏幕。要针对最恶劣的条件设计:网络差、单手握持、强光、低电量。如果在这些条件下能正常工作,那在任何场景下都能正常工作。",