import 'dart:async'; import 'package:flutter/foundation.dart'; import '../models/models.dart'; import '../services/services.dart'; /// 监控状态管理 class MonitorProvider extends ChangeNotifier { final NetworkService _networkService = NetworkService(); final SpeedTestService _speedTestService = SpeedTestService(); // 状态 NetworkStatus _networkStatus = NetworkStatus.initial(); List _devices = []; bool _isLoading = false; bool _isTestingSpeed = false; String? _errorMessage; // 定时器 Timer? _autoRefreshTimer; int _refreshInterval = 30; // 秒 // Getters NetworkStatus get networkStatus => _networkStatus; List get devices => _devices; bool get isLoading => _isLoading; bool get isTestingSpeed => _isTestingSpeed; String? get errorMessage => _errorMessage; int get refreshInterval => _refreshInterval; // 在线设备数量 int get onlineDevicesCount => _devices.where((d) => d.isOnline).length; // 离线设备数量 int get offlineDevicesCount => _devices.where((d) => d.state == DeviceState.offline).length; /// 初始化默认设备列表 void initDefaultDevices() { _devices = [ DeviceStatus( id: '1', name: '主路由器', type: DeviceType.gateway, ip: '192.168.1.1', port: 80, lastCheck: DateTime.now(), ), DeviceStatus( id: '2', name: '旁路由', type: DeviceType.bypass, ip: '192.168.1.2', port: 80, lastCheck: DateTime.now(), ), DeviceStatus( id: '3', name: 'NAS', type: DeviceType.nas, ip: '192.168.1.100', port: 5000, lastCheck: DateTime.now(), ), ]; notifyListeners(); } /// 添加设备 void addDevice(DeviceStatus device) { _devices.add(device); notifyListeners(); } /// 移除设备 void removeDevice(String id) { _devices.removeWhere((d) => d.id == id); notifyListeners(); } /// 更新设备 void updateDevice(DeviceStatus device) { final index = _devices.indexWhere((d) => d.id == device.id); if (index != -1) { _devices[index] = device; notifyListeners(); } } /// 刷新所有状态 Future refreshAll() async { _isLoading = true; _errorMessage = null; notifyListeners(); try { // 检测网络状态 _networkStatus = await _speedTestService.quickCheck(); // 检测所有设备 if (_devices.isNotEmpty) { _devices = await _networkService.checkAllDevices(_devices); } } catch (e) { _errorMessage = e.toString(); } finally { _isLoading = false; notifyListeners(); } } /// 运行网速测试 Future runSpeedTest() async { _isTestingSpeed = true; notifyListeners(); try { _networkStatus = await _speedTestService.runFullTest(); } catch (e) { _errorMessage = e.toString(); } finally { _isTestingSpeed = false; notifyListeners(); } } /// 检测单个设备 Future checkSingleDevice(String deviceId) async { final index = _devices.indexWhere((d) => d.id == deviceId); if (index == -1) return; final device = _devices[index]; final updatedDevice = await _networkService.checkDevice(device); _devices[index] = updatedDevice; notifyListeners(); } /// 启动自动刷新 void startAutoRefresh({int intervalSeconds = 30}) { _refreshInterval = intervalSeconds; stopAutoRefresh(); _autoRefreshTimer = Timer.periodic( Duration(seconds: intervalSeconds), (_) => refreshAll(), ); } /// 停止自动刷新 void stopAutoRefresh() { _autoRefreshTimer?.cancel(); _autoRefreshTimer = null; } /// 设置刷新间隔 void setRefreshInterval(int seconds) { _refreshInterval = seconds; if (_autoRefreshTimer != null) { startAutoRefresh(intervalSeconds: seconds); } notifyListeners(); } @override void dispose() { stopAutoRefresh(); super.dispose(); } }