|
|
@ -1,50 +1,49 @@ |
|
|
import 'dart:async'; |
|
|
import 'dart:async'; |
|
|
import 'package:flutter/material.dart'; |
|
|
import 'package:flutter/material.dart'; |
|
|
import 'package:get/get.dart'; |
|
|
import 'package:get/get.dart'; |
|
|
|
|
|
import 'package:get_storage/get_storage.dart'; |
|
|
|
|
|
import '../../../data/models/user_Info.dart'; |
|
|
import '../../../routes/app_routes.dart'; |
|
|
import '../../../routes/app_routes.dart'; |
|
|
import '../../../core/themes/theme_service.dart'; |
|
|
import '../../../core/themes/theme_service.dart'; |
|
|
|
|
|
import '../../../data/services/network/api.dart'; |
|
|
|
|
|
|
|
|
class SplashController extends GetxController { |
|
|
class SplashController extends GetxController { |
|
|
|
|
|
final GetStorage _storage = GetStorage(); |
|
|
// 进度条动画控制 |
|
|
// 进度条动画控制 |
|
|
final _loadingProgress = 0.0.obs; |
|
|
final _loadingProgress = 0.0.obs; |
|
|
double get loadingProgress => _loadingProgress.value; |
|
|
double get loadingProgress => _loadingProgress.value; |
|
|
|
|
|
|
|
|
// 版本号 |
|
|
|
|
|
final String version = 'v1.0.0'; |
|
|
|
|
|
|
|
|
|
|
|
// 资源加载状态 |
|
|
// 资源加载状态 |
|
|
final _isResourceLoaded = false.obs; |
|
|
final _isResourceLoaded = false.obs; |
|
|
bool get isResourceLoaded => _isResourceLoaded.value; |
|
|
bool get isResourceLoaded => _isResourceLoaded.value; |
|
|
|
|
|
|
|
|
|
|
|
// 版本号 |
|
|
|
|
|
final String version = 'v1.0.0'; |
|
|
|
|
|
|
|
|
// 主题服务 |
|
|
// 主题服务 |
|
|
final ThemeService _themeService = ThemeService(); |
|
|
final ThemeService _themeService = ThemeService(); |
|
|
|
|
|
|
|
|
@override |
|
|
@override |
|
|
void onInit() { |
|
|
void onInit() { |
|
|
super.onInit(); |
|
|
super.onInit(); |
|
|
|
|
|
|
|
|
// 确保页面先渲染,再执行其他操作 |
|
|
|
|
|
WidgetsBinding.instance.addPostFrameCallback((_) { |
|
|
WidgetsBinding.instance.addPostFrameCallback((_) { |
|
|
// 启动进度条动画 |
|
|
|
|
|
_startLoadingAnimation(); |
|
|
_startLoadingAnimation(); |
|
|
|
|
|
|
|
|
// 异步加载应用资源 |
|
|
|
|
|
_loadAppResources(); |
|
|
_loadAppResources(); |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 进度条动画 |
|
|
// 进度条动画(持续2秒) |
|
|
void _startLoadingAnimation() { |
|
|
void _startLoadingAnimation() { |
|
|
// 模拟0.5秒的加载进度 |
|
|
const totalDuration = 2000; // 动画总时长2秒 |
|
|
Timer.periodic(const Duration(milliseconds: 5), (timer) { |
|
|
const steps = totalDuration ~/ 50; // 40次更新(50ms间隔) |
|
|
|
|
|
final stepValue = 1.0 / steps; |
|
|
|
|
|
|
|
|
|
|
|
Timer.periodic(const Duration(milliseconds: 50), (timer) { |
|
|
if (_loadingProgress.value < 1.0) { |
|
|
if (_loadingProgress.value < 1.0) { |
|
|
_loadingProgress.value += 0.01; |
|
|
_loadingProgress.value += stepValue; |
|
|
} else { |
|
|
} else { |
|
|
timer.cancel(); |
|
|
timer.cancel(); |
|
|
// 当进度条动画完成且资源加载完毕时,跳转到登录页面 |
|
|
_checkNavigateCondition(); |
|
|
if (_isResourceLoaded.value) { |
|
|
|
|
|
_navigateToLogin(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
@ -52,37 +51,63 @@ class SplashController extends GetxController { |
|
|
// 异步加载应用资源 |
|
|
// 异步加载应用资源 |
|
|
Future<void> _loadAppResources() async { |
|
|
Future<void> _loadAppResources() async { |
|
|
try { |
|
|
try { |
|
|
// 在这里可以添加应用初始化需要的资源加载 |
|
|
// 模拟资源加载(如API配置、本地缓存等) |
|
|
// 例如:预加载图片、初始化数据库、加载配置等 |
|
|
await Future.delayed(const Duration(milliseconds: 1500)); |
|
|
|
|
|
|
|
|
// 模拟耗时操作 |
|
|
|
|
|
await Future.delayed(const Duration(milliseconds: 100)); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: 在此处添加实际的资源加载代码 |
|
|
// 实际资源加载代码 |
|
|
|
|
|
// await _loadImages(); |
|
|
|
|
|
// await _initDatabase(); |
|
|
|
|
|
|
|
|
// 标记资源加载完成 |
|
|
|
|
|
_isResourceLoaded.value = true; |
|
|
_isResourceLoaded.value = true; |
|
|
|
|
|
_checkNavigateCondition(); |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
Get.snackbar('错误', '资源加载失败,请检查网络连接'); |
|
|
|
|
|
_isResourceLoaded.value = true; // 允许用户继续使用 |
|
|
|
|
|
print('资源加载错误: $e'); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 如果进度条已经走完,则跳转到登录页面 |
|
|
// 检查跳转条件 |
|
|
if (_loadingProgress.value >= 1.0) { |
|
|
void _checkNavigateCondition() { |
|
|
|
|
|
if (_loadingProgress.value >= 1.0 && _isResourceLoaded.value) { |
|
|
_navigateToLogin(); |
|
|
_navigateToLogin(); |
|
|
} |
|
|
} |
|
|
} catch (e) { |
|
|
} |
|
|
// 处理资源加载错误 |
|
|
|
|
|
// 即使加载失败,也应该允许用户继续使用应用 |
|
|
|
|
|
_isResourceLoaded.value = true; |
|
|
|
|
|
|
|
|
|
|
|
// 记录错误日志 |
|
|
// 获取登录Token并跳转 |
|
|
print('资源加载错误: $e'); |
|
|
Future<void> _navigateToLogin() async { |
|
|
|
|
|
final isLoggedIn = await getLoginToken(); |
|
|
|
|
|
if (isLoggedIn) { |
|
|
|
|
|
// Get.offAllNamed(Routes.login); // 跳转到登录页 |
|
|
|
|
|
// Get.offAllNamed(Routes.home); // 跳转到主页 |
|
|
|
|
|
Get.offAllNamed(Routes.pairing); |
|
|
|
|
|
} else { |
|
|
|
|
|
Get.offAllNamed(Routes.login); // 跳转到登录页 |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 跳转到登录页面 |
|
|
Future<bool> getLoginToken() async { |
|
|
void _navigateToLogin() { |
|
|
try { |
|
|
// 添加一个小延迟,确保UI完全渲染 |
|
|
print('getLoginToken:进来了'); |
|
|
Future.delayed(const Duration(milliseconds: 200), () { |
|
|
//if (User.getname() != "") { |
|
|
Get.offAllNamed(Routes.login); |
|
|
final response = await Api.tokenlogin(); |
|
|
}); |
|
|
print('getLoginToken: $response'); |
|
|
|
|
|
if (response == null) return false; |
|
|
|
|
|
|
|
|
|
|
|
if (response['user'] != '') { |
|
|
|
|
|
print('getLoginToken:进来了'); |
|
|
|
|
|
// 根据API设计调整 |
|
|
|
|
|
final user = User.fromJson(response); |
|
|
|
|
|
// 存储用户信息(示例) |
|
|
|
|
|
await _storage.write('user_info', user.toJson()); |
|
|
|
|
|
return true; |
|
|
|
|
|
} |
|
|
|
|
|
//return true; |
|
|
|
|
|
//} |
|
|
|
|
|
return false; |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
print('Token获取失败: $e'); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
// fdp挑转登陆 |
|
|
|
|
|
} |
|
|
} |
|
|
|