Skip to content

Latest commit

 

History

History
99 lines (70 loc) · 4.95 KB

File metadata and controls

99 lines (70 loc) · 4.95 KB

AppTile 右值布局与 BottomNav 贴底修正

time: 2026-03-20 00:20 CST

source: codex

topic: AppTile Value Alignment and Bottom Navigation Safe Area

tags: [design, bugfix, refactor]

summary: AppTile 中带 value 的设置行出现“箭头靠右但值视觉居中”的问题,最终改为稳定的双栏结构:左侧 label、右侧 value,两侧各自 Expanded,右栏固定 textAlign: end。同时修正 BottomNav 未贴到底部的问题,将白色背景容器铺到底部,只让导航内容通过 SafeArea 避开系统手势区。

decisions:

  • AppTilevalue 时使用左右双 Expanded,不再依赖嵌套 Row + Spacer/Flexible 的弹性组合。
  • value 与箭头之间保留极小固定间距,箭头始终独立在最右侧。
  • BottomNavSafeArea 只包裹导航内容,不包裹整块背景容器。

notes:

  • 这次调整主要影响提醒编辑页的“提醒日期/提醒时间/重复频率”行视觉对齐。
  • BottomNav 仍保留顶部圆角和阴影,只消除底部悬空感。

reason:

  • 设置项布局需要“值贴近箭头”这一明确视觉关系,通用弹性布局容易出现看似右对齐、实则居中的假象。
  • 底部栏的背景应延伸到屏幕底边,安全区应只约束可交互内容而不是整块容器。

refs:

  • mao_zhai/lib/widgets/foundation/app_tile.dart
  • mao_zhai/lib/widgets/bottom_nav.dart

记录页作为首页并关闭预览入口

time: 2026-03-20 00:00 CST

source: codex

topic: Records Page Entry and Scroll Behavior

tags: [design, refactor, config]

summary: 应用首页已从 IdentityCard 切换到 RecordsPageShowcase 组件预览入口已隐藏,IdentityCard 不再作为默认可见页面。记录页在 Android 上出现手动上拉时的 overscroll stretch,最终通过在 MaterialApp 注入自定义 ScrollBehavior,重写 buildOverscrollIndicator 直接返回原 child 来关闭 stretch。

decisions:

  • MaterialApp.home 改为 RecordsPage,开始以记录功能为主线推进开发。
  • 移除 Showcase 路由和 IdentityCard 中的预览按钮,不再暴露组件预览入口。
  • BottomNav 增加 currentIndex/onTap,支持当前 tab 高亮。
  • main.dart 中新增 AppScrollBehavior extends MaterialScrollBehavior
  • 通过重写 buildOverscrollIndicator(context, child, details) => child,全局禁用 Android 的 overscroll stretch/indicator。

notes:

  • IdentityCard 文件仍保留,但只是不再作为默认入口。
  • 记录页已提供首版静态骨架,后续可继续接筛选、真实数据和创建流程。
  • 解决的是“手动上拉出现拉伸”的系统滚动反馈,不是布局约束或文字缩放问题。

reason:

  • 当前阶段从空白页切到真实功能页,比继续维护预览页更有价值。
  • Android 默认 stretch 视觉过强,不适合该项目当前的界面风格。

refs:

  • mao_zhai/lib/main.dart
  • mao_zhai/lib/widgets/records_page.dart
  • mao_zhai/lib/widgets/bottom_nav.dart
  • mao_zhai/lib/widgets/identity_card.dart

修复多因素导致的 Android 应用启动失败问题

time: 2026-03-12

source: gemini-cli

topic: Android Build and Launch Debugging

tags: [bugfix, build, android, gradle]

summary: 应用在 Android 模拟器上启动失败(超时)。经过排查,发现问题由多个因素共同导致:Dart 代码层面的编译错误、静态分析警告(包括缺失依赖和废弃 API),以及最关键的本地 Java 环境配置错误。通过逐一修复这些问题,最终成功在 Android 模拟器上构建并启动了应用。

decisions:

  1. 修复 Dart 编译错误: 修正了 lib/data/database_helper.dartSqflite.firstIntValue 方法的参数类型错误。
  2. 解决静态分析问题:
    • 为项目添加了缺失的 path 依赖。
    • 移除了 database_helper.dart 中不必要的类型转换。
    • 将项目中所有已废弃的 withOpacity() 调用替换为推荐的 withAlpha()
  3. 诊断和修复构建环境:
    • 多次尝试 launch_app 均超时,怀疑是 Android 构建问题。
    • 直接在 android 目录下运行 ./gradlew assembleDebug,明确了错误是“找不到 Java 运行时”。
    • 运行 flutter doctor -v 查找到正确的 JAVA_HOME 路径。
    • 设置正确的 JAVA_HOME 环境变量后,成功执行了 Gradle 构建。
  4. 成功启动: 在解决了所有代码和环境问题后,launch_app 命令成功启动了应用。

reason:

  • launch_app 工具的超时错误信息不够具体,无法直接定位到是 Dart 代码问题还是原生构建环境问题。通过使用 analyze_files 定位代码问题,并直接调用 gradlew 来获取更详细的原生构建错误日志,是解决此类复合问题的有效策略。flutter doctor 默认不显示 Java 路径,需要使用 -v 参数获取详细信息。

refs:

  • lib/data/database_helper.dart
  • flutter doctor -v
  • cd android && export JAVA_HOME=... && ./gradlew assembleDebug