蓝牙和WiFi的一直在后台运行的函数
import 'package:clean_ai/preference_message_type/share_preferences.dart';
import 'package:clean_ai/utils/disconnect_device_bluetooth_sheet_utils.dart';
import 'package:clean_ai/void/bluetooth_scan_void.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'dart:async';
import 'package:clean_ai/getx/wifi_blue_get.dart';
import 'package:clean_ai/rpx/rpx.dart';
import 'package:clean_ai/utils/style_text_utils.dart';
import 'package:get/get.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'characteristic_connect_device/characteristic_write_notify_device_utils.dart';
import 'communication_protocols/byte_map_utils/int_byte.dart';
import 'communication_protocols/byte_map_utils/string_byte16.dart';
import 'device/device_failure_level/device_failure_sheet_utils.dart';
import 'flutter_blue/bluetooth_notify_message_parse/parse_last_value_SharedPreferences_utils.dart';
import 'flutter_blue/bluetooth_write_device_message/blue_write_utils.dart';
import 'flutter_blue/bluetooth_write_device_message/write_bluetooth_msg_ping.dart';
import 'flutter_wifi/void/wifi_sub.dart';
import 'getx/blue_device_alarm_message_getx.dart';
import 'getx/blue_device_log_getx.dart';
import 'getx/blue_get_battery_message_get.dart';
import 'getx/blue_write_agreement_getx.dart';
import 'getx/device_connect_type_wifi__blue_get.dart';
import 'getx/update_disbale_run_getx.dart';
class ContinuousTaskManager {
static final ContinuousTaskManager _instance =
ContinuousTaskManager._internal();
factory ContinuousTaskManager() => _instance;
ContinuousTaskManager._internal();
Timer? deviceConnectTimer;
Timer? parsingValueTimer;
Timer? wifiConnectToConnectBlue;
StreamSubscription<List<int>>? _lastValueSubscription;
StreamSubscription<BluetoothConnectionState>? _connectionStateSubscription;
StreamSubscription<BluetoothAdapterState>? _adapterStateSubscription;
GlobalWiFiBluetooth globalWiFiBluetooth = Get.put(GlobalWiFiBluetooth());
BlueDeviceLogGet blueDeviceLogGet = Get.put(BlueDeviceLogGet());
BlueWriteAgreement blueWriteAgreement = Get.put(BlueWriteAgreement());
UpdateDisableRunGetX updateDisableRunGetX = Get.put(UpdateDisableRunGetX());
BlueDeviceAlarmMessageGetX blueDeviceAlarmMessageGetX =
Get.put(BlueDeviceAlarmMessageGetX());
BlueGetBatteryMessageGetX blueGetBatteryMessageGetX =
Get.put(BlueGetBatteryMessageGetX());
DeviceConnectTypeWifiBlueGet deviceConnectTypeWifiBlueGet =
Get.put(DeviceConnectTypeWifiBlueGet());
void startContinuousTask() {
if (deviceConnectTimer != null) {
deviceConnectTimer!.cancel();
}
if (_connectionStateSubscription != null) {
_connectionStateSubscription!.cancel();
}
if (wifiConnectToConnectBlue != null) {
wifiConnectToConnectBlue!.cancel();
}
if (_lastValueSubscription != null) {
_lastValueSubscription!.cancel();
}
if (parsingValueTimer != null) {
parsingValueTimer!.cancel();
}
deviceConnectTimer =
Timer.periodic(const Duration(milliseconds: 1000), (_) {
if (deviceConnectTypeWifiBlueGet.client != null &&
deviceConnectTypeWifiBlueGet.client!.connectionStatus!.state ==
MqttConnectionState.connected) {
deviceConnectTypeWifiBlueGet.wifiConnectDeviceVoid(true);
globalWiFiBluetooth.wifiDisconnectVoid(1);
} else {
deviceConnectTypeWifiBlueGet.wifiConnectDeviceVoid(false);
globalWiFiBluetooth.wifiDisconnectVoid(2);
}
if (globalWiFiBluetooth.device != null &&
_connectionStateSubscription == null) {
_connectionStateSubscription =
globalWiFiBluetooth.device!.connectionState.listen((state) async {
if (state == BluetoothConnectionState.connected) {
deviceConnectTypeWifiBlueGet.blueConnectDeviceVoid(true);
} else {
deviceConnectTypeWifiBlueGet.blueConnectDeviceVoid(false);
}
});
}
if (_adapterStateSubscription == null) {
BluetoothScanVoid.bluetoothScanVoid(callback: () {
_adapterStateSubscription = FlutterBluePlus.adapterState
.listen((BluetoothAdapterState state) {
if (state == BluetoothAdapterState.on) {
deviceConnectTypeWifiBlueGet.flutterBlueStateVoid(true);
} else {
deviceConnectTypeWifiBlueGet.flutterBlueStateVoid(false);
}
});
});
}
if ((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected &&
globalWiFiBluetooth.characteristicWrite != null &&
deviceConnectTypeWifiBlueGet.flutterBlueState.value) ||
deviceConnectTypeWifiBlueGet.wifiConnectDevice.value) {
try {
BlueWriteUtils.blueWriteUtils(
WriteBluetoothMsgPing.writeBluetoothMsgPing(),
globalWiFiBluetooth);
} catch (e) {
}
}
if ((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isDisconnected &&
!deviceConnectTypeWifiBlueGet.wifiConnectDevice.value &&
!globalWiFiBluetooth.timeOutStatus.value &&
globalWiFiBluetooth.isDevicePage &&
!blueWriteAgreement.isUpdateFirmwareAFloat.value)) {
if (!deviceConnectTypeWifiBlueGet.flutterBlueState.value) {
return;
}
if (globalWiFiBluetooth.connectNum.value < 10) {
if (globalWiFiBluetooth.connectNum.value == 0) {
globalWiFiBluetooth
.connectNumVoid(globalWiFiBluetooth.connectNum.value + 1);
reconnectDeviceUI();
}
}
}
if (((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected) ||
deviceConnectTypeWifiBlueGet.wifiConnectDevice.value) &&
!globalWiFiBluetooth.timeOutStatus.value &&
globalWiFiBluetooth.isDevicePage &&
!blueWriteAgreement.isUpdateFirmwareAFloat.value) {
if (blueDeviceAlarmMessageGetX.alarmStringDate.isNotEmpty &&
blueDeviceAlarmMessageGetX.alarmSheet.value == 0) {
DeviceFailureSheetUtils.deviceFailureSheetUtils(
blueDeviceAlarmMessageGetX);
}
if (blueDeviceAlarmMessageGetX.alarmStringDate.isEmpty &&
blueDeviceAlarmMessageGetX.alarmSheet.value == 1) {
blueDeviceAlarmMessageGetX.alarmSheetVoid(2);
Get.back();
}
}
if (((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected &&
globalWiFiBluetooth.characteristicWrite != null) ||
deviceConnectTypeWifiBlueGet.wifiConnectDevice.value) &&
globalWiFiBluetooth.batteryCharging.value == 0) {
if ((blueGetBatteryMessageGetX.batterySoc.value == 10 ||
blueGetBatteryMessageGetX.batterySoc.value == 5) &&
blueGetBatteryMessageGetX.batteryNumTips.value == 0) {
blueGetBatteryMessageGetX.batteryNumTipsVoid(1);
EasyLoading.dismiss();
if (blueGetBatteryMessageGetX.batterySoc.value == 5) {
EasyLoading.showToast("low_battery_5".tr,
duration: const Duration(milliseconds: 3000),
dismissOnTap: true);
}
if (blueGetBatteryMessageGetX.batterySoc.value == 10) {
EasyLoading.showToast("low_battery_10".tr,
duration: const Duration(milliseconds: 3000),
dismissOnTap: true);
}
}
if (blueGetBatteryMessageGetX.batterySoc.value != 5 &&
blueGetBatteryMessageGetX.batterySoc.value != 10) {
blueGetBatteryMessageGetX.batteryNumTipsVoid(0);
}
}
});
parsingValueTimer =
Timer.periodic(const Duration(milliseconds: 50), (callback) async {
if (globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected &&
globalWiFiBluetooth.characteristicWrite != null) {
if (globalWiFiBluetooth.isChangeDevice.value) {
if (_lastValueSubscription != null) {
_lastValueSubscription!.cancel();
}
_lastValueSubscription = globalWiFiBluetooth
.characteristicNotify!.lastValueStream
.listen((event) {
SharePreferences.sharePreferences(
"genkinno_flutter_blue_value_list",
value: event);
});
globalWiFiBluetooth.isChangeDeviceVoid(false);
}
ParsingLastValueSharedPreferencesUtils.parsingLastValueUtils(
shareKeys: "genkinno_flutter_blue_value_list");
} else {
if (deviceConnectTypeWifiBlueGet.wifiConnectDevice.value &&
!deviceConnectTypeWifiBlueGet.isListenerAdded.value) {
deviceConnectTypeWifiBlueGet.isListenerAddedVoid(true);
WiFiSub.wifiSub(deviceConnectTypeWifiBlueGet, globalWiFiBluetooth);
}
ParsingLastValueSharedPreferencesUtils.parsingLastValueUtils(
shareKeys: "genkinno_flutter_blue_value_list");
}
});
wifiConnectToConnectBlue =
Timer.periodic(const Duration(milliseconds: 4000), (_) {
if (!deviceConnectTypeWifiBlueGet.flutterBlueState.value) {
return;
}
if (deviceConnectTypeWifiBlueGet.wifiConnectDevice.value) {
if ((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isDisconnected) ||
globalWiFiBluetooth.device == null) {
List<int> list;
String snS =
globalWiFiBluetooth.addNewDeviceSn.value.substring(0, 4) +
globalWiFiBluetooth.addNewDeviceSn.value.substring(8);
for (ScanResult result in globalWiFiBluetooth.scanResults) {
try {
list = [
...IntByte.intByte16(
result.advertisementData.manufacturerData.keys.first,
little: false),
...result.advertisementData.manufacturerData.values.first
];
if (StringByte16.byteString(list) == snS) {
WriteNotifyDeviceUtils.writeNotifyUtils(
globalWiFiBluetooth, result.device);
}
} catch (e) {
}
}
}
}
});
}
reconnectDeviceUI() {
EasyLoading.dismiss();
Timer.periodic(const Duration(milliseconds: 3000), (timer) {
if (!globalWiFiBluetooth.isDevicePage ||
deviceConnectTypeWifiBlueGet.wifiConnectDevice.value ||
!deviceConnectTypeWifiBlueGet.flutterBlueState.value) {
globalWiFiBluetooth.connectNumVoid(0);
timer.cancel();
Get.back();
return;
}
if (globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected) {
timer.cancel();
globalWiFiBluetooth.connectNumVoid(0);
Get.back();
return;
}
if ((globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isDisconnected &&
!deviceConnectTypeWifiBlueGet.wifiConnectDevice.value) &&
globalWiFiBluetooth.connectNum.value < 10) {
globalWiFiBluetooth
.connectNumVoid(globalWiFiBluetooth.connectNum.value + 1);
if (globalWiFiBluetooth.connectNum.value >= 10) {
timer.cancel();
Get.back();
globalWiFiBluetooth.connectNumVoid(0);
globalWiFiBluetooth.isDevicePageVoid(false);
DisconnectDeviceBluetoothSheetUtils.updatedDialogSheetSuccessUI();
} else {
try {
globalWiFiBluetooth.device!
.connect(timeout: const Duration(milliseconds: 2500))
.then((onValue) async {
if (globalWiFiBluetooth.device != null &&
globalWiFiBluetooth.device!.isConnected) {
timer.cancel();
Get.back();
globalWiFiBluetooth.connectNumVoid(0);
WriteNotifyDeviceUtils.writeNotifyUtils(
globalWiFiBluetooth, globalWiFiBluetooth.device!);
}
});
} catch (e) {
}
}
}
});
return Get.dialog(
Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(10.rpx)),
clipBehavior: Clip.antiAlias,
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
height: 20.rpx,
),
Container(
margin: EdgeInsets.only(
right: 25.rpx, left: 25.rpx, bottom: 10.rpx),
width: 50.rpx,
height: 50.rpx,
child: Stack(
alignment: Alignment.center,
children: [
SizedBox(
width: 50.rpx,
height: 50.rpx,
child: const CircularProgressIndicator(
color: Colors.black,
),
),
Obx(() => Text(
"${globalWiFiBluetooth.connectNum.value}",
style: StyleTextUtils.textStyle262626(
fontWeight: FontWeight.w700, fontSize: 20.rpx),
))
],
),
),
Container(
margin: EdgeInsets.only(
right: 25.rpx, left: 25.rpx, bottom: 10.rpx),
child: Text(
"device_reconnecting".tr,
style: StyleTextUtils.textStyle262626(),
),
),
SizedBox(
height: 5.rpx,
)
],
),
)
],
),
barrierDismissible: false,
);
}
void stopContinuousTask() {
if (deviceConnectTimer != null) {
deviceConnectTimer!.cancel();
}
if (wifiConnectToConnectBlue != null) {
wifiConnectToConnectBlue!.cancel();
}
if (_lastValueSubscription != null) {
_lastValueSubscription!.cancel();
}
if (_connectionStateSubscription != null) {
_connectionStateSubscription!.cancel();
}
if (_adapterStateSubscription != null) {
_adapterStateSubscription!.cancel();
}
if (parsingValueTimer != null) {
parsingValueTimer!.cancel();
}
}
}