Files
flutter-template/lib/core/sync/conflict_resolver.dart
T
SkyJourney 61017f1c39 chore: 初始化脚手架 — sunny_mochi 企业级 Flutter 模板
Core 基础设施:Flavor 三包体系、Drift+SQLCipher 加密数据库
7 拦截器 Dio 网络栈、CrashReporter 崩溃日志、Sealed Failure 错误体系
5 色板主题系统、Auth 认证骨架(Clean Architecture)、Dev Panel、Mock Adapter

通过验证:flutter analyze(0 errors)、flutter test(全绿)、staging APK 74.8MB
2026-05-14 12:51:05 +08:00

39 lines
1.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ignore_for_file: one_member_abstracts — Strategy 接口,多种实现(ServerWins/LastWriteWins/Custom
/// 冲突解决策略:服务端响应与本地版本不一致时如何决策。
///
/// v1.2 默认策略:`LastWriteWinsResolver`(按 serverUpdatedAt 比较时间戳)。
/// 业务场景需要乐观锁 / 三方合并的,单独实现 `ConflictResolver` 子类。
abstract class ConflictResolver<T> {
/// 返回解决后的最终值(由调用方写回 DB)。
T resolve({required T local, required T server});
}
/// 默认实现:服务端权威 — 本地直接被服务端覆盖。
/// 适合健康数据采集这种"服务端是 source-of-truth"的场景。
class ServerWinsResolver<T> implements ConflictResolver<T> {
const ServerWinsResolver();
@override
T resolve({required T local, required T server}) => server;
}
/// last-write-wins by timestamp。
/// 调用方传入 timestamp 比较函数(avoid 包装 generic)。
class LastWriteWinsResolver<T> implements ConflictResolver<T> {
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;
}
}