77 lines
2.3 KiB
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();
|
|
}
|
|
}
|