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:
AppTile有value时使用左右双Expanded,不再依赖嵌套Row + Spacer/Flexible的弹性组合。value与箭头之间保留极小固定间距,箭头始终独立在最右侧。BottomNav的SafeArea只包裹导航内容,不包裹整块背景容器。
notes:
- 这次调整主要影响提醒编辑页的“提醒日期/提醒时间/重复频率”行视觉对齐。
BottomNav仍保留顶部圆角和阴影,只消除底部悬空感。
reason:
- 设置项布局需要“值贴近箭头”这一明确视觉关系,通用弹性布局容易出现看似右对齐、实则居中的假象。
- 底部栏的背景应延伸到屏幕底边,安全区应只约束可交互内容而不是整块容器。
refs:
mao_zhai/lib/widgets/foundation/app_tile.dartmao_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 切换到 RecordsPage,Showcase 组件预览入口已隐藏,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.dartmao_zhai/lib/widgets/records_page.dartmao_zhai/lib/widgets/bottom_nav.dartmao_zhai/lib/widgets/identity_card.dart
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:
- 修复 Dart 编译错误: 修正了
lib/data/database_helper.dart中Sqflite.firstIntValue方法的参数类型错误。 - 解决静态分析问题:
- 为项目添加了缺失的
path依赖。 - 移除了
database_helper.dart中不必要的类型转换。 - 将项目中所有已废弃的
withOpacity()调用替换为推荐的withAlpha()。
- 为项目添加了缺失的
- 诊断和修复构建环境:
- 多次尝试
launch_app均超时,怀疑是 Android 构建问题。 - 直接在
android目录下运行./gradlew assembleDebug,明确了错误是“找不到 Java 运行时”。 - 运行
flutter doctor -v查找到正确的JAVA_HOME路径。 - 设置正确的
JAVA_HOME环境变量后,成功执行了 Gradle 构建。
- 多次尝试
- 成功启动: 在解决了所有代码和环境问题后,
launch_app命令成功启动了应用。
reason:
launch_app工具的超时错误信息不够具体,无法直接定位到是 Dart 代码问题还是原生构建环境问题。通过使用analyze_files定位代码问题,并直接调用gradlew来获取更详细的原生构建错误日志,是解决此类复合问题的有效策略。flutter doctor默认不显示 Java 路径,需要使用-v参数获取详细信息。
refs:
lib/data/database_helper.dartflutter doctor -vcd android && export JAVA_HOME=... && ./gradlew assembleDebug