smartfarming-mobile/agrilink_vocpro/lib/features/control/provider/control_provider.dart

119 lines
2.9 KiB
Dart
Raw Normal View History

2024-10-02 13:07:28 +00:00
import 'package:agrilink_vocpro/core/state/result_state.dart';
2024-11-12 03:54:42 +00:00
import 'package:agrilink_vocpro/data/model/relay_response.dart';
import 'package:agrilink_vocpro/domain/service/app_service.dart';
2024-10-15 07:53:40 +00:00
import 'package:flutter/foundation.dart';
2024-10-01 03:49:55 +00:00
class ControlProvider extends ChangeNotifier {
final AppService _appService = AppService();
2024-10-01 03:49:55 +00:00
bool _control_1 = false;
bool get control_1 => _control_1;
bool _control_2 = false;
bool get control_2 => _control_2;
2024-11-12 03:54:42 +00:00
bool _control_3 = false;
bool get control_3 => _control_3;
Relay _relay1 = Relay();
Relay get relay1 => _relay1;
Relay _relay2 = Relay();
Relay get relay2 => _relay2;
Relay _relay3 = Relay();
Relay get relay3 => _relay3;
2024-10-02 13:07:28 +00:00
ControlProvider() {
getRelayStatus();
2024-10-02 13:07:28 +00:00
}
ResultState relayState = ResultState.initial;
Future<void> getRelayStatus() async {
relayState = ResultState.loading;
notifyListeners();
2024-10-02 13:07:28 +00:00
try {
2024-10-15 07:53:40 +00:00
if (kDebugMode) {
print('try to get relay status...');
}
final result = await _appService.getRelayStatus();
if (result.success == true) {
for (var element in result.data!) {
if (element.number == 1) {
2024-11-12 03:54:42 +00:00
_relay1 = element;
switchControl(element.currentStatus ?? false, relayNumber: 1);
}
if (element.number == 2) {
2024-11-12 03:54:42 +00:00
_relay2 = element;
switchControl(element.currentStatus ?? false, relayNumber: 2);
}
if (element.number == 3) {
_relay3 = element;
switchControl(element.currentStatus ?? false, relayNumber: 3);
}
}
relayState = ResultState.hasData;
notifyListeners();
} else {
relayState = ResultState.error;
notifyListeners();
}
2024-10-02 13:07:28 +00:00
} catch (e) {
relayState = ResultState.error;
notifyListeners();
2024-10-15 07:53:40 +00:00
if (kDebugMode) {
2024-10-24 07:09:30 +00:00
print('Error Getting Relay Status: $e');
2024-10-15 07:53:40 +00:00
}
}
}
Future<bool> switchRelay(int relayNumber, bool state) async {
relayState = ResultState.loading;
notifyListeners();
2024-11-12 03:54:42 +00:00
final int stateConverted = state ? 1 : 0;
try {
final result = await _appService.switchRelay(
2024-11-12 03:54:42 +00:00
relayNumber: relayNumber,
state: stateConverted,
);
if (result.success == true) {
relayState = ResultState.hasData;
notifyListeners();
2024-10-16 07:25:33 +00:00
if (kDebugMode) {
print(result.message);
}
return true;
} else {
return false;
}
} catch (e) {
if (kDebugMode) {
print(e);
}
relayState = ResultState.error;
notifyListeners();
return false;
2024-10-02 13:07:28 +00:00
}
}
2024-10-01 03:49:55 +00:00
2024-11-12 03:54:42 +00:00
void switchControl(bool value, {required int relayNumber}) {
switch (relayNumber) {
case 1:
_control_1 = value;
break;
case 2:
_control_2 = value;
break;
case 3:
_control_3 = value;
break;
default:
return;
}
notifyListeners();
2024-10-01 03:49:55 +00:00
}
}