docs: finalize navigation decoupling and unified cache rollout
This commit is contained in:
@@ -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 不可用场景兜底。
|
||||
|
||||
Reference in New Issue
Block a user