import 'package:flutter/cupertino.dart'; import '../api/api_client.dart'; /// 启动页,对应 Android 端 `activity/splash/SplashActivity`。 /// /// 流程与 Android 端一致: /// 1. 从安全存储恢复本地令牌; /// 2. 无令牌 -> 直接进入登录页; /// 3. 有令牌 -> 调用 `GET /api/client/verify` 校验,失效则用 refreshToken /// 续期后再校验一次(`ApiClient.checkLoginState()`); /// 4. 校验通过进入主页,否则清空令牌并进入登录页。 class SplashPage extends StatefulWidget { const SplashPage({super.key, required this.apiClient}); final ApiClient apiClient; @override State createState() => _SplashPageState(); } class _SplashPageState extends State { @override void initState() { super.initState(); _bootstrap(); } Future _bootstrap() async { await widget.apiClient.restore(); final loggedIn = await widget.apiClient.checkLoginState(); if (!mounted) return; if (loggedIn) { Navigator.of(context).pushReplacementNamed('/home'); } else { // 令牌已失效,清空后要求重新登录。 await widget.apiClient.clear(); if (!mounted) return; Navigator.of(context).pushReplacementNamed('/login'); } } @override Widget build(BuildContext context) { return const CupertinoPageScaffold( child: Center( child: Column( mainAxisSize: MainAxisSize.min, children: [ Icon( CupertinoIcons.device_phone_portrait, size: 64, color: CupertinoColors.activeBlue, ), SizedBox(height: 20), Text( 'WebRTC 控制端', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), ), SizedBox(height: 24), CupertinoActivityIndicator(), ], ), ), ); } }