|
@@ -1,8 +1,11 @@
|
|
|
import 'dart:async';
|
|
|
|
|
|
+import 'package:fis_common/logger/logger.dart';
|
|
|
import 'package:flutter/foundation.dart';
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
+import 'package:vitalapp/architecture/app_parameters.dart';
|
|
|
+import 'package:vitalapp/rpc.dart';
|
|
|
import 'package:vitalapp/store/store.dart';
|
|
|
import 'controller.dart';
|
|
|
|
|
@@ -27,28 +30,32 @@ class _ImageAnimationState extends State<ImageAnimation>
|
|
|
late final SplashController _controller;
|
|
|
late AnimationController _animationController;
|
|
|
late Animation<double> _animation;
|
|
|
+ int _callServerTimes = 0;
|
|
|
+
|
|
|
+ ///是否本地工作站(若为True,则需等待Server启动后再结束Splash Page)
|
|
|
+ bool _isLocalStation = false;
|
|
|
+ // 定义Timer,用于轮询
|
|
|
+ Timer? _serverCheckTimer;
|
|
|
|
|
|
@override
|
|
|
void initState() {
|
|
|
super.initState();
|
|
|
-
|
|
|
+ _isLocalStation = AppParameters.data.isLocalStation;
|
|
|
+ if (_isLocalStation) {
|
|
|
+ _serverCheckTimer = Timer.periodic(
|
|
|
+ Duration(seconds: 1), (Timer t) => checkForConnected());
|
|
|
+ }
|
|
|
_controller = Get.find<SplashController>();
|
|
|
-
|
|
|
final animationCompleter = Completer<void>();
|
|
|
-
|
|
|
Future.wait([
|
|
|
_controller.loadData(),
|
|
|
animationCompleter.future,
|
|
|
]).then((_) {
|
|
|
- /// 重启判断是否是web端并且无token
|
|
|
- if (!kIsWeb || Store.user.token == null) {
|
|
|
- _controller.onRouteTo();
|
|
|
+ if (_isLocalStation) {
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
- /// web端 并且有token
|
|
|
- if (kIsWeb && Store.user.token != null) {
|
|
|
- Get.offAllNamed("/");
|
|
|
- }
|
|
|
+ _nextPage();
|
|
|
});
|
|
|
|
|
|
// 创建动画控制器
|
|
@@ -75,9 +82,37 @@ class _ImageAnimationState extends State<ImageAnimation>
|
|
|
void dispose() {
|
|
|
// 销毁动画控制器
|
|
|
_animationController.dispose();
|
|
|
+ // 确保timer被释放
|
|
|
+ _serverCheckTimer?.cancel();
|
|
|
super.dispose();
|
|
|
}
|
|
|
|
|
|
+ void checkForConnected() async {
|
|
|
+ // 这里替换成你的接口调用逻辑
|
|
|
+ bool isCallSuccess = await callServer();
|
|
|
+
|
|
|
+ if (isCallSuccess) {
|
|
|
+ logger.i('call server success,times:${_callServerTimes}');
|
|
|
+ // 如果接口调用成功,取消timer并且跳转到登录页面
|
|
|
+ _serverCheckTimer?.cancel();
|
|
|
+ _nextPage();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Future<bool> callServer() async {
|
|
|
+ try {
|
|
|
+ await rpc.vinnoServer.echoAsync();
|
|
|
+ return true;
|
|
|
+ } catch (e) {
|
|
|
+ _callServerTimes++;
|
|
|
+ logger.i('call server times:${_callServerTimes}');
|
|
|
+ if (kDebugMode) {
|
|
|
+ print('call server times:${_callServerTimes}');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
return Scaffold(
|
|
@@ -102,4 +137,16 @@ class _ImageAnimationState extends State<ImageAnimation>
|
|
|
),
|
|
|
);
|
|
|
}
|
|
|
+
|
|
|
+ void _nextPage() {
|
|
|
+ /// 重启判断是否是web端并且无token
|
|
|
+ if (!kIsWeb || Store.user.token == null) {
|
|
|
+ _controller.onRouteTo();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// web端 并且有token
|
|
|
+ if (kIsWeb && Store.user.token != null) {
|
|
|
+ Get.offAllNamed("/");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|