Skip to content

导航系统

定义栈式导航架构规范


导航模式

栈式导航

BFM Pay 采用栈式导航模式,提供原生 App 般的用户体验。

┌─────────────────────────────────────┐
│            Navigation Stack          │
├─────────────────────────────────────┤
│  [4] 交易详情页                       │ ← 栈顶(当前页面)
│  [3] 发送确认页                       │
│  [2] 发送页                          │
│  [1] 钱包详情页                       │
│  [0] 首页 (Tab)                      │ ← 栈底
└─────────────────────────────────────┘

导航类型

操作说明动画方向
Push压入新页面到栈顶从右进入
Pop弹出栈顶页面向右退出
Replace替换栈顶页面淡入淡出
Reset重置导航栈无动画

页面(Screen)规范

Screen 定义

每个 Screen MUST 包含:

属性类型必填说明
namestring唯一标识符
pathstringURL 路径模式
paramsParamSchema参数定义
componentComponent渲染组件
optionsScreenOptions页面配置

Screen 参数

ParamSchema = {
  [paramName: string]: {
    type: 'string' | 'number' | 'boolean'
    required: boolean
    default?: any
  }
}

Screen 配置

ScreenOptions = {
  title: string | null        // 页面标题
  headerVisible: boolean      // 是否显示头部
  gestureEnabled: boolean     // 是否启用手势返回
  animation: AnimationType    // 过渡动画类型
}

Screen 列表

Tab 页面

Screen路径说明
MainTabs/Tab 容器页
HomeTab/home首页 Tab
HistoryTab/history历史 Tab
SettingsTab/settings设置 Tab

钱包相关

Screen路径参数说明
WalletCreate/wallet/create-创建钱包
WalletImport/wallet/import-导入钱包
WalletDetail/wallet/:idid: string钱包详情
WalletBackup/wallet/:id/backupid: string备份钱包

交易相关

Screen路径参数说明
Send/sendtoken?: string发送页
SendConfirm/send/confirmtx: TxData发送确认
Receive/receive-收款页
TxDetail/tx/:hashhash: string交易详情

设置相关

Screen路径说明
SettingsLanguage/settings/language语言设置
SettingsCurrency/settings/currency货币设置
SettingsChains/settings/chains链配置
SettingsWalletLock/settings/wallet-lock修改钱包锁
SettingsMnemonic/settings/mnemonic查看助记词

DWEB 授权

Screen路径参数说明
AuthorizeAddress/authorize/address/:eventIdeventId: string地址授权
AuthorizeSignature/authorize/signature/:eventIdeventId: string签名授权

导航接口规范

INavigator

INavigator {
  // 导航操作
  push(screen: string, params?: object): void
  pop(): void
  replace(screen: string, params?: object): void
  reset(screens: ScreenConfig[]): void
  
  // 状态查询
  canGoBack(): boolean
  getCurrentScreen(): ScreenInfo
  getNavigationState(): NavigationState
  
  // 事件监听
  addListener(event: NavigationEvent, callback: Function): Unsubscribe
}
事件触发时机
beforeNavigate导航开始前
afterNavigate导航完成后
focus页面获得焦点
blur页面失去焦点

Tab 导航规范

Tab 配置

属性类型说明
keystringTab 唯一标识
labelstringTab 显示文本
iconIconTab 图标
screenstring对应 Screen
badgenumber角标数字

Tab 列表

Tab图标Screen说明
homeWalletHomeTab首页/钱包
historyHistoryHistoryTab交易历史
settingsSettingsSettingsTab设置

Tab 行为规范

  • MUST 点击当前 Tab 滚动到顶部
  • MUST 记住每个 Tab 的滚动位置
  • SHOULD 支持 Tab 切换动画
  • MAY 支持 Tab 长按快捷操作

URL 同步规范

路由模式

  • MUST 支持 Hash 路由模式(兼容静态部署)
  • SHOULD 支持 History 路由模式(可选)

URL 格式

Hash 模式:https://example.com/#/wallet/abc123
History 模式:https://example.com/wallet/abc123

参数编码

  • MUST 路径参数使用 URL 安全字符
  • MUST 复杂参数使用 URL Search 编码
  • SHOULD 敏感参数加密后传递

过渡动画规范

动画类型

类型说明使用场景
slideRight从右滑入进入新页面
slideLeft从左滑入返回上一页
slideUp从下滑入弹出层/Sheet
fade淡入淡出替换页面
none无动画快速切换

动画参数

参数建议值说明
duration250-300ms动画时长
easingease-out缓动函数
delay0ms延迟时间

手势导航规范

手势返回

  • MUST 支持从屏幕左边缘向右滑动返回
  • MUST 滑动距离 > 屏幕 1/3 时触发返回
  • SHOULD 显示返回预览效果
  • MAY 支持自定义触发阈值

禁用场景

以下页面 SHOULD 禁用手势返回:

  • 支付确认页(防止误操作)
  • 图案锁页面(防止泄露)
  • 重要表单页(防止数据丢失)

深度链接规范

支持的 Scheme

Scheme说明
bfmpay://应用内链接
https://pay.bfm.networkWeb 链接

链接格式

bfmpay://send?to=ADDRESS&amount=100
bfmpay://wallet/WALLET_ID
bfmpay://authorize/address/EVENT_ID

处理流程

接收深度链接


解析 scheme 和 path


验证参数合法性

    ├── 无效 ──► 显示错误

    └── 有效 ──► 导航到对应页面

本章小结

  • 栈式导航提供原生 App 体验
  • Screen 统一定义页面和参数
  • Tab 导航管理主要功能入口
  • URL 同步支持页面分享和书签
  • 手势导航增强操作体验
  • 深度链接支持外部唤起

Released under the MIT License.