feat(client): 设备数超限挡板 DeviceLimitScreen(#16 前端)
登录响应带 device_limit 时,顶层路由把用户挡在「移除设备」页,降到上限内才进主界面。 - auth_api.dart:AuthTokens 解析 device_limit;新增 DeviceLimit/DeviceBrief 模型 - auth_provider.dart:deviceLimitProvider(挡板状态);auth_screen 登录后置入 - main.dart:isLoggedIn 后若 deviceLimit!=null → DeviceLimitScreen(挡 HomeShell) - screens/device_limit_screen.dart(新):设备列表(本机标注不可删)+ 每台移除 + 一键「移除最久未用」+ 退出登录;降到上限内自动清挡板放行(复用 devicesProvider.remove) - l10n:deviceLimitTitle/Desc/RemoveOldest(zh/en);顺带修 devicesSub 文案 5→3 台 analyze 干净;client 全量测试 161 通过。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -22,6 +22,7 @@ import 'state/connection_provider.dart';
|
||||
import 'state/nodes_provider.dart';
|
||||
import 'state/settings_provider.dart';
|
||||
import 'system_tray.dart';
|
||||
import 'screens/device_limit_screen.dart';
|
||||
import 'widgets/auth_screen.dart';
|
||||
import 'widgets/onboarding_screen.dart';
|
||||
import 'widgets/pangolin_logo.dart';
|
||||
@@ -272,6 +273,11 @@ class _RootFlowState extends ConsumerState<RootFlow> {
|
||||
if (!auth.isLoggedIn) {
|
||||
return AuthScreen(t: t, onDone: () { _afterAuth(); });
|
||||
}
|
||||
// 设备数超上限挡板(#16):登录成功但活跃设备超套餐上限 → 先移除设备降到上限内。
|
||||
final deviceLimit = ref.watch(deviceLimitProvider);
|
||||
if (deviceLimit != null) {
|
||||
return DeviceLimitScreen(t: t, limit: deviceLimit);
|
||||
}
|
||||
if (_forceOnboarding) {
|
||||
return OnboardingScreen(t: t, onDone: () { _afterOnboarding(); });
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user