优化 demo

This commit is contained in:
Cody
2026-03-08 21:13:48 +08:00
parent c310ded32a
commit 9610c455ec
7 changed files with 59 additions and 53 deletions

View File

@@ -3205,7 +3205,13 @@ flowchart LR
<p><strong>两大核心逻辑</strong></p>
<p>1. <strong>MVVM 分层职责</strong>Viewview/只负责渲染和用户交互ViewModelpresentation/持有状态并处理业务逻辑Modelmodel/ + entities/)定义数据结构 —— 三者通过 Riverpod Provider 连接,职责严格分离。</p>
<p>2. <strong>Riverpod 单向数据流</strong>:用户操作 → <code>ref.read(vm.notifier).action()</code> → ViewModel 处理逻辑 → <code>state = newState</code><code>ref.watch(vm)</code> 检测变化 → View 自动 rebuild。数据永远单向流动UI 永远是状态的函数。</p>
<p>3. <strong>Widget 纯展示原则</strong>ViewWidget层对业务数据严格只读。所有逻辑导航、CRUD、状态变更、条件判断必须在 ViewModel 中完成View 只调用 ViewModel 方法并渲染返回的 State。包括 demo/测试页面也不例外</p>
<p>3. <strong>Widget 纯展示原则</strong><code>build()</code> 只做一件事——把 State 属性映射成 Widget 树,不允许出现任何计算或逻辑</p>
<ul>
<li><strong>派生显示值必须是 State getter</strong>:凡是需要从 State 字段推导出另一个值(文本、颜色、样式等),一律写成 State 的 getterWidget 只读取结果。例如:<code>String get buttonLabel =&gt; testStarted ? '结束' : '开始';</code>Widget 写 <code>state.buttonLabel</code>,不在 <code>build()</code> 里写三元。</li>
<li><strong>禁止 <code>build()</code> 内定义局部计算变量</strong><code>final isSelected = current == mode</code> 这类从构造参数/state 派生值的局部变量,不属于 <code>build()</code>。组件应接受已算好的 <code>bool isSelected</code> 参数,由父级或 State getter 负责计算。</li>
<li><strong>导航、CRUD、状态变更全部在 ViewModel 中完成</strong>Widget 只转发事件:<code>onTap: () =&gt; ref.read(vm.notifier).doAction()</code></li>
<li><strong>demo/测试页面同样适用</strong>demo 代码是示范,别人会照着模仿,写法必须与正式页面完全一致。</li>
</ul>
</blockquote>
<hr>