Files
2026-06-28 21:56:23 +08:00

3.2 KiB
Raw Permalink Blame History

2026-06-28

  • SQL 模板字面量 Metro 解析错误修复:Expo/Babel 在 .tsx 文件中会将模板字面量中的 id 关键字误解析为 JSX 属性,报 Missing semicolon。根因是 @babel/plugin-transform-typescript 的 TSX 模式 bug。最终方案:将所有 SQL 模板字面量改为字符串拼接(+ 连接),避免了模板字面量 → TSX 解析路径。涉及文件:
    • app-rn/src/app/finance/(tabs)/analysis/index.tsx — 3 处 SQL
    • app-rn/src/app/finance/(tabs)/home/index.tsx — 1 处 SQL
    • app-rn/src/app/finance/detail/[id].tsx — 1 处 SQL
  • 注意:仅提取为变量不够(const sql = \...`` 仍然触发),必须完全避免模板字面量
  • 中文乱码修复:修复了以下文件中因编码转换导致的大量中文乱码(UTF-8 被误当 GBK/CP1252 解析导致的 mojibake):
    • app-rn/src/app/finance/(tabs)/analysis/index.tsx — 约 50 处乱码修复(注释、UI 标签、¥ 符号)
    • app-rn/src/app/finance/(tabs)/home/index.tsx — 约 20 处乱码修复(toast 消息、UI 标签、¥ 符号)
    • app-rn/src/app/finance/category/index.tsx — 约 12 处乱码修复(toast 消息、表单标签)
    • app-rn/src/app/finance/add/index.tsx — 约 15 处乱码修复(UI 标签、toast 消息、¥ 符号)
  • 修复 DateTime/DateTimeRange 乱码和日历外边距:修正了中文注释和按钮标签乱码,日历容器添加 px-4
  • 移除 BottomSheet 默认内边距:gorhom 的 BottomSheetView 自带 padding: 16,在 AppBottomSheetContent 中通过 style={[{ padding: 0 }]} 消除。补偿了 family/settings.tsx 中一个缺少 px-4 的 BottomSheet 使用处
  • BottomSheet 内 input 键盘避让修复:family/user.tsx 中 sheet 内的 heroui <Input>(底层原生 TextInput)被键盘遮挡。根因有三层:
    1. BottomSheet.tsx 封装时 keyboardBehavior="extend" 是错的——gorhom 源码(BottomSheet.js L585)显示 extend 只是把 sheet 拉到最高 snap point,根本不上移。应改为 gorhom 默认值 "interactive"(L602-608:highestDetentPosition - keyboardHeightInContainer,sheet 上移到键盘上方)。
    2. android_keyboardInputMode="adjustResize" 在 Android 上会导致 interactive 模式被跳过(L605: !(Platform.OS === 'android' && android_keyboardInputMode === 'adjustResize'))。应改为 gorhom 默认值 "adjustPan"。
    3. heroui <Input> 底层是原生 TextInput,未注册到 sheet 内部 context,sheet 感知不到 focus。
    • 最终方案(最优):BottomSheet.tsx 改 keyboardBehavior="interactive" + android_keyboardInputMode="adjustPan"。AppBottomSheetInput 封装改用 heroui 原生 Input + useBottomSheetAwareHandlers(heroui-native 提供),hook 内部调用 gorhom useBottomSheetInternal(true) 把 focus/blur 注册到 animatedKeyboardState。这样保留 heroui Input 全部样式和 API,无需用 BottomSheetTextInput。
    • 全项目 sheet 内 <Input> 统一替换为 <BottomSheet.Input>:family/user.tsx(2处)、family/settings.tsx(2处)、finance/add/index.tsx(2处)、finance/category/index.tsx(1处)、finance/(tabs)/home/index.tsx(1处)、finance/(tabs)/analysis/index.tsx(1处)。