按构造参数 topicIndex 渲染对应主题的段落 + 内嵌图片;段落自动启发式分头部 vs 正文(短 / 不以句号结尾 / 含冒号 / 大写或汉字开头 → 加粗)。图片槽自 376d6fd 起按主题分流:topic 1 仍是 topic1_img0.png(探针插肉位置标注图,走 helpImageAfterParagraph 表插入到指定段落之后),topic 0/2/3/4 改成内嵌"实时预览"widget——这些 help 预览不是 live 页面本体,而是无 Provider 的风格化预览 widget;文案尽量与 live 同步,但 live UI 的配色、布局或文案改动后仍需手动同步这里,否则会漂移。widget 的数量与插入位置由 help_detail_page.dart:_slotsFor 决定;具体每个槽位渲染哪一个预览 widget 由 help_detail_page.dart:_previewFor 决定。(c71c466 引入,与 helpImageAfterParagraph 表解耦的是 topic 0/2/3/4;默认分支仍读取 helpTopicImageCounts 和 helpImageAfterParagraph,topic 1 与 topic 5 都走这一路径(topic 5 只是空表)。),topic 5 是 text-only(slot 表空)。
lib/features/thermometer/presentation/pages/help_detail_page.dart(290 行)appLanguageProvider(取段落翻译);标题与正文都先按该 provider 读取 helpTopicTitles[locale] / helpTopicContent[locale],若当前语言键不存在则回退到英文 ['en']。lib/features/thermometer/presentation/data/help_content.dart(helpTopicContent 段落正文 + 各主题图片槽位表 helpTopicImageCounts / helpImageAfterParagraph;c71c466 改为手写内容,6 语 en/zh/de/es/fr/it 同步——de/es/fr/it 是 best-effort 待母语审;原 auto-generated Foneric 来源因多版 UI 漂移已弃用)help_detail_page.dart:_slotsFor(按 topic 返回图片数量与插入位置元组 (int, List<int>));topic 1 PNG 槽走 helpImageAfterParagraph 表;renumber 段落时必须同步两处lib/features/thermometer/presentation/widgets/alarm_visual_card.dart(safety / target-reached / disconnect / low-battery 预览,从 AppLocalizations.warning*Msg 直接取文案)、lib/features/thermometer/presentation/widgets/help_previews.dart(包含 BT scan radar、protein tile + 4 列网格、delete dialog;其中 Meat grid 预览在该文件内维护独立 _proteins 常量,并非对 meat_presets_page.dart 的完全 verbatim 复用;当前 Turkey/Chicken/Venison/Ham 的 defaultTempF 也与 live 页不同)assets/help/topic1_img0.png(Ambient / Internal 传感器标注)+ 5 个本地化变体 topic1_img0_<de|es|fr|it|zh>.png(732f854 / TAPD #1003052),其它 topic 改 widget 路径tools/help_preview/help_preview.html 浏览器端 design-iteration 工具,镜像 Flutter widget 结构int topicIndex(构造函数)app.dart 的 routes map)HelpTopicsPage,不是帮助中心本身——帮助中心是 Level 1 的设备型号选择页)通过匿名 MaterialPageRoute(builder: (_) => HelpDetailPage(topicIndex: index)) push顶部返回 + 居中标题(当前主题名)。下方滚动 ListView:交替渲染段落(普通灰白色 15pt 1.55 行高)、章节头部(17pt 粗白)以及插入的可视槽位。走 PNG 的槽位会被 ClipRRect(borderRadius: 10) 裁成圆角矩形;走 preview widget 的槽位则直接返回 widget,本身不统一套这层圆角裁剪。图片按预设位置插入;缺失资源静默不渲染(errorBuilder: const SizedBox.shrink())。
IconButton.onPressed → Navigator.pop(context) → 回到 Help Center本页是纯阅读页面,没有其他用户交互(无点击图片放大、无段落编辑、无搜索框)。
watch:appLanguageProvider —— 用户切换语言后段落/标题立即重渲染。topicIndex 是构造参数,不会动态变。
无显著差异。
isHeader 条件,line 31-37)—— isHeader 实际规则是:长度 < 60、末尾不能是 . / 。 / ) / ) / ! / ! / ? / ?、不能以 ( 或 ( 开头,且满足“首段”或“含冒号”或“以大写字母/汉字开头”之一。代码已显式处理中文句号/感叹号/问号。换 i18n 时容易出错。assets/help/topic1_img0.png,文件不存在静默不渲染;topic 0/2/3/4 改走内嵌 widget(alarm_visual_card.dart / help_previews.dart)。新增主题须先选路径——PNG 走 helpTopicImageCounts + helpImageAfterParagraph + asset 文件;widget 走 help_detail_page.dart:_slotsFor(c71c466 引入的 per-topic widget 序列 helper)。help_content.dart 自 c71c466 起改为手写,原 auto-generated Foneric 来源 + "Culina Tech → CulinaTech" find-replace TODO 一并去掉(手写直接拼 CulinaTech 正确品牌名,regen pipeline 路径不再需要)。Meat grid 早期 help 预览先行用 emoji 动物 / 食物 glyph,live MeatPresetsPage 由 9577a4c 同步替换(共用 🐄🐟🦃🐖🐔🐑🦆🪿🦞🦤🦌🍖 映射、40px 渲染),376d6fd 注的 help-vs-live divergence 已闭合。⚠️ c4fdd7b / TAPD #1003208 起 Goose / Ostrich 改 SVG 资源——🪿 Emoji 15.0 / 🦤 Emoji 13.0 在老 Android emoji 字体(≤ Emoji 11.0)上 tofu,鸵鸟根本无 Unicode emoji;改为内置 assets/icons/goose.svg / assets/icons/ostrich.svg 由 flutter_svg 40 px 渲染;Lobster 圆背景同次由红 0xFFCC3030 换 teal 0xFF2E7D72。⚠️ e1fcc84 / TAPD #1003220 起全部 12 个 emoji 改 SVG——vendor emoji 字体在 Android 上不系统统一(Xiaomi / Google / Samsung 各自带不同 font),同一 codepoint 不同机型画不同图;本 commit 把全部 12 肉种迁到 assets/icons/<name>.svg。新增单一共享 map lib/core/utils/meat_icons.dart(meatIconAsset(String name) → String),legacy MeatPresetsPage 12-protein grid、CM4 _cm4Proteins 8-protein grid、本页 help-center help_previews.dart Meat grid 三处同源消费(杜绝 376d6fd 注的 help-vs-live divergence 再发生,finding 3);Lamb + Mutton 共用 sheep.svg、Veal 是 calf 头与 Beef 整头牛刻意区分。help-vs-live mapping 通过共享 map 自动同步,不再各自维护 list。de/es/fr/it 段落是 best-effort,发版前要母语审。732f854(TAPD #1003052)起 topic1_img0.png 的 Ambient / Internal callout 也按 locale 分发——_buildHelpVisual 取 Localizations.localeOf(context).languageCode,当 (topicIndex, imageIdx) 落在 _localizedHelpImages = {(1, 0)} allowlist 内时走 topic1_img0_<lang>.png,否则走默认无后缀 PNG;新增 allowlist 项必须同时提供 5 个 locale 变体,partial 覆盖 errorBuilder 故意保持 SizedBox.shrink 不回退英文(让缺失立即在 QA 显形而非静默降级)。MaterialPageRoute 匿名 push:不进 routes map,不能 deep-link。可以接受(仅从 Help Center 进),但 future 想加 deep-link 要改。