import 'package:ef/ef.dart'; import 'package:flutter/material.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/color/app_uri_status.dart'; import 'package:vbvs_app/common/util/FitTool.dart'; import 'package:vbvs_app/common/util/MyUtils.dart'; import 'package:vbvs_app/component/tool/ClickableContainer.dart'; import 'package:vbvs_app/component/tool/CustomCard.dart'; import 'package:vbvs_app/component/tool/TopSlideNotification.dart'; import 'package:vbvs_app/controller/device/body_device_controller.dart'; import 'package:vbvs_app/controller/person/person_controller.dart'; import 'package:vbvs_app/enum/BindType.dart'; import 'package:vbvs_app/model/api_response.dart'; import 'package:vbvs_app/pages/device_bind/componnet/bind_dialog.dart'; class DeviceDataComponentWidget extends StatefulWidget { final Map device; const DeviceDataComponentWidget({super.key, required this.device}); @override State createState() => _DeviceDataComponentWidgetState(); } class _DeviceDataComponentWidgetState extends State { final GlobalKey _arrowKey = GlobalKey(); OverlayEntry? _popupEntry; BodyDeviceController bodyDeviceController = Get.find(); PersonController personController = Get.find(); @override void dispose() { _popupEntry?.remove(); super.dispose(); } void _showPopup() { final RenderBox? renderBox = _arrowKey.currentContext?.findRenderObject() as RenderBox?; if (renderBox == null) return; final position = renderBox.localToGlobal(Offset.zero); final size = renderBox.size; final screenHeight = MediaQuery.of(context).size.height; final popupHeight = 160.rpx; final popupWidth = 190.rpx; final paddingOffset = 10.rpx; bool showAbove = (position.dy + size.height + popupHeight > screenHeight); _popupEntry?.remove(); if (widget.device['bind_type'] == BindType.active.code) { _popupEntry = OverlayEntry( builder: (context) => GestureDetector( behavior: HitTestBehavior.translucent, onTap: () { _popupEntry?.remove(); _popupEntry = null; }, child: Stack( children: [ Positioned( top: showAbove ? position.dy - popupHeight - paddingOffset : position.dy + size.height + paddingOffset, left: position.dx + size.width - popupWidth, child: Material( color: Colors.transparent, child: ConstrainedBox( constraints: BoxConstraints( maxWidth: 300.rpx, // 限制最大宽度 ), child: IntrinsicWidth( // 自适应内容宽度 child: Container( padding: EdgeInsets.all(20.rpx), decoration: BoxDecoration( color: themeController.currentColor.sc17, borderRadius: BorderRadius.circular(12.rpx), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 12.rpx, spreadRadius: 1.rpx, offset: Offset(0, 6.rpx), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // 首页展示 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () async { ApiResponse apiResponse = await bodyDeviceController .updateDeviceShow(widget.device); _popupEntry?.remove(); _popupEntry = null; if (apiResponse.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); bodyDeviceController.updateAll(); } else { TopSlideNotification.show( context, text: apiResponse.msg!, textColor: themeController.currentColor.sc9, ); } }, child: Row( mainAxisAlignment: MainAxisAlignment.center, // 这里!行居中 crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ if (widget.device['show'] != null && widget.device['show'] == true) SizedBox( width: 24.rpx, height: 24.rpx, child: Icon( Icons.check, // 使用Flutter内置的√图标 size: 24.rpx, color: themeController.currentColor.sc2, ), ), if (widget.device['show'] == null || widget.device['show'] != true) SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.首页展示".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: (widget.device['show'] != null && widget.device['show'] == true) ? themeController.currentColor.sc2 : themeController.currentColor.sc3, ), ), ], ), ), // 设备详情 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; Get.toNamed("/deviceDetail", arguments: widget.device); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ // 空占位 SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.设备详情".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // wifi配置 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; Get.toNamed("/deviceDetail", arguments: widget.device); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ // 空占位 SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "WIFI配置".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), //分享设备 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; Get.toNamed("/deviceSharePage", arguments: widget.device); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ // 空占位 SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "分享设备".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), //消息设置 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; Get.toNamed("/deviceDetail", arguments: widget.device); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ // 空占位 SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "消息设置".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // 重命名 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; personController.currentPersonId.value = widget.device['_id']; personController.name.value = ""; showConfirmDialog( 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: TextFormField( onChanged: (value) { personController.name.value = value; }, autofocus: false, decoration: InputDecoration( isDense: true, hintText: '请输入人员名称'.tr, hintStyle: FlutterFlowTheme.of(context) .labelMedium .override( 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), ), ), style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: Colors.black, ), cursorColor: FlutterFlowTheme.of(context) .primaryText, ), ), ), ), '修改人员名称'.tr, onConfirm: () async { ApiResponse response = await personController .updatePersonName( widget.device['person'], widget.device['_id'], ); if (response.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); bodyDeviceController.updateAll(); } }, onCancel: () { print('用户点击了取消'); }, ); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.重命名".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // 删除 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController .currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; showConfirmDialog( context, Container(), "是否确认解绑".tr, onConfirm: () async { ApiResponse apiResponse = await bodyDeviceController .deleteDevice(widget.device); if (apiResponse.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); TopSlideNotification.show( context, text: apiResponse.msg!, ); } else { TopSlideNotification.show( context, text: apiResponse.msg!, textColor: themeController.currentColor.sc9, ); } }, onCancel: () {}, ); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.删除".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), ], ), ), ), ), )), ], ), ), ); } if (widget.device['bind_type'] == BindType.share.code) { _popupEntry = OverlayEntry( builder: (context) => GestureDetector( behavior: HitTestBehavior.translucent, onTap: () { _popupEntry?.remove(); _popupEntry = null; }, child: Stack( children: [ Positioned( top: showAbove ? position.dy - popupHeight - paddingOffset : position.dy + size.height + paddingOffset, left: position.dx + size.width - popupWidth, child: Material( color: Colors.transparent, child: Container( width: popupWidth, padding: EdgeInsets.all(20.rpx), decoration: BoxDecoration( color: themeController.currentColor.sc17, borderRadius: BorderRadius.circular(12.rpx), boxShadow: [ BoxShadow( color: Colors.black.withOpacity(0.2), blurRadius: 12.rpx, spreadRadius: 1.rpx, offset: Offset(0, 6.rpx), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ // 首页展示 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController.currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () async { ApiResponse apiResponse = await bodyDeviceController .updateDeviceShow(widget.device); _popupEntry?.remove(); _popupEntry = null; if (apiResponse.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); bodyDeviceController.updateAll(); } else { TopSlideNotification.show( context, text: apiResponse.msg!, textColor: themeController.currentColor.sc9, ); } }, child: Row( mainAxisAlignment: MainAxisAlignment.center, // 这里!行居中 crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ if (widget.device['show'] != null && widget.device['show'] == true) SizedBox( width: 24.rpx, height: 24.rpx, child: SvgPicture.asset( 'assets/img/icon/tick.svg', fit: BoxFit.contain, color: themeController.currentColor.sc3, ), ), if (widget.device['show'] == null || widget.device['show'] != true) SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.首页展示".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // 设备详情 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController.currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; Get.toNamed("/deviceDetail", arguments: widget.device); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ // 空占位 SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.设备详情".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // 重命名 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController.currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; personController.currentPersonId.value = widget.device['_id']; personController.name.value = ""; showConfirmDialog( 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: TextFormField( onChanged: (value) { personController.name.value = value; }, autofocus: false, decoration: InputDecoration( isDense: true, hintText: '请输入人员名称'.tr, hintStyle: FlutterFlowTheme.of(context) .labelMedium .override( 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), ), ), style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: Colors.black, ), cursorColor: FlutterFlowTheme.of(context) .primaryText, ), ), ), ), '修改人员名称'.tr, onConfirm: () async { ApiResponse response = await personController.updatePersonName( widget.device['person'], widget.device['_id'], ); if (response.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); bodyDeviceController.updateAll(); } }, onCancel: () { print('用户点击了取消'); }, ); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.重命名".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), // 删除 ClickableContainer( padding: EdgeInsets.symmetric(vertical: 16.rpx), backgroundColor: Colors.transparent, highlightColor: themeController.currentColor.sc16 .withOpacity(0.1), borderRadius: 8.rpx, onTap: () { _popupEntry?.remove(); _popupEntry = null; showConfirmDialog( context, Container(), "是否确认解绑".tr, onConfirm: () async { ApiResponse apiResponse = await bodyDeviceController .deleteDevice(widget.device); if (apiResponse.code == HttpStatusCodes.ok) { bodyDeviceController.getDeviceList(); TopSlideNotification.show( context, text: apiResponse.msg!, ); } else { TopSlideNotification.show( context, text: apiResponse.msg!, textColor: themeController.currentColor.sc9, ); } }, onCancel: () {}, ); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, mainAxisSize: MainAxisSize.min, children: [ SizedBox(width: 24.rpx, height: 24.rpx), SizedBox(width: 10.rpx), Text( "体征检测设备.删除".tr, style: TextStyle( fontSize: AppConstants().normal_text_fontSize, color: themeController.currentColor.sc3, ), ), ], ), ), ], ), ), ), ), ], ), ), ); } Overlay.of(context)?.insert(_popupEntry!); } @override Widget build(BuildContext context) { return Container( width: double.infinity, decoration: BoxDecoration( color: themeController.currentColor.sc5, borderRadius: BorderRadius.circular(20.rpx), ), child: Padding( padding: EdgeInsetsDirectional.fromSTEB(30.rpx, 30.rpx, 30.rpx, 30.rpx), child: Container( width: double.infinity, child: Column( mainAxisSize: MainAxisSize.max, children: [ Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( // 'TH689564522DL', '${widget.device['person']['name'] ?? '未命名'.tr}', style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 30.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ClickableContainer( key: _arrowKey, padding: EdgeInsetsDirectional.fromSTEB( 16.rpx, 16.rpx, 14.rpx, 16.rpx), backgroundColor: Colors.transparent, highlightColor: Colors.black.withOpacity(0.1), borderRadius: 8.rpx, onTap: _showPopup, child: Container( width: 15.rpx, height: 8.rpx, child: SvgPicture.asset( 'assets/img/icon/arrow_down.svg', fit: BoxFit.cover, color: Colors.white, ), ), ), ], ), SizedBox(height: 40.rpx), Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 100.rpx, constraints: BoxConstraints( minWidth: 105.rpx, ), decoration: BoxDecoration(), child: Text( '设备ID'.tr, style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), Text( '${widget.device['_id']}', style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ].divide(SizedBox(width: 34.rpx)), ), SizedBox(height: 40.rpx), Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 100.rpx, constraints: BoxConstraints( minWidth: 105.rpx, ), decoration: BoxDecoration(), child: Text( '更新时间'.tr, style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), Text( '${widget.device['update_time'] != null ? MyUtils.formatDateTime(widget.device['update_time']) : '未知时间'.tr}', style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ].divide(SizedBox(width: 34.rpx)), ), SizedBox(height: 40.rpx), if (widget.device['bind_type'] == BindType.active.code) Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 100.rpx, constraints: BoxConstraints( minWidth: 105.rpx, ), decoration: BoxDecoration(), child: Text( '已分享'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), Text( '${widget.device['shareNum']}' + "人".tr, style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc3, ), ), ].divide(SizedBox(width: 34.rpx)), ), // Icon( // Icons.arrow_back, // color: FlutterFlowTheme.of(context).primaryText, // size: 24.rpx, // ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 14.rpx, 0), child: Container( width: 28.rpx, height: 28.rpx, // width: double.infinity, decoration: BoxDecoration(), child: SvgPicture.asset( 'assets/img/icon/group.svg', fit: BoxFit.cover, // color: stringToColor("#333333"), //固定 color: Colors.white, ), ), ), ].divide(SizedBox(width: 34.rpx)), ), if (widget.device['bind_type'] == BindType.share.code) Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 100.rpx, constraints: BoxConstraints( minWidth: 105.rpx, ), decoration: BoxDecoration(), child: Text( '设备来源'.tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), Text( '张三', style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ].divide(SizedBox(width: 34.rpx)), ), // Icon( // Icons.arrow_back, // color: FlutterFlowTheme.of(context).primaryText, // size: 24.rpx, // ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 14.rpx, 0), child: Container( width: 28.rpx, height: 28.rpx, // width: double.infinity, decoration: BoxDecoration(), // child: SvgPicture.asset( // 'assets/img/icon/group.svg', // fit: BoxFit.cover, // color: Colors.white, // // color: stringToColor("#333333"), //固定 // ), child: Text( "云关爱".tr, style: TextStyle( color: themeController.currentColor.sc4, fontSize: AppConstants().normal_text_fontSize, ), ), ), ), ].divide(SizedBox(width: 34.rpx)), ), SizedBox(height: 40.rpx), Row( mainAxisSize: MainAxisSize.max, children: [ Container( width: 100.rpx, constraints: BoxConstraints( minWidth: 105.rpx, ), decoration: BoxDecoration(), child: Text( '设备状态', style: FlutterFlowTheme.of(context).bodyMedium.override( fontFamily: 'Inter', fontSize: 26.rpx, letterSpacing: 0.0, color: themeController.currentColor.sc4, ), ), ), Row( mainAxisSize: MainAxisSize.max, children: [ if (widget.device['status']['wifi'] != null && widget.device['status']['wifi'] != -1) Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 0, 0), child: Container( width: 25.rpx, height: 25.rpx, decoration: BoxDecoration(), child: SvgPicture.asset( 'assets/img/icon/signal${widget.device['status']['wifi']}.svg', fit: BoxFit.fill, ), ), ), Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 0, 0), child: Container( width: 16.rpx, height: 36.rpx, // width: double.infinity, decoration: BoxDecoration(), child: widget.device['status']['inBed'] == 0 ? SvgPicture.asset( 'assets/img/icon/not_bed.svg', fit: BoxFit.fill, ) : SvgPicture.asset( 'assets/img/icon/in_bed.svg', fit: BoxFit.fill, ), ), ), if (widget.device['status']['failure'] != 0) Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 0, 0), child: Container( width: 27.rpx, height: 27.rpx, decoration: BoxDecoration(), child: SvgPicture.asset( 'assets/img/icon/device_issue.svg', fit: BoxFit.cover, ), ), ), if (widget.device['status']['upgrade'] != 0) Padding( padding: EdgeInsetsDirectional.fromSTEB(0, 0.rpx, 0, 0), child: Container( width: 34.rpx, height: 24.rpx, decoration: BoxDecoration(), child: SvgPicture.asset( 'assets/img/icon/upgrade.svg', fit: BoxFit.cover, // color: themeController.currentColor.sc3, //固定 ), ), ), //todo 缺少一个设备离线的图标 ].divide(SizedBox(width: 50.rpx)), ), ].divide(SizedBox(width: 34.rpx)), ), Divider( thickness: 2, color: themeController.currentColor.sc4, ), SizedBox(height: 5.rpx), Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ CustomCard( borderRadius: AppConstants().button_container_radius, onTap: () { // personController.currentPersonId = widget.device if (widget.device['person'] != null) { personController.currentPersonId.value = widget.device['_id']; personController.name.value = widget.device['person']['name']; personController.gender.value = widget.device['person']['gender'] ?? 1; personController.weight.value = widget.device['person']['weight'] ?? 0; personController.selectedDiseaseIds.value = widget.device['person']['disease'] ?? []; personController.birthday.value = widget.device['person']['birthday'] ?? ''; personController.dateTime = MyUtils.formatBirthdayTime( widget.device['person']['birthday']); } // Get.toNamed("/personPage"); Get.toNamed("/updatePersonPage"); }, colors: [ themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Padding( padding: EdgeInsetsDirectional.fromSTEB( 0.rpx, 0.rpx, 0.rpx, 0.rpx), child: Container( width: MediaQuery.sizeOf(context).width * 0.19, height: MediaQuery.sizeOf(context).height * 0.0037, constraints: BoxConstraints( minWidth: 143.rpx, minHeight: 61.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( "体征检测设备.人员资料".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( color: themeController.currentColor.sc3, fontFamily: 'Inter', fontSize: AppConstants().normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 17.rpx)), ), ), ), ), CustomCard( borderRadius: AppConstants().button_container_radius, onTap: () { Get.toNamed("/instantBodyPage", arguments: widget.device); }, colors: [ themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Container( width: MediaQuery.sizeOf(context).width * 0.19, height: MediaQuery.sizeOf(context).height * 0.0037, constraints: BoxConstraints( minWidth: 143.rpx, minHeight: 61.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "体征检测设备.实时体征".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( color: themeController.currentColor.sc3, fontFamily: 'Inter', fontSize: AppConstants().normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 17.rpx)), ), ), ), CustomCard( borderRadius: AppConstants().button_container_radius, onTap: () { TopSlideNotification.show(context, text: "待开发功能".tr); }, colors: [ themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Container( width: MediaQuery.sizeOf(context).width * 0.19, height: MediaQuery.sizeOf(context).height * 0.0037, constraints: BoxConstraints( minWidth: 143.rpx, minHeight: 61.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "体征检测设备.消息回看".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( color: themeController.currentColor.sc3, fontFamily: 'Inter', fontSize: AppConstants().normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 17.rpx)), ), ), ), CustomCard( borderRadius: AppConstants().button_container_radius, onTap: () { String mac = widget.device['mac']; String sleepReportUrl = "${ServiceConstant.sleep_report_url}?mac=${mac}&token=${ServiceConstant.sleep_token}"; Get.toNamed("/sleepReportPage", arguments: sleepReportUrl); }, colors: [ themeController.currentColor.sc1, themeController.currentColor.sc2, ], child: Container( width: MediaQuery.sizeOf(context).width * 0.19, height: MediaQuery.sizeOf(context).height * 0.0037, constraints: BoxConstraints( minWidth: 143.rpx, minHeight: 61.rpx, ), child: Row( mainAxisSize: MainAxisSize.max, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "体征检测设备.健康报告".tr, style: FlutterFlowTheme.of(context) .bodyMedium .override( color: themeController.currentColor.sc3, fontFamily: 'Inter', fontSize: AppConstants().normal_text_fontSize, letterSpacing: 0.0, ), ), ].divide(SizedBox(width: 17.rpx)), ), ), ), ], ), ].divide(SizedBox(height: 0.rpx)), ), ), ), ); } }