From 3f1858d733821de618798e5c0ce338e1dcbecf0f Mon Sep 17 00:00:00 2001 From: qzl Date: Fri, 20 Mar 2026 15:46:24 +0800 Subject: [PATCH] docs: finalize navigation decoupling and unified cache rollout --- .../services/calendar_repository_test.dart | 2 +- .../ui/screens/settings_screen_test.dart | 20 ++++++++++++++++++- ...3-20-navigation-cache-decoupling-design.md | 19 ++++++++++++++---- 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/apps/test/features/calendar/data/services/calendar_repository_test.dart b/apps/test/features/calendar/data/services/calendar_repository_test.dart index b178f29..cf969ae 100644 --- a/apps/test/features/calendar/data/services/calendar_repository_test.dart +++ b/apps/test/features/calendar/data/services/calendar_repository_test.dart @@ -47,7 +47,7 @@ void main() { remoteCalls += 1; return const []; }, - loadMonthFromRemote: (_, __) async => const [], + loadMonthFromRemote: (start, end) async => const [], ); final result = await repository.getDayEvents(date); diff --git a/apps/test/features/settings/ui/screens/settings_screen_test.dart b/apps/test/features/settings/ui/screens/settings_screen_test.dart index 781217e..63e6604 100644 --- a/apps/test/features/settings/ui/screens/settings_screen_test.dart +++ b/apps/test/features/settings/ui/screens/settings_screen_test.dart @@ -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()) { sl.unregister(); } + if (sl.isRegistered()) { + sl.unregister(); + } usersApi = _FakeUsersApi(apiClient); + final repository = UserProfileCacheRepository( + store: HybridCacheStore( + memory: MemoryCacheStore(), + persistent: PersistentCacheStore(), + ), + remoteLoader: usersApi.getMe, + ); sl.registerSingleton(usersApi); sl.registerSingleton(_FakeFriendsApi(apiClient)); - sl.registerSingleton(SettingsUserCache()); + sl.registerSingleton(repository); + sl.registerSingleton(SettingsUserCache(repository)); }); tearDown(() async { @@ -94,6 +109,9 @@ void main() { if (sl.isRegistered()) { await sl.unregister(); } + if (sl.isRegistered()) { + await sl.unregister(); + } }); testWidgets('settings screen removes account row and shows logout button', ( diff --git a/docs/plans/2026-03-20-navigation-cache-decoupling-design.md b/docs/plans/2026-03-20-navigation-cache-decoupling-design.md index 1d0386e..3aab454 100644 --- a/docs/plans/2026-03-20-navigation-cache-decoupling-design.md +++ b/docs/plans/2026-03-20-navigation-cache-decoupling-design.md @@ -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 不可用场景兜底。