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

87 lines
1.9 KiB
Dart

import 'package:agrilink_vocpro/core/state/result_state.dart';
import 'package:agrilink_vocpro/domain/service/mqtt_service.dart';
import 'package:flutter/material.dart';
class ControlProvider extends ChangeNotifier {
final MQTTService _mqttService = MQTTService();
bool _control_1 = false;
bool get control_1 => _control_1;
ControlProvider() {
connectMqtt();
}
ResultState mqttState = ResultState.initial;
ResultState subscribeState = ResultState.initial;
Future<void> connectMqtt() async {
mqttState = ResultState.loading;
subscribeState = ResultState.loading;
notifyListeners();
try {
final result = await _mqttService.setupMqtt();
if (result == ResultState.hasData) {
mqttState = result;
final result2 = await _mqttService.subscribeToTopic('relay1');
if (result2 == true) {
subscribeState = ResultState.hasData;
_control_1 = true;
} else {
subscribeState = ResultState.hasData;
_control_1 = false;
}
} else {
mqttState = ResultState.error;
}
} catch (e) {
mqttState = ResultState.error;
print(e);
}
notifyListeners();
}
Future<void> disconnectMqtt() async {
try {
await _mqttService.disconnectMqtt();
} catch (e) {
print(e);
rethrow;
}
notifyListeners();
}
@override
void dispose() {
disconnectMqtt();
super.dispose();
}
void switchControl1() {
_control_1 = !_control_1;
notifyListeners();
}
Future<ResultState> publishMessage(String topic, String message) async {
try {
final result = await _mqttService.publishMessage(topic, message);
return result;
} catch (e) {
print(e);
rethrow;
}
}
Future<void> subscribeToTopic(String topic) async {
try {
await _mqttService.subscribeToTopic(topic);
} catch (e) {
print(e);
rethrow;
}
}
}