更新设备控制

This commit is contained in:
wyf
2025-06-21 08:49:40 +08:00
parent b449f83cb0
commit d94a0c8a6c
6 changed files with 465 additions and 366 deletions

View File

@@ -980,6 +980,9 @@ class _CalibrationPageState extends State<CalibrationPage> {
if (deviceCalibrationController.process.value == 1) {
if (deviceCalibrationController.inBedTips.value == 0) {
//todo 更改提示文字
//校准人员已在床 绿色
//校准人员未在床 红色
return Text(
"请校准人员保持在床状态".tr,
style: TextStyle(

View File

@@ -218,6 +218,10 @@ class MHTBlueToothController extends GetControllerEx<MHTBlueToothModel> {
"macA": bleDevice.macA,
if (bleDevice.macB != null && bleDevice.macB!.isNotEmpty)
"macB": bleDevice.macB,
if (bleDevice.name!=null && bleDevice.name!.isNotEmpty)
'param':{
'name':bleDevice.name,
},
};
var response =

View File

@@ -1,7 +1,7 @@
import 'package:flutter_blue_plus/flutter_blue_plus.dart';
class BlueToothDataModel {
String name;
String name;//设备型号
bool bind;
String mac;
ScanResult scanResult;

View File

@@ -0,0 +1,110 @@
import 'package:easyweb/easyweb.dart';
import 'package:ef/ef.dart';
import 'package:flutter/material.dart';
import 'package:easyweb/base/minisdk.dart';
import 'package:easydevice/easydevice.dart';
class WebviewTestModel {
WebviewTestModel();
//EasyFlutter Start[Model]
//EasyFlutter End
}
class WebviewTestController extends GetControllerEx<WebviewTestModel> {
WebviewTestController() : super(WebviewTestModel()) {
web = WebviewHelper(
jsbridge: buildsdk(
father: this,
clientId: '494641114',
//dbgserverUrl: 'ws://192.168.1.2:9001',
),
settings: buildsettings(),
params: PlatformHeadlessInAppWebViewCreationParams(
initialUrlRequest: URLRequest(
url: WebUri('https://wsl.it.real.he-info.cn:94/webdemo/index.html'),
),
onLoadStop: (controller, url) => {setState(() => ready.value = true)},
),
);
try {
web.jsbridge!.bind((bridge) {
Minibleapp(bridge: bridge);
});
web
//.file(
// url: 'https://wsl.it.real.he-info.cn:94/webdemo/web.zip',
// pretag: 'https://wsl.it.real.he-info.cn:94/webdemo/',
//)
.network()
.then((value) {
if (value) {
//资源准备完成..
setState(() {
ready.value = true;
});
}
});
} catch (e, s) {
ef.log('$e,$s');
}
}
late WebviewHelper web;
var ready = false.obs;
var cnt = 0.obs;
//EasyFlutter End
}
class WebviewTestView extends GetComponent<WebviewTestController> {
WebviewTestView({super.key, super.oncreate});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black12,
body: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Align(
alignment: Alignment.topLeft,
child: Padding(
padding: EdgeInsets.all(8),
child: SizedBox(
height: 30,
child: TextButton(
onPressed: () {
setState(() => controller.cnt.value++);
// Get.to(
// () => TestInkWellView(
// oncreate: (x) => TestInkWellController(),
// ),
// );
},
child: Text('转跳'),
),
),
),
),
Expanded(
child: Align(
alignment: Alignment.topLeft,
child:
controller.ready.value
? ((controller.cnt.value % 2 == 0)
? controller.web.build(
key: ValueKey("A"),
headless: false,
)
: controller.web.build(
key: ValueKey("B"),
headless: false,
))
: Container(),
),
),
],
),
);
}
}

View File

@@ -27,17 +27,15 @@ class RegisterPage extends GetView<MHTRegisterController> {
bodysize = cc;
return GestureDetector(
// onTap: () => FocusScope.of(context).unfocus(),
child: Container(
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage('assets/images/new_background.png'), // 本地图片
fit: BoxFit.fill, // 填满整个 Container
image: AssetImage('assets/images/new_background.png'),
fit: BoxFit.fill,
),
),
child: Scaffold(
backgroundColor: Colors.transparent,
// key: scaffoldKey,
appBar: AppBar(
backgroundColor: Colors.transparent,
automaticallyImplyLeading: false,
@@ -49,7 +47,6 @@ class RegisterPage extends GetView<MHTRegisterController> {
child: Stack(
alignment: Alignment.center,
children: [
// 中间居中的标题
Text(
'用户注册',
textAlign: TextAlign.center,
@@ -58,7 +55,6 @@ class RegisterPage extends GetView<MHTRegisterController> {
fontSize: 30.rpx,
),
),
// 左侧图标
Positioned(
left: 20.rpx,
child: returnIconButtomNew,
@@ -77,9 +73,6 @@ class RegisterPage extends GetView<MHTRegisterController> {
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
// TitleComponentWidget(
// titleName: '用户注册',
// ),
Expanded(
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
@@ -92,367 +85,356 @@ class RegisterPage extends GetView<MHTRegisterController> {
height: bodysize!.maxHeight * 1,
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 184.rpx, 0, 0),
child: Container(
width: bodysize!.maxWidth,
height: 92.rpx,
decoration: BoxDecoration(),
children: [
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 184.rpx, 0, 0),
child: Container(
width: bodysize!.maxWidth,
width: double.infinity,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
child: Align(
alignment: AlignmentDirectional(0, 0),
child: TextFormField(
// autofocus: true,
// focusNode: _focusNode1,
onChanged: (value) {
controller.model.register_phone =
value;
},
obscureText: false,
decoration: InputDecoration(
labelStyle: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
hintText: '请输入手机号'.tr,
hintStyle: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
errorBorder: InputBorder.none,
focusedErrorBorder:
InputBorder.none,
contentPadding:
EdgeInsetsDirectional.fromSTEB(
20.rpx, 0, 0, 0.rpx),
),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
),
constraints: BoxConstraints(
minHeight: 92.rpx,
),
),
),
),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: bodysize!.maxWidth,
height: 92.rpx,
decoration: BoxDecoration(),
child: Container(
width: bodysize!.maxWidth,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
child: Align(
alignment: AlignmentDirectional(0, 0),
child: Obx(() {
return TextFormField(
// autofocus: true,
// focusNode: _focusNode2,
onChanged: (value) {
controller.model.register_pd =
value;
},
// obscureText: true,
obscureText:
controller.model.pdshow!,
decoration: InputDecoration(
labelStyle: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
hintText: '请输入密码'.tr,
hintStyle: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
errorBorder: InputBorder.none,
focusedErrorBorder:
InputBorder.none,
contentPadding:
EdgeInsetsDirectional
.fromSTEB(
10, 26.rpx, 0, 0),
suffixIcon: IconButton(
icon: Icon(
// 根据 pdshow 控制图标
controller.model.pdshow!
? Icons.visibility_off
: Icons.visibility,
color: Color(0xFF333333),
size: 16,
),
onPressed: () {
// 切换 pdshow 状态
controller.model.pdshow =
!controller
.model.pdshow!;
controller.updateAll();
},
),
),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
);
})),
),
),
),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: bodysize!.maxWidth,
height: 92.rpx,
decoration: BoxDecoration(),
child: Container(
width: bodysize!.maxWidth,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
child: Align(
alignment: AlignmentDirectional(0, 0),
child: Obx(() {
return TextFormField(
// autofocus: true,
onChanged: (value) {
controller.model
.register_confirm_pd =
value;
},
// focusNode: _focusNode3,
// obscureText: true,
obscureText:
controller.model.cpdshow!,
decoration: InputDecoration(
labelStyle: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
hintText: '请输入确认密码'.tr,
hintStyle: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
enabledBorder: InputBorder.none,
focusedBorder: InputBorder.none,
errorBorder: InputBorder.none,
focusedErrorBorder:
InputBorder.none,
contentPadding:
EdgeInsetsDirectional
.fromSTEB(
10, 26.rpx, 0, 0),
suffixIcon: IconButton(
icon: Icon(
// 根据 pdshow 控制图标
controller.model.pdshow!
? Icons.visibility_off
: Icons.visibility,
color: Color(0xFF333333),
size: 16,
),
onPressed: () {
// 切换 pdshow 状态
controller.model.cpdshow =
!controller
.model.cpdshow!;
controller.updateAll();
},
),
),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
);
})),
),
),
),
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: bodysize!.maxWidth,
height: 92.rpx,
decoration: BoxDecoration(),
child: Stack(
children: [
Align(
alignment: AlignmentDirectional(0, 0),
child: Container(
width: bodysize!.maxWidth,
height: 92.rpx,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius:
BorderRadius.circular(12),
),
child: Align(
alignment:
AlignmentDirectional(0, 0),
child: TextFormField(
// autofocus: true,
onChanged: (value) {
controller.model
.register_code = value;
},
// focusNode: _focusNode4,
obscureText: false,
decoration: InputDecoration(
labelStyle: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
hintText: '请输入验证码',
hintStyle: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF929699),
fontSize: 26.rpx,
letterSpacing: 0,
),
enabledBorder:
InputBorder.none,
focusedBorder:
InputBorder.none,
errorBorder: InputBorder.none,
focusedErrorBorder:
InputBorder.none,
contentPadding:
EdgeInsetsDirectional
.fromSTEB(20.rpx, 0,
0, 0.rpx),
),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
letterSpacing: 0,
),
),
),
),
),
Align(
alignment:
AlignmentDirectional(0.4, 0.1),
child: Container(
width: 1.rpx,
height: 38.rpx,
decoration: BoxDecoration(
color: stringToColor("#929699"),
),
),
),
Align(
alignment:
AlignmentDirectional(1.2, 0),
child: Container(
width: bodysize!.maxWidth * 0.157,
height: bodysize!.maxHeight * 0.014,
constraints: BoxConstraints(
minWidth: 118,
minHeight: 30,
),
decoration: BoxDecoration(),
child: Align(
alignment:
AlignmentDirectional(0, 0),
child: Obx(() {
final CountdownController
countdownController =
Get.find<
CountdownController>();
return InkWell(
onTap: () async {
if (countdownController
.countdown.value !=
0) {
return;
}
if (CommonVariables
.isNetWorkOn ==
false) {
showToast(
"网络未连接,请开启设备网络后重试"
.tr);
return;
}
String msg =
await controller
.getCode(context);
if (msg.isNotEmpty) {
return;
}
countdownController
.countdown
.value ==
0
? countdownController
.startCountdown(
AppConstants
.code_time)
: null;
},
child: Text(
countdownController
.countdown
.value ==
0
? '获取验证码'.tr
: '${countdownController.countdown.value}' +
''.tr,
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
35.rpx, 0, 35.rpx, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
child: Align(
alignment:
AlignmentDirectional(
-1, 0),
child: TextFormField(
onChanged: (value) {
controller.model
.register_phone =
value;
},
decoration: InputDecoration(
isDense: true,
hintText: '请输入手机号'.tr,
hintStyle: TextStyle(
fontFamily:
'Readex Pro',
color:
Color(0xFF929699),
fontSize: 26.rpx,
),
border: InputBorder.none,
),
style: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF333333),
fontSize: 20.rpx,
letterSpacing: 0,
fontSize: 26.rpx,
color: Colors.black,
),
),
);
}),
),
),
),
),
],
),
],
),
),
),
),
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: double.infinity,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
constraints: BoxConstraints(
minHeight: 92.rpx,
),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
35.rpx, 0, 35.rpx, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
child: Align(
alignment:
AlignmentDirectional(
-1, 0),
child: Obx(() =>
TextFormField(
onChanged: (value) {
controller.model
.register_pd =
value;
},
obscureText: controller
.model.pdshow!,
decoration:
InputDecoration(
isDense: true,
hintText: '请输入密码'.tr,
hintStyle: TextStyle(
fontFamily:
'Readex Pro',
color: Color(
0xFF929699),
fontSize: 26.rpx,
),
border:
InputBorder.none,
suffixIcon:
IconButton(
icon: Icon(
controller.model
.pdshow!
? Icons
.visibility_off
: Icons
.visibility,
color: Color(
0xFF333333),
size: 16,
),
onPressed: () {
controller.model
.pdshow =
!controller
.model
.pdshow!;
controller
.updateAll();
},
),
),
style: TextStyle(
fontFamily:
'Readex Pro',
fontSize: 26.rpx,
color: Colors.black,
),
)),
),
),
),
],
),
),
),
),
),
// 确认密码输入框
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: double.infinity,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
constraints: BoxConstraints(
minHeight: 92.rpx,
),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
35.rpx, 0, 35.rpx, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
child: Align(
alignment:
AlignmentDirectional(
-1, 0),
child: Obx(() =>
TextFormField(
onChanged: (value) {
controller.model
.register_confirm_pd =
value;
},
obscureText: controller
.model.cpdshow!,
decoration:
InputDecoration(
isDense: true,
hintText:
'请输入确认密码'.tr,
hintStyle: TextStyle(
fontFamily:
'Readex Pro',
color: Color(
0xFF929699),
fontSize: 26.rpx,
),
border:
InputBorder.none,
suffixIcon:
IconButton(
icon: Icon(
controller.model
.pdshow!
? Icons
.visibility_off
: Icons
.visibility,
color: Color(
0xFF333333),
size: 16,
),
onPressed: () {
controller.model
.cpdshow =
!controller
.model
.cpdshow!;
controller
.updateAll();
},
),
),
style: TextStyle(
fontFamily:
'Readex Pro',
fontSize: 26.rpx,
color: Colors.black,
),
)),
),
),
),
],
),
),
),
),
),
// 验证码输入框
Align(
alignment: AlignmentDirectional(-1, 0),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 32.rpx, 0, 0),
child: Container(
width: double.infinity,
height: bodysize!.maxHeight * 0.06,
decoration: BoxDecoration(
color: Color(0xFFF3F5F6),
borderRadius: BorderRadius.circular(12),
),
constraints: BoxConstraints(
minHeight: 92.rpx,
),
child: Padding(
padding: EdgeInsetsDirectional.fromSTEB(
35.rpx, 0, 35.rpx, 0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Container(
child: Align(
alignment:
AlignmentDirectional(
-1, 0),
child: TextFormField(
onChanged: (value) {
controller.model
.register_code =
value;
},
decoration: InputDecoration(
isDense: true,
hintText: '请输入验证码',
hintStyle: TextStyle(
fontFamily:
'Readex Pro',
color:
Color(0xFF929699),
fontSize: 26.rpx,
),
border: InputBorder.none,
),
style: TextStyle(
fontFamily: 'Readex Pro',
fontSize: 26.rpx,
color: Colors.black,
),
),
),
),
),
Container(
width: 1.rpx,
height: 38.rpx,
color: Color(0xFF929699),
),
Obx(() {
final countdownController = Get
.find<CountdownController>();
return InkWell(
onTap: () async {
if (countdownController
.countdown.value !=
0) return;
String msg = await controller
.getCode(context);
if (msg.isEmpty) {
countdownController
.startCountdown(
AppConstants
.code_time);
}
},
child: Text(
countdownController.countdown
.value ==
0
? '获取验证码'.tr
: '${countdownController.countdown.value}'
.tr,
style: TextStyle(
fontFamily: 'Readex Pro',
color: Color(0xFF333333),
fontSize: 20.rpx,
),
),
);
}),
],
),
),
),
),
),
// 其他部分保持不变...
Padding(
padding: EdgeInsetsDirectional.fromSTEB(
0, 19, 0, 0),
@@ -526,12 +508,6 @@ class RegisterPage extends GetView<MHTRegisterController> {
controller
.updateAll();
// 获取设备信息,需要用户点击确认隐私协议与用户协议选择框时才能获取
// if (newValue ==
// true) {
// Deviceconfig
// .initPlatformState();
// }
},
side: BorderSide(
width: 1.5,
@@ -547,7 +523,7 @@ class RegisterPage extends GetView<MHTRegisterController> {
horizontal:
-4.0,
vertical:
-4.0), // 变小
-4.0),
),
)),
),