手机怎样设置手表,并记住用户输入
接收已经跑通,这次从一个体重输入框出发,把校验、组帧、发送和保存串起来,区分每一步完成的含义。
1 · 输入框给出的是文字
用户输入体重时,TextField 提供字符串。字符串可能为空、带非数字字符或超出合理范围,不能直接当成可发送数字。先用 double.tryParse,再检查范围;年龄用 int.tryParse。失败时在输入附近说明原因,保留用户输入。
事件回调片段 · 范围是练习输入约束,产品需明确自己的参数规则
final weight = double.tryParse(weightText);
final age = int.tryParse(ageText);
if (weight == null || age == null ||
weight <= 0 || weight > 300 || age <= 0 || age > 120) {
return;
}
await ble.sendUserProfile(weight, age);sendUserProfile 来自当前项目,负责把数值转换成协议载荷并发送。先沿它进入 packFrame,核对消息类型、字段倍率和字节顺序,再追踪发送到 FFE2;不用重新发明一套设置协议。
2 · 发送期间,为什么要暂时禁用按钮
快速连续点击会发起多次异步写入。先设置 sending=true,禁用提交按钮;等待结束后在 finally 中恢复。失败时给出结果,避免按钮一直停在发送中。等待返回后先检查 mounted,再修改页面状态。
服务内部的写入串行队列保证多条应用帧不会在分块之间任意交错。设备实际可写长度通常与已协商 MTU 有关;大帧拆块由服务处理。不能把所有界面按钮都直接调用特征 write,绕过现有的串行发送。
3 · 写入完成,说明了哪一步
一次蓝牙写入结束,表示这一层操作结束;手表是否已经解析并应用设置,还要看对应应用消息是否有确认和状态反馈。当前基础用户配置命令没有像原型恢复那样的完整提交事务,页面用语要说明发送结果,不宣称完成了没有反馈可证的业务。
会话控制调用 sendSessionStart、sendSessionEnd、sendSessionAbort;开始记录后还需要看手表反馈的有效样本数和版本变化。前端显示 Recording 并不保证每个采样窗口都被接纳,原型更新细节接到支线五 A。
4 · 关闭 App 后,输入值为什么丢了
需要 shared_preferences 包及其导入;在独立设置实验中使用
final prefs = await SharedPreferences.getInstance();
await prefs.setDouble("weightKg", weight);
final savedWeight = prefs.getDouble("weightKg");State 字段只在当前运行中保存值。SharedPreferences 适合简单键值设置,保存与读取也具有异步步骤。先使用独立练习键名,加载完成后若页面仍在,再把值显示回去。用户个人档案、联系人和当前蓝牙连接是不同生命周期的数据。
当前项目联系人已经持久化;完整个人档案恢复流程尚未实现,且连接时还会发默认体重、年龄。这里的设置保存是新增练习,接回项目时必须同时梳理默认下发顺序,不能只增加一个本地存储调用就认为重连问题已经解决。
5 · 把双向流程写成一张记录表
| 操作 | 观察位置 |
|---|---|
| 提交配置 | 输入转换结果、发送消息原始字节、发送层结果。 |
| 主控处理 | 串口帧解析与设置函数的实际调用。 |
| 重新连接 | 本地已保存值、默认值和实际下发顺序。 |
| 结束训练会话 | 设备原型版本和有效样本数,而不是仅看按钮文字。 |
先用一组合法参数,核对手机和主控记录;再输入空值与错误文本,确认不会发送。最后重启练习 App,验证保存值恢复;真实项目仍按其现有默认行为记录。