Files
home/home_monitor/lib/providers/monitor_provider.dart
panw 6a0d84f063 feat(app): 初始化家庭网络监控Flutter应用基本结构
- 添加Flutter项目基础文件与配置,包括.gitignore和analysis_options.yaml
- 配置Android相关文件及Gradle构建脚本支持
- 新增设备状态与网络状态数据模型及相关枚举
- 实现网络检测及网速测试服务
- 创建监控状态管理Provider,实现设备状态管理和自动刷新机制
- 编写主界面HomeScreen,包括设备列表、网速仪表盘及基础交互
- 添加资源文件支持应用图标和启动画面
- 配置项目元数据文件,支持Flutter迁移及版本控制
- 新增项目README,提供入门指引和相关资源链接
2025-12-08 09:01:47 +08:00

170 lines
4.0 KiB
Dart

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<DeviceStatus> _devices = [];
bool _isLoading = false;
bool _isTestingSpeed = false;
String? _errorMessage;
// 定时器
Timer? _autoRefreshTimer;
int _refreshInterval = 30; // 秒
// Getters
NetworkStatus get networkStatus => _networkStatus;
List<DeviceStatus> 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<void> 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<void> runSpeedTest() async {
_isTestingSpeed = true;
notifyListeners();
try {
_networkStatus = await _speedTestService.runFullTest();
} catch (e) {
_errorMessage = e.toString();
} finally {
_isTestingSpeed = false;
notifyListeners();
}
}
/// 检测单个设备
Future<void> 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();
}
}