import 'dart:async'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; import 'package:get/get.dart'; import 'package:network_info_plus/network_info_plus.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import '../../../../blue/blue_manage.dart'; import '../../../../blue/io_protocol/io_gateway_configuringWifi.dart'; import '../../../../blue/io_reply.dart'; import '../../../../blue/io_tool/manager_event_bus.dart'; import '../../../../blue/sender_manage.dart'; import '../../../../login/login/entity/LoginEntity.dart'; import '../../../../network/api_repository.dart'; import 'gatewayConfigurationWifi_state.dart'; class GatewayConfigurationWifiLogic extends BaseGetXController { final GatewayConfigurationWifiState state = GatewayConfigurationWifiState(); Future gatewayDistributionNetwork() async{ if(state.gatewayNamePasswardTF.text.isEmpty){ showToast('请输入网关名称'.tr); return; } if(state.wifiNameTF.text.isEmpty){ showToast('请输入wifi名称'.tr); return; } if(state.wifiPasswardTF.text.isEmpty){ showToast('请输入WiFi密码'.tr); return; } final LoginEntity entity = await ApiRepository.to.gatewayDistributionNetwork( gatewayName: state.gatewayNamePasswardTF.text, gatewayMac: state.macAddress, serialNumber: DateTime.now().millisecondsSinceEpoch.toString(), gatewayType: 2, networkName: state.wifiNameTF.text, networkMac: state.macAddress, version: '1.0.0', ); if(entity.errorCode!.codeIsSuccessful){ showToast('配网成功'.tr, something:(){ // eventBus.fire(PassCurrentLockInformationEvent(state.lockSetInfoData.value)); Get.close(4); }); } } // 监听设备返回的数据 late StreamSubscription _replySubscription; void _initReplySubscription() { _replySubscription = EventBusManager().eventBus!.on().listen((Reply reply) async { // WIFI配网结果 if(reply is GatewayConfiguringWifiReply) { _replySenderConfiguringWifi(reply); } }); } // WIFI配网结果 Future _replySenderConfiguringWifi(Reply reply) async { final int status = reply.data[5]; switch(status){ case 0x00: //成功 state.sureBtnState.value = 0; cancelBlueConnetctToastTimer(); dismissEasyLoading(); gatewayDistributionNetwork(); break; case 0x06: //无权限 IoSenderManage.gatewayConfiguringWifiCommand( ssid: state.gatewayNamePasswardTF.text, password: state.wifiPasswardTF.text, ); break; case 0xff: //失败 dismissEasyLoading(); showToast('配网失败'.tr); break; default: //失败 dismissEasyLoading(); break; } } // 点击配置wifi Future senderConfiguringWifiAction() async { if(state.gatewayNamePasswardTF.text.isEmpty){ showToast('请输入wifi名称'.tr); return; } if(state.sureBtnState.value == 1){ return; } state.sureBtnState.value = 1; showEasyLoading(); showBlueConnetctToastTimer(action: (){ dismissEasyLoading(); state.sureBtnState.value = 0; }); BlueManage().blueSendData(BlueManage().connectDeviceName, (BluetoothConnectionState connectionState) async { if (connectionState == BluetoothConnectionState.connected){ IoSenderManage.gatewayConfiguringWifiCommand( ssid: state.wifiNameTF.text, password: state.wifiPasswardTF.text, ); } else if (connectionState == BluetoothConnectionState.disconnected) { dismissEasyLoading(); cancelBlueConnetctToastTimer(); state.sureBtnState.value = 0; if(state.ifCurrentScreen.value == true){ showBlueConnetctToast(); } } }, isAddEquipment: true); } final NetworkInfo _networkInfo = NetworkInfo(); Future getWifiName() async { String ssid = ''; ssid = (await _networkInfo.getWifiName())!; ssid = ssid ?? ''; ssid = ssid.replaceAll(r'"', ''); return ssid ?? ''; } @override void onReady() { super.onReady(); if(state.wifiNameTF.text.isEmpty){ getWifiName().then((String value) { state.wifiNameTF.text = value; // update(); // AppLog.log('wifiNameTF:${state.wifiNameTF.text} value:$value'); }); } _initReplySubscription(); } @override void onInit() { super.onInit(); } @override void onClose() { _replySubscription.cancel(); super.onClose(); } }