diff --git a/lib/app/core/bindings/initial_binding.dart b/lib/app/core/bindings/initial_binding.dart index 71f6b46..e1046b2 100644 --- a/lib/app/core/bindings/initial_binding.dart +++ b/lib/app/core/bindings/initial_binding.dart @@ -1,5 +1,6 @@ import 'package:get/get.dart'; import 'package:get_storage/get_storage.dart'; +import 'package:problem_check_system/app/core/controllers/app_controller.dart'; import 'package:problem_check_system/app/core/services/database_service.dart'; import 'package:problem_check_system/app/core/services/network_status_service.dart'; import 'package:problem_check_system/app/core/services/http_provider.dart'; @@ -15,12 +16,12 @@ import 'package:uuid/uuid.dart'; class InitialBinding implements Bindings { @override void dependencies() { - _registerCoreServices(); + _registerServices(); _registerRepositories(); + _registerControllers(); } - void _registerCoreServices() { - /// 立即注册所有的适配器 + void _registerServices() { Get.put(GetStorage(), permanent: true); Get.put(Uuid(), permanent: true); Get.put(HttpProvider()); @@ -53,4 +54,8 @@ class InitialBinding implements Bindings { ), ); } + + void _registerControllers() { + Get.put(AppController(), permanent: true); + } } diff --git a/lib/app/core/controllers/app_controller.dart b/lib/app/core/controllers/app_controller.dart new file mode 100644 index 0000000..a178c4d --- /dev/null +++ b/lib/app/core/controllers/app_controller.dart @@ -0,0 +1,53 @@ +// lib/app/core/controllers/app_controller.dart (新文件) + +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:problem_check_system/app/core/services/network_status_service.dart'; // 导入你的 Service + +class AppController extends GetxController { + final NetworkStatusService _networkStatusService = Get.find(); + + // 用于防止应用启动时就显示“已连接”的提示 + bool _isFirstCheck = true; + + @override + void onInit() { + super.onInit(); + + // [核心] 使用 GetX 的 'ever' worker 来监听 isOnline 的变化 + // ever() 会在每次 isOnline.value 改变时调用回调函数 + ever(_networkStatusService.isOnline, _showConnectivitySnackbar); + } + + void _showConnectivitySnackbar(bool isOnline) { + // 首次检查时,如果是连接状态则不提示,避免打扰 + if (_isFirstCheck) { + _isFirstCheck = false; + if (isOnline) { + return; // 启动时在线,静默处理 + } + } + + // 根据网络状态显示不同的 SnackBar + if (!isOnline) { + Get.snackbar( + '网络断开', + '请检查您的网络连接', + backgroundColor: Colors.red[400], + colorText: Colors.white, + icon: const Icon(Icons.wifi_off, color: Colors.white), + duration: const Duration(seconds: 5), // 网络断开时提示时间更长 + ); + } else { + // 只有在非首次检查时(即从断开恢复到连接时)才提示 + Get.snackbar( + '网络已连接', + '您现在已恢复在线状态', + backgroundColor: Colors.green[400], + colorText: Colors.white, + icon: const Icon(Icons.wifi, color: Colors.white), + duration: const Duration(seconds: 3), + ); + } + } +}