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:
SkyJourney
2026-05-14 12:51:05 +08:00
commit 61017f1c39
204 changed files with 15386 additions and 0 deletions
+38
View File
@@ -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;
}
}