Files
tuiche/lib/pages/mh_page/device/mht_wifi_page_after.dart
2025-08-20 18:22:10 +08:00

1092 lines
53 KiB
Dart

import 'dart:async';
import 'package:easydevice/easydevice.dart';
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
import 'package:flutter_svg/svg.dart';
import 'package:flutterflow_ui/flutterflow_ui.dart';
import 'package:vbvs_app/common/color/ServiceConstant.dart';
import 'package:vbvs_app/common/color/appConstants.dart';
import 'package:vbvs_app/common/util/DailyLogUtils.dart';
import 'package:vbvs_app/common/util/FitTool.dart';
import 'package:vbvs_app/common/util/MyUtils.dart';
import 'package:vbvs_app/common/util/requestWithLog.dart';
import 'package:vbvs_app/component/tool/ClickableContainer.dart';
import 'package:vbvs_app/component/tool/TopSlideNotification.dart';
import 'package:vbvs_app/component/tool/cmd.dart';
import 'package:vbvs_app/controller/device/blueteeth_bind_controller.dart';
import 'package:vbvs_app/controller/main_bottom/global_controller.dart';
import 'package:vbvs_app/controller/person/person_controller.dart';
import 'package:vbvs_app/controller/theme_controller/ThemeController.dart';
import 'package:vbvs_app/controller/user_info_controller.dart';
import 'package:vbvs_app/model/BleDeviceData.dart';
import 'package:vbvs_app/pages/device_bind/blueteeth_device_page.dart';
import 'package:vbvs_app/pages/mh_page/component/mht_bind_dialog.dart';
class MHTWifiAfterPage extends StatefulWidget {
var deviceInfo;
MHTWifiAfterPage({super.key, required this.deviceInfo});
@override
State<MHTWifiAfterPage> createState() => _MHTWifiAfterPageState();
}
class _MHTWifiAfterPageState extends State<MHTWifiAfterPage> {
GlobalController globalController = Get.find();
UserInfoController userInfoController = Get.find();
BlueteethBindController blueteethBindController = Get.find();
PersonController personController = Get.find();
ThemeController themeController = Get.find();
var lisObj;
Timer? _timeoutTimer;
StreamSubscription<List<ScanResult>>? _scanSubscription;
bool _isDisposed = false;
@override
void initState() {
super.initState();
_initController();
dealWifi(widget.deviceInfo.value['bind_mac_a']).then((aa) {
print("object");
});
}
void _initController() {
blueteethBindController.netType.value = 0;
blueteethBindController.connectStatus.value = 0;
blueteethBindController.wifiList = [].obs;
blueteethBindController.wifiStatus = 0.obs;
blueteethBindController.connect_wifi.value = {};
blueteethBindController.selectWifi.value = {};
blueteethBindController.wifiStatus.value = 0;
blueteethBindController.blueConnectFlag.value = 0;
blueteethBindController.wifiConnectStatus.value = 1;
blueteethBindController.updateAll();
}
@override
void dispose() {
_isDisposed = true;
_cleanupResources();
_disconnectDevice();
super.dispose();
}
void _cleanupResources() {
// 取消监听器
lisObj?.cancel();
lisObj = null;
// 取消定时器
_timeoutTimer?.cancel();
_timeoutTimer = null;
// 取消扫描订阅
_scanSubscription?.cancel();
_scanSubscription = null;
// 断开蓝牙连接
if (blueteethBindController.currentDevice != null) {
blueteethBindController.currentDevice!.disconnect();
blueteethBindController.currentDevice = null;
}
// 停止扫描
FlutterBluePlus.stopScan();
}
Future<void> _navigateToNextPage() async {
// 清理资源
_cleanupResources();
if (_isDisposed) return;
// 导航到下一页
if (blueteethBindController.wifiStatus.value != 1) {
showConfirmDialog(context, Container(), "未配置网络提示".tr,
onConfirm: () async {
_cleanupResources();
await _disconnectDevice();
Get.toNamed("/calibrationPage");
}, onCancel: () {});
} else {
_cleanupResources();
await _disconnectDevice();
Get.toNamed("/calibrationPage");
}
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, bodySize) => GestureDetector(
// onTap: () => FocusScope.of(context).unfocus(),,
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/new_background.png'),
fit: BoxFit.fill,
),
),
child: Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(
backgroundColor: Colors.transparent,
automaticallyImplyLeading: false,
iconTheme: IconThemeData(color: themeController.currentColor.sc3),
titleSpacing: 0,
title: Container(
width: double.infinity,
height: 180.rpx,
child: Stack(
alignment: Alignment.center,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'wifi配置'.tr,
style: TextStyle(
fontFamily: 'Readex Pro',
color: themeController.currentColor.sc3,
letterSpacing: 0,
fontSize: 30.rpx,
),
),
SizedBox(
width: 14.rpx,
),
Obx(() {
if (!blueteethBindController.bluetoothStatus.value) {
return Container();
}
if (blueteethBindController.blueConnectFlag.value ==
0) {
return SizedBox(
width: 24.rpx,
height: 24.rpx,
child:CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
themeController.currentColor.sc1,
),
),
);
}
if (blueteethBindController.netType.value == 0) {
return SizedBox(
width: 24.rpx,
height: 24.rpx,
child:CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
themeController.currentColor.sc1,
),
),
);
}
if (blueteethBindController.wifiConnectStatus.value ==
0) {
return SizedBox(
width: 24.rpx,
height: 24.rpx,
child:CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
themeController.currentColor.sc1,
),
),
);
}
return Container();
}),
],
),
Positioned(
left: 0,
child: returnIconButtom,
),
],
),
),
actions: [],
centerTitle: false,
),
body: SafeArea(
top: true,
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 0, 30.rpx, 0),
child: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding:
EdgeInsetsDirectional.fromSTEB(0, 30.rpx, 0, 0),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: stringToColor("#003058"),
borderRadius: BorderRadius.circular(20.rpx),
),
child: Column(
children: [
Align(
alignment: AlignmentDirectional(0, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
30.rpx, 30.rpx, 30.rpx, 30.rpx),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
"WLAN".tr,
style: TextStyle(
color: themeController
.currentColor.sc3,
fontSize: AppConstants()
.title_text_fontSize,
),
),
Obx(() {
return Text(
blueteethBindController
.wifiStatus.value ==
0
? "未连接".tr
: "已连接".tr,
style: TextStyle(
color: blueteethBindController
.wifiStatus.value ==
0
? themeController
.currentColor.sc4
: themeController
.currentColor.sc2,
fontSize: AppConstants()
.normal_text_fontSize,
),
);
}),
],
),
),
),
Obx(() {
if (blueteethBindController
.connect_wifi.value ==
null ||
blueteethBindController
.connect_wifi.value.isEmpty) {
return Container();
} else {
return Padding(
padding: EdgeInsetsDirectional.fromSTEB(
30.rpx, 0.rpx, 30.rpx, 30.rpx),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
blueteethBindController.connect_wifi
.value['ssid'] ??
'未命名'.tr,
style: TextStyle(
color: themeController
.currentColor.sc3,
fontSize: AppConstants()
.title_text_fontSize,
),
),
getWifiIconByRsso(
blueteethBindController
.connect_wifi.value),
],
),
);
}
})
],
)),
),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0.rpx, 25.rpx, 0.rpx, 0.rpx),
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: stringToColor("#003058"),
borderRadius: BorderRadius.circular(20.rpx),
),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
30.rpx, 30.rpx, 30.rpx, 30.rpx),
child: Container(
width: double.infinity,
decoration: BoxDecoration(),
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Row(
mainAxisSize: MainAxisSize.max,
children: [
Text(
'可用WLAN'.tr,
style: TextStyle(
fontFamily: 'Inter',
fontSize: 30.rpx,
letterSpacing: 0.0,
color:
themeController.currentColor.sc3,
),
),
],
),
Obx(() {
final sortedList = [
...blueteethBindController.wifiList.value
]..sort((a, b) =>
b['rssi'].compareTo(a['rssi']));
return Column(
mainAxisSize: MainAxisSize.max,
children: sortedList
.map((wifiItem) => ClickableContainer(
backgroundColor:
Colors.transparent,
highlightColor: themeController
.currentColor.sc3,
padding: EdgeInsets.symmetric(
vertical: 0.rpx,
horizontal: 0.rpx),
borderRadius: 16.rpx,
onTap: () {
showWifiDialog(
context,
Padding(
padding:
EdgeInsetsDirectional
.fromSTEB(
0.rpx,
41.rpx,
0.rpx,
0),
child: Container(
height: 80.rpx,
decoration:
BoxDecoration(
color: Colors.white,
borderRadius:
BorderRadius
.circular(
12.rpx),
),
child: Align(
alignment:
AlignmentDirectional(
-1, 0),
child: Obx(() {
return TextFormField(
onChanged:
(value) {
blueteethBindController
.model
.wifiPass =
value;
},
autofocus:
false,
obscureText:
blueteethBindController
.model
.wifiPassShow,
decoration:
InputDecoration(
isDense:
true,
labelStyle:
TextStyle(
fontFamily:
'Inter',
fontSize:
26.rpx,
letterSpacing:
0.0,
),
hintText:
'输入wifi密码'
.tr,
hintStyle: TextStyle(
fontFamily:
'Inter',
fontSize: 26
.rpx,
letterSpacing:
0.0,
color: themeController
.currentColor
.sc4),
enabledBorder:
OutlineInputBorder(
borderSide:
BorderSide(
color: Color(
0x00000000),
width: 1
.rpx,
),
borderRadius:
BorderRadius.circular(
8.rpx),
),
focusedBorder:
OutlineInputBorder(
borderSide:
BorderSide(
color: Color(
0x00000000),
width: 1
.rpx,
),
borderRadius:
BorderRadius.circular(
8.rpx),
),
errorBorder:
OutlineInputBorder(
borderSide:
BorderSide(
width: 1
.rpx,
),
borderRadius:
BorderRadius.circular(
8.rpx),
),
focusedErrorBorder:
OutlineInputBorder(
borderSide:
BorderSide(
width: 1
.rpx,
),
borderRadius:
BorderRadius.circular(
8.rpx),
),
filled:
true,
fillColor:
stringToColor(
"#F3F5F6"),
suffixIcon:
InkWell(
onTap:
() {
blueteethBindController
.model
.wifiPassShow = !blueteethBindController.model.wifiPassShow;
blueteethBindController
.updateAll();
},
focusNode:
FocusNode(
skipTraversal: true),
child:
Icon(
blueteethBindController.model.wifiPassShow
? Icons.visibility_outlined
: Icons.visibility_off_outlined,
size: 30
.rpx,
),
),
),
style: TextStyle(
fontFamily:
'Inter',
fontSize: 26
.rpx,
letterSpacing:
0.0,
color: Colors
.black),
cursorColor:
themeController
.currentColor
.sc3,
);
})),
),
),
wifiItem['ssid'] ??
'未命名'.tr,
onConfirm: () async {
blueteethBindController
.selectWifi
.value = wifiItem;
bool flag = await sendWifiSetting(
wifiItem,
blueteethBindController
.model.wifiPass!,
blueteethBindController
.currentDevice!);
if (flag) {
var aa = await getDeviceWifiStatus(
blueteethBindController
.currentDevice!,
1);
blueteethBindController
.selectWifi
.value = {};
if (aa != null &&
aa is Map) {
blueteethBindController
.connect_wifi
.value = aa;
} else {
blueteethBindController
.connect_wifi
.value = {};
}
blueteethBindController
.wifiStatus
.value =
aa != null ? 1 : 0;
if (aa != null) {
updateDeviceBindStatus(
blueteethBindController
.currentDeviceMac!
.value);
TopSlideNotification
.show(
context,
text: "配网成功".tr,
textColor:
themeController
.currentColor
.sc2,
);
} else {
TopSlideNotification
.show(
context,
text: "配网失败".tr,
textColor:
themeController
.currentColor
.sc9,
);
}
} else {
TopSlideNotification.show(
context,
text: "配网失败".tr,
textColor:
themeController
.currentColor
.sc9,
);
}
});
},
child: Row(
mainAxisSize:
MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
children: [
Text(
wifiItem['ssid'] ?? '',
style: TextStyle(
fontFamily: 'Inter',
fontSize: 30.rpx,
letterSpacing: 0.0,
color: themeController
.currentColor.sc3,
),
),
if (blueteethBindController
.selectWifi.value ==
wifiItem)
SizedBox(
width: 32.rpx,
height: 32.rpx,
child:
CircularProgressIndicator(
strokeWidth: 2,
valueColor: AlwaysStoppedAnimation<Color>(
themeController.currentColor.sc1,
),
),
)
else
getWifiIconByRsso(
wifiItem),
],
),
))
.toList()
.divide(SizedBox(height: 67.rpx)),
);
}),
ClickableContainer(
backgroundColor: Colors.transparent,
highlightColor: Colors.white,
padding: EdgeInsets.symmetric(
horizontal: 20.rpx, vertical: 10.rpx),
borderRadius: 20.rpx,
onTap: () async {
var bluetoothState =
await FlutterBluePlus.isOn;
blueteethBindController.bluetoothStatus
.value = bluetoothState;
if (!bluetoothState) {
await _showBluetoothNotEnabledDialog();
return;
}
if (blueteethBindController
.blueConnectFlag.value ==
0 ||
blueteethBindController
.blueConnectFlag.value ==
1) {
blueteethBindController
.blueConnectFlag.value = 0;
dealWifi(widget.deviceInfo.macA)
.then((aa) {
print("object");
});
return;
}
if (blueteethBindController
.netType.value ==
0) {
return;
}
blueteethBindController.netType.value = 0;
blueteethBindController.updateAll();
var aa = await getDeviceNetVersion(
blueteethBindController
.currentDevice!,
1);
if (aa == "4g") {
updateDeviceBindStatus(
blueteethBindController
.currentDeviceMac!.value);
TopSlideNotification.show(
context,
text: "4g设备配置wifi提示".tr,
textColor:
themeController.currentColor.sc2,
);
blueteethBindController.netType.value =
2;
blueteethBindController
.connectStatus.value = 1;
blueteethBindController.updateAll();
Future.delayed(
const Duration(seconds: 1), () {
_cleanupResources();
Get.toNamed("/calibrationPage",
arguments: 1);
});
} else if (aa == 'unknown') {
blueteethBindController.netType.value =
3;
blueteethBindController.updateAll();
WidgetsBinding.instance
.addPostFrameCallback((_) {
TopSlideNotification.show(
context,
text: "获取设备网络类型失败".tr,
textColor: themeController
.currentColor.sc9,
);
});
} else {
blueteethBindController.netType.value =
1;
blueteethBindController.updateAll();
await initWifiStatusAndWifiList();
}
},
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
width: 25.rpx,
height: 25.rpx,
decoration: BoxDecoration(),
child: SvgPicture.asset(
'assets/img/icon/refresh.svg',
fit: BoxFit.cover,
color: Colors.white,
),
),
Text(
'刷新'.tr,
style: TextStyle(
fontFamily: 'Inter',
fontSize: 30.rpx,
letterSpacing: 0.0,
color: themeController
.currentColor.sc3,
),
),
].divide(SizedBox(width: 26.rpx)),
),
),
].divide(SizedBox(height: 65.rpx)),
),
),
),
),
),
],
),
),
),
),
),
),
),
);
}
Future<void> initWifiStatusAndWifiList() async {
if (_isDisposed) return;
if (lisObj != null) {
lisObj!.cancel();
}
bool wifiStatus = false;
var aa =
await getDeviceWifiStatus(blueteethBindController.currentDevice!, 0);
if (aa != null && aa is Map) {
updateDeviceBindStatus(blueteethBindController.currentDeviceMac!.value);
wifiStatus = true;
blueteethBindController.connect_wifi.value = aa;
} else {
wifiStatus = false;
}
blueteethBindController.wifiStatus.value = wifiStatus ? 1 : 0;
List wifiList = [];
try {
final result = await getWifiList(blueteethBindController.currentDevice!);
blueteethBindController.wifiConnectStatus.value = 1;
blueteethBindController.updateAll();
if (result is List) {
wifiList = result;
}
} catch (e) {
print("异常: $e");
blueteethBindController.wifiConnectStatus.value = 0;
blueteethBindController.updateAll();
}
if (_isDisposed) return;
if (wifiList.isNotEmpty) {
blueteethBindController.connectStatus.value = 1;
blueteethBindController.updateAll();
TopSlideNotification.show(
context,
text: "获取wifi列表成功".tr,
textColor: themeController.currentColor.sc2,
);
blueteethBindController.wifiList.value = wifiList;
blueteethBindController.updateAll();
} else {
TopSlideNotification.show(
context,
text: "获取wifi列表失败".tr,
textColor: themeController.currentColor.sc9,
);
}
lisObj = blueteethBindController.currentDevice!.statusStream
.listen((onData) async {
if (onData.status == BleEventType.recvLineLog) {
final line = onData.val;
print("[bleee]:" + line);
}
});
}
Widget getWifiIconByRsso(wifiItem) {
int? rssi = int.tryParse(wifiItem['rssi'].toString());
if (rssi != null) {
if (rssi >= -30) {
return Container(
width: 40.rpx,
height: 40.rpx,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(shape: BoxShape.circle),
child: Image.asset("assets/img/wifi4.png"),
);
} else if (rssi >= -45) {
return Container(
width: 40.rpx,
height: 40.rpx,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(shape: BoxShape.circle),
child: Image.asset("assets/img/wifi3.png"),
);
} else if (rssi >= -60) {
return Container(
width: 40.rpx,
height: 40.rpx,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(shape: BoxShape.circle),
child: Image.asset("assets/img/wifi3.png"),
);
} else {
return Container(
width: 40.rpx,
height: 40.rpx,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(shape: BoxShape.circle),
child: Image.asset("assets/img/wifi1.png"),
);
}
} else {
return Container(
width: 40.rpx,
height: 40.rpx,
clipBehavior: Clip.antiAlias,
decoration: BoxDecoration(shape: BoxShape.circle),
child: Image.asset("assets/img/wifi1.png"),
);
}
}
Future<void> dealWifi(String mac) async {
if (_isDisposed) return;
final blueteethBindController = Get.find<BlueteethBindController>();
final themeController = Get.find<ThemeController>();
// 清理之前的资源
_cleanupResources();
try {
// 检查蓝牙状态
var bluetoothState = await FlutterBluePlus.isOn;
blueteethBindController.bluetoothStatus.value = bluetoothState;
blueteethBindController.updateAll();
if (!bluetoothState) {
await _showBluetoothNotEnabledDialog();
return;
}
// 开始扫描
await FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
bool isConnected = false;
// 设置超时定时器
_timeoutTimer = Timer(Duration(seconds: 20), () {
if (!isConnected && !_isDisposed) {
blueteethBindController.blueConnectFlag.value = 1;
blueteethBindController.updateAll();
TopSlideNotification.show(
context,
text: "设备连接超时,请重试".tr,
textColor: themeController.currentColor.sc9,
);
FlutterBluePlus.stopScan();
}
});
// 监听扫描结果
_scanSubscription = FlutterBluePlus.scanResults.listen((results) async {
if (_isDisposed) return;
ScanResult? targetDevice;
for (var r in results) {
if (r.advertisementData.manufacturerData.containsKey(0xFFED)) {
List<int> rawData = r.advertisementData.manufacturerData[0xFFED]!;
BleDeviceData deviceData = parseBleData(rawData);
String deviceMac =
deviceData.deviceId.replaceAll(':', '').toLowerCase();
if (deviceMac == mac.toLowerCase()) {
targetDevice = r;
break;
}
}
}
if (targetDevice != null && !isConnected) {
isConnected = true;
_timeoutTimer?.cancel();
_scanSubscription?.cancel();
try {
THapp bledevice = THapp(device: targetDevice.device);
await bledevice.device.connect();
var res2 = bledevice.isConnected;
if (res2 && !_isDisposed) {
blueteethBindController.blueConnectFlag.value = 2;
TopSlideNotification.show(
context,
text: "蓝牙绑定.连接成功".tr,
textColor: themeController.currentColor.sc2,
);
blueteethBindController.currentDevice = bledevice;
lisObj = blueteethBindController.currentDevice!.statusStream
.listen((onData) async {
if (_isDisposed) return;
if (onData.status == BleEventType.recvLineLog) {
final line = onData.val;
print("[bleee]:" + line);
}
if (onData.status == BleEventType.ready) {
var aa = await getDeviceNetVersion(
blueteethBindController.currentDevice!, 0);
if (aa == "4g") {
blueteethBindController.netType.value = 2;
blueteethBindController.updateAll();
updateDeviceBindStatus(
blueteethBindController.currentDeviceMac!.value);
await showTipDialog(
context,
Text(
"4g设备配置wifi提示".tr,
style: TextStyle(
color: themeController.currentColor.sc3,
fontSize: AppConstants().title_text_fontSize),
));
} else if (aa == 'unknown') {
blueteethBindController.netType.value = 3;
blueteethBindController.updateAll();
TopSlideNotification.show(
context,
text: "获取设备网络类型失败".tr,
textColor: themeController.currentColor.sc9,
);
} else {
blueteethBindController.netType.value = 1;
blueteethBindController.updateAll();
blueteethBindController.wifiConnectStatus.value = 0;
blueteethBindController.updateAll();
await initWifiStatusAndWifiList();
}
}
});
} else {
TopSlideNotification.show(
context,
text: "蓝牙绑定.连接失败".tr,
textColor: themeController.currentColor.sc9,
);
}
} catch (e) {
TopSlideNotification.show(
context,
text: "设备连接失败".tr,
textColor: themeController.currentColor.sc9,
);
}
}
});
await Future.delayed(Duration(seconds: 20));
} catch (e) {
if (!_isDisposed) {
TopSlideNotification.show(
context,
text: "扫描过程中发生错误".tr,
textColor: themeController.currentColor.sc9,
);
}
} finally {
_timeoutTimer?.cancel();
await FlutterBluePlus.stopScan();
}
}
Future<void> _showBluetoothNotEnabledDialog() async {
if (_isDisposed) return;
await showTipDialog(
context,
Column(
children: [
Text(
"蓝牙未开启".tr,
style: TextStyle(
fontSize: AppConstants().title_text_fontSize,
color: themeController.currentColor.sc3),
),
SizedBox(
height: 20.rpx,
),
Text(
"请先打开蓝牙在进行设备扫描".tr,
style: TextStyle(
fontSize: AppConstants().normal_text_fontSize,
color: themeController.currentColor.sc3),
),
],
));
}
void updateDeviceBindStatus(String mac) {
String serviceAddress = ServiceConstant.service_address;
String serviceName = ServiceConstant.server_service;
String serviceApi = ServiceConstant.user_setting;
String type = "device_bind_status_$mac";
String queryUrl =
"${serviceAddress}${serviceName}${serviceApi}?type=${type}";
requestWithLog(
logTitle: "查询绑定流程".tr,
method: MyHttpMethod.get,
queryUrl: queryUrl,
onSuccess: (res) {
print(res);
Map<String, dynamic> data = {
"type": type,
"mac".tr: mac,
"wifi": true,
"celibration": res.data['celibration'],
"person_info": res.data['person_info'],
"time": DateTime.now().millisecondsSinceEpoch,
};
requestWithLog(
logTitle: "更新绑定流程".tr,
method: MyHttpMethod.put,
queryUrl: queryUrl,
data: data,
onSuccess: (res) {},
onFailure: (res) {},
);
},
onFailure: (res) {},
);
}
Future<void> _disconnectDevice() async {
try {
THapp bledevice = THapp(device: widget.deviceInfo.scanResult.device);
await bledevice.disconnect();
DailyLogUtils.writeLog("关闭蓝牙连接成功".tr);
} catch (e) {
DailyLogUtils.writeError("关闭蓝牙连接失败: $e");
}
}
}