// ignore_for_file: one_member_abstracts — Strategy 接口,多种实现(ServerWins/LastWriteWins/Custom) /// 冲突解决策略:服务端响应与本地版本不一致时如何决策。 /// /// v1.2 默认策略:`LastWriteWinsResolver`(按 serverUpdatedAt 比较时间戳)。 /// 业务场景需要乐观锁 / 三方合并的,单独实现 `ConflictResolver` 子类。 abstract class ConflictResolver { /// 返回解决后的最终值(由调用方写回 DB)。 T resolve({required T local, required T server}); } /// 默认实现:服务端权威 — 本地直接被服务端覆盖。 /// 适合健康数据采集这种"服务端是 source-of-truth"的场景。 class ServerWinsResolver implements ConflictResolver { const ServerWinsResolver(); @override T resolve({required T local, required T server}) => server; } /// last-write-wins by timestamp。 /// 调用方传入 timestamp 比较函数(avoid 包装 generic)。 class LastWriteWinsResolver implements ConflictResolver { const LastWriteWinsResolver({ required this.localTimestamp, required this.serverTimestamp, }); final DateTime Function(T value) localTimestamp; final DateTime Function(T value) serverTimestamp; @override T resolve({required T local, required T server}) { return serverTimestamp(server).isAfter(localTimestamp(local)) ? server : local; } }