feat(app): session restore on startup — no forced re-login after app restart
用户反馈:关闭 App 重开每次都要登录。根因:会话已持久化(安全存储, 服务端 TTL 30 天),但启动固定落在登录页——无人消费已存会话。 - _StartupGate(home):watch sessionAccount——在场直进 HomePage,离场 LoginPage;状态驱动(401/登出清会话后 gate 自动重建,不依赖导航时序) - onUnauthorized 保留 push 兜底(home 路由被显式导航替换后的 401 场景) - 测试适配(boot 401 两项重写通过;397/397 全绿) Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -8,10 +8,10 @@ import 'package:dio/dio.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:photo_live/app/app.dart';
|
||||
import 'package:photo_live/pages/login_page.dart';
|
||||
import 'package:photo_live/core/api_client.dart';
|
||||
import 'package:photo_live/core/error_codes.dart';
|
||||
import 'package:photo_live/core/session_store.dart';
|
||||
import 'package:photo_live/pages/login_page.dart';
|
||||
|
||||
import '../helpers/fakes.dart';
|
||||
|
||||
@@ -43,10 +43,7 @@ void main() {
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
// 先抵 /home 再触发 401:验证清栈(回 /login 而非叠加路由)。
|
||||
rootNavigatorKey.currentState!
|
||||
.pushNamedAndRemoveUntil('/home', (route) => false);
|
||||
await tester.pumpAndSettle();
|
||||
// UI06 启动门:有会话直接渲染 HomePage(无须手动 push)。
|
||||
|
||||
// 触发 401 但不在测试体内 await(fake-async 下时钟由 pump 推进,
|
||||
// 阻塞等待会死锁);AppException 由 ignore 吞掉,断言在下方。
|
||||
|
||||
Reference in New Issue
Block a user