TKK_E32210095/lib/pages/danger_status_manager.dart

77 lines
2.3 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
class DangerStatusManager extends ChangeNotifier {
final Map<String, bool> _flameStatus = {};
final Map<String, bool> _smokeStatus = {};
final Map<String, bool> _flameBlinking = {};
final Map<String, bool> _smokeBlinking = {};
final Map<String, Timer?> _flameTimers = {};
final Map<String, Timer?> _smokeTimers = {};
bool isFlameDanger(String deviceId) => _flameStatus[deviceId] ?? false;
bool isSmokeDanger(String deviceId) => _smokeStatus[deviceId] ?? false;
bool isFlameBlinking(String deviceId) => _flameBlinking[deviceId] ?? false;
bool isSmokeBlinking(String deviceId) => _smokeBlinking[deviceId] ?? false;
void setFlameStatus(String deviceId, bool status) {
if (status) {
_startFlameTimer(deviceId);
_flameBlinking[deviceId] = true;
} else {
_flameStatus[deviceId] = false;
_flameBlinking[deviceId] = false;
_flameTimers[deviceId]?.cancel();
notifyListeners();
}
}
void setSmokeStatus(String deviceId, bool status) {
if (status) {
_startSmokeTimer(deviceId);
_smokeBlinking[deviceId] = true;
} else {
_smokeTimers[deviceId]?.cancel();
_smokeTimers[deviceId] = Timer(Duration(minutes: 5), () {
_smokeStatus[deviceId] = false;
_smokeBlinking[deviceId] = false;
notifyListeners();
});
}
_smokeStatus[deviceId] = status;
notifyListeners();
}
void _startFlameTimer(String deviceId) {
_flameStatus[deviceId] = true;
_flameTimers[deviceId]?.cancel();
_flameTimers[deviceId] = Timer(Duration(minutes: 5), () {
_flameStatus[deviceId] = false;
_flameBlinking[deviceId] = false;
notifyListeners();
});
notifyListeners();
}
void _startSmokeTimer(String deviceId) {
_smokeStatus[deviceId] = true;
_smokeTimers[deviceId]?.cancel();
_smokeTimers[deviceId] = Timer(Duration(minutes: 5), () {
_smokeStatus[deviceId] = false;
_smokeBlinking[deviceId] = false;
notifyListeners();
});
notifyListeners();
}
void resetStatus(String deviceId) {
_flameStatus[deviceId] = false;
_smokeStatus[deviceId] = false;
_flameBlinking[deviceId] = false;
_smokeBlinking[deviceId] = false;
_flameTimers[deviceId]?.cancel();
_smokeTimers[deviceId]?.cancel();
notifyListeners();
}
}