docs: finalize navigation decoupling and unified cache rollout

This commit is contained in:
qzl
2026-03-20 15:46:24 +08:00
parent 20f3285244
commit 3f1858d733
3 changed files with 35 additions and 6 deletions
@@ -47,7 +47,7 @@ void main() {
remoteCalls += 1;
return const <ScheduleItemModel>[];
},
loadMonthFromRemote: (_, __) async => const <ScheduleItemModel>[],
loadMonthFromRemote: (start, end) async => const <ScheduleItemModel>[],
);
final result = await repository.getDayEvents(date);
@@ -1,10 +1,14 @@
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:social_app/core/cache/hybrid_cache_store.dart';
import 'package:social_app/core/cache/memory_cache_store.dart';
import 'package:social_app/core/cache/persistent_cache_store.dart';
import 'package:social_app/core/api/i_api_client.dart';
import 'package:social_app/core/di/injection.dart';
import 'package:social_app/features/friends/data/friends_api.dart';
import 'package:social_app/features/settings/data/services/settings_user_cache.dart';
import 'package:social_app/features/settings/data/services/user_profile_cache_repository.dart';
import 'package:social_app/features/settings/ui/screens/settings_screen.dart';
import 'package:social_app/features/users/data/models/user_response.dart';
import 'package:social_app/features/users/data/users_api.dart';
@@ -78,10 +82,21 @@ void main() {
if (sl.isRegistered<SettingsUserCache>()) {
sl.unregister<SettingsUserCache>();
}
if (sl.isRegistered<UserProfileCacheRepository>()) {
sl.unregister<UserProfileCacheRepository>();
}
usersApi = _FakeUsersApi(apiClient);
final repository = UserProfileCacheRepository(
store: HybridCacheStore(
memory: MemoryCacheStore(),
persistent: PersistentCacheStore(),
),
remoteLoader: usersApi.getMe,
);
sl.registerSingleton<UsersApi>(usersApi);
sl.registerSingleton<FriendsApi>(_FakeFriendsApi(apiClient));
sl.registerSingleton<SettingsUserCache>(SettingsUserCache());
sl.registerSingleton<UserProfileCacheRepository>(repository);
sl.registerSingleton<SettingsUserCache>(SettingsUserCache(repository));
});
tearDown(() async {
@@ -94,6 +109,9 @@ void main() {
if (sl.isRegistered<SettingsUserCache>()) {
await sl.unregister<SettingsUserCache>();
}
if (sl.isRegistered<UserProfileCacheRepository>()) {
await sl.unregister<UserProfileCacheRepository>();
}
});
testWidgets('settings screen removes account row and shows logout button', (
@@ -267,8 +267,19 @@
1. 若 M1 不稳定,可先回退 shell 改造并保留缓存模块。
2. 若缓存接入问题集中,可按域回退(user/calendar/todo 分域开关)。
## 12. 待确认参数(实施前锁定
## 12. 最终落地参数(2026-03-20
1. 软/硬过期默认值是否按本设计直接采用。
2. 是否立即展示“上次同步时间”
3. 是否在首版启用“网络恢复自动静默刷新”
1. 导航分级
- 一级页面唯一为 `Home`
- 二级页面(日/月、待办、设置)侧滑返回统一回 `Home`,不允许直接退出 App
- App 退出入口仅保留在 `Home`
2. 缓存默认策略
- `user:profile`:软过期 30min,硬过期 24h。
- `calendar:day`:软过期 2min,硬过期 30min。
- `calendar:month`:软过期 5min,硬过期 60min。
- `todo:list:pending`:软过期 2min,硬过期 30min。
3. 生命周期刷新
- App 回前台时启用最小间隔 5min 的静默刷新协调器。
4. 提醒归档策略
- App 活跃态点击取消:立即请求后端归档。
- 延迟归档(pending/outbox)仅用于 App 不可用场景兜底。