Skip to content

feat: 字体设置页支持大小/粗细滑杆与真实课表预览 - #172

Open
clever-max wants to merge 2 commits into
BenderBlog:mainfrom
clever-max:feat/font-size-settings
Open

feat: 字体设置页支持大小/粗细滑杆与真实课表预览#172
clever-max wants to merge 2 commits into
BenderBlog:mainfrom
clever-max:feat/font-size-settings

Conversation

@clever-max

Copy link
Copy Markdown
Contributor

功能

  • 设置页「字体大小」入口由对话框改为二级页面(MIUI 风格)
  • 大小滑杆(0.8x~1.4x)经 MediaQuery textScaler 全局生效
  • 粗细滑杆(细/常规/中等/半粗/加粗,w300~w700)经 textTheme 重建全局生效
  • 分割线下方全宽预览:直接复用 ClassTableView 渲染真实课表第二周(静态不可交互)

改动

  • lib/page/setting/font_size_page.dart(新):双滑杆 + 真实课表预览
  • lib/themes/font_setting.dart(新):字号/粗细常量与 TextTheme 字重重建扩展
  • lib/controller/theme_controller.dart:fontScaleSignal/fontWeightSignal(double 连续值)
  • lib/main.dart:MediaQuery textScaler + applyFontWeight 链式应用
  • lib/repository/preference.dart:fontScale/fontWeight 偏好键
  • test/themes/font_setting_test.dart(新):映射/clamp/主题应用单测
  • 三语 i18n:font_size_page 块 8 键

测试

  • flutter analyze 零新增告警;flutter test 19/19 通过

@clever-max

Copy link
Copy Markdown
Contributor Author

补充:第二轮改动(fa4f99b1)

在第一版功能基础上修复 3 个问题并调整文案。涉及 6 个文件:

涉及文件与改动意图

文件 改动 意图
lib/page/setting/font_size_page.dart 滑杆 onChanged 改为仅更新 signal;新增 onChangeEnd 一次性落盘;页面取值改为读 ThemeController 信号 修复拖动时高频 setDouble+reloadCache 与未落盘写入竞态导致的值回弹(鬼畜),同时消除拖动中磁盘 IO
lib/page/setting/setting.dart 入口副标题改用 SignalBuilder 包裹,显示 {scale}% · {weight} 组合状态 修复返回设置页时入口状态不刷新;对齐「颜色设置 → 默认颜色」的状态标识模式
lib/page/classtable/class_table_view/classtable_date_row.dart 日期行移除固定高度 midRowHeight,改为内容自适应 修复字号放大 1.25 后文本行高超出固定 54px 导致的 RenderFlex overflow(约 1px);真实课表页同受益,课表区 Expanded+滚动兜底不影响布局公式
assets/flutter_i18n/zh_CN.yaml font_size_setting 值改「字体大小与粗细」;font_size_page 块新增 summary 键({scale}% · {weight} 标题文案与入口组合状态的简体翻译
assets/flutter_i18n/zh_TW.yaml 同上(字體大小與粗細) 繁体同步
assets/flutter_i18n/en_US.yaml 同上(Font size & weight) 英文同步

修复明细

  1. 滑杆拖动鬼畜(值回弹)onChanged 每帧写盘触发 reloadCache 全库重载,与并发未落盘写入竞态,使另一滑杆的偏好值被旧盘数据回滚 → 改为 onChanged 纯内存更新信号(实时预览保留)、onChangeEnd 才写盘
  2. 设置页入口状态不实时同步:subtitle 读信号但未订阅,返回时不重建 → SignalBuilder 包裹后随信号实时更新
  3. 大字号下预览 RenderFlex overflow(~1px):日期行固定高度 54 vs 放大后文本行高 55 → 移除固定高度改内容自适应

验证

  • flutter analyze 零新增告警(仅仓库既有 9 项)
  • flutter test 19/19 通过
  • 真机验证:拖动滑杆无回弹、入口副标题实时更新、125%+ 字号无 overflow

https://github.com/user-attachments/assets/5886c16a-55d8-4d4b-9901-6f29397cbfca
https://github.com/user-attachments/assets/473f64a8-503f-43dd-bad1-ccaf725a9125

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant