Template
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
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
// 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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user