From 60614a53b15ff8709576a3d1b255401c7c7664da Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Fri, 26 Jan 2024 16:19:01 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=202=EF=BC=8C=E9=97=A8=E9=94=81=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/main/icon_lockLog_play.png | Bin 0 -> 1319 bytes .../doorLockLog/doorLockLog_page.dart | 71 ++++---- .../doorLockLog/doorLockLog_state.dart | 12 +- star_lock/lib/network/api.dart | 4 +- .../tools/advancedCalendar/src/header.dart | 2 +- .../lib/tools/menuItem/dropDownItem.dart | 14 ++ .../lib/tools/menuItem/xsDropDownWidget.dart | 161 ++++++++++++++++++ 7 files changed, 226 insertions(+), 38 deletions(-) create mode 100644 star_lock/images/main/icon_lockLog_play.png create mode 100644 star_lock/lib/tools/menuItem/dropDownItem.dart create mode 100644 star_lock/lib/tools/menuItem/xsDropDownWidget.dart diff --git a/star_lock/images/main/icon_lockLog_play.png b/star_lock/images/main/icon_lockLog_play.png new file mode 100644 index 0000000000000000000000000000000000000000..fec3120cc1d64f47941d6e44464d21c3b8378e1c GIT binary patch literal 1319 zcmV+?1=#wDP)SFe8e>j!@zA}lX2->%o|o)ChRQpfTVLQuV4_m-EJZwI1Xo4H)>z;HQEFvgI})_Uzf8GMUU# zYdbX2XcSV)+|tt0Z#2w;S9#zH|B9TZ^3o_B?;`=_D%_geVD!Sb+^7%YwXJ?Vk zW})l)$P#LZMWfL`xm-r6R6-;Y8RgfK}rcF2%O)wP0Bm(&=<);Q<Aq0dFuq+Gte11FR z!Vo%*9z-B4`0VwzMq+bw6OQBH^5x5j$K#@0Z>}&(JCU87%pja&8%$X7_%R(ZN z7)q6@DN=i1CVirCrPS87Pbt9|LpGazFa8Xsr>BQoN({ruw)fwE-wGE6fWa^foIZUT z=g*(V$&)9CzBd@^9M~ES38e_SuER7&1O>-n0o6rxyIft(6+Y1yCkW3~~ zEEZwgHcF)uCMG71?}jECjlwidwA*b+DWU5+PMtc1bLYOo{Cs)zTgtEolF1}4Uc88S zJPy}&k;~;^+cr$o9JzR42oIp^I`a8EIOp(vABjW)nM`KnuT=sxIglbu8f9!N(-e!v zAG%71`}XZ$jEGRFRQ|MW z`^wnZ*iq{`6un*#^?JQpE|=#x0Mu%=Uz*LP^MBYI5D{LzdL`=h`p?@9M1=eI?_YoZ z{Q0}%e#Er8y87}mVUnvA;jOV z>sB{5HWsg4ySBL9XTPwyd-rZEl}ep^f6N+IRP3-e7-KQc`3J|hMC5y(x8XSNs<&?a d@M3qLe*q>1E1VI6bBzE1002ovPDHLkV1l8(Zt4I4 literal 0 HcmV?d00001 diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart index 6d3ea284..57750ac2 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_page.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/appRouters.dart'; import 'package:star_lock/main/lockDetail/doorLockLog/doorLockLog_logic.dart'; import 'package:star_lock/tools/advancedCalendar/src/widget.dart'; +import 'package:star_lock/tools/menuItem/xsDropDownWidget.dart'; import 'package:timelines/timelines.dart'; import '../../../app_settings/app_colors.dart'; @@ -122,35 +124,18 @@ class _DoorLockLogPageState extends State { //事件下拉框组件 Widget eventDropDownWidget() { - return Row(children: [ - SizedBox( - width: 50.w, + return Container( + margin: EdgeInsets.only(top: 20.h, left: 30.w, bottom: 20.h), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Obx(() => XSDropDownWidget( + items: state.getDropDownItemList, + value: state.dropdownValue.value, + valueChanged: (value) {})), + ], ), - Obx(() => DropdownButton( - value: state.dropdownValue.value, - icon: const Icon(Icons.arrow_drop_down), - iconSize: 40, - elevation: 12, - style: TextStyle( - fontSize: 26.sp, - color: Colors.black, - fontWeight: FontWeight.w600), - iconEnabledColor: Colors.grey, - underline: Container( - height: 0, - ), - onChanged: (newValue) { - state.dropdownValue.value = newValue!; - }, - items: state.dropDownItemList.obs - .map>((item) { - return DropdownMenuItem( - value: item, - child: Text(item), - ); - }).toList(), - )) - ]); + ); } //时间轴组件 @@ -175,11 +160,31 @@ class _DoorLockLogPageState extends State { color: Colors.black, fontSize: 24.sp, fontWeight: FontWeight.w600)), - Image( - image: const AssetImage( - 'images/main/icon_lockDetail_monitoringvoiceFrist.png'), - width: 260.w, - height: 260.h, + GestureDetector( + onTap: () { + Get.toNamed(Routers.videoLogDetailPage); + }, + child: Stack( + children: [ + Image( + image: const AssetImage( + 'images/main/icon_lockDetail_monitoringvoiceFrist.png'), + width: 260.w, + height: 260.h, + ), + //在图片上添加一个三角视频图标 + Positioned( + top: 200.h, + left: 10.w, + child: Image( + image: const AssetImage( + 'images/main/icon_lockLog_play.png'), + width: 24.w, + height: 20.w, + ), + ), + ], + ), ), ], ), diff --git a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart index c89b39ce..e3b30267 100644 --- a/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart +++ b/star_lock/lib/main/lockDetail/doorLockLog/doorLockLog_state.dart @@ -1,5 +1,7 @@ +import 'package:flutter/cupertino.dart'; import 'package:get/get.dart'; import 'package:star_lock/tools/advancedCalendar/src/controller.dart'; +import 'package:star_lock/tools/menuItem/dropDownItem.dart'; import '../../lockMian/entity/lockListInfo_entity.dart'; import '../electronicKey/electronicKeyDetail/keyOperationRecordEntity.dart'; @@ -14,8 +16,14 @@ class DoorLockLogState { DateTime(2024, 10, 10), ]; var dropdownValue = '全部事件'.obs; - final List dropDownItemList = - ['全部事件', '门锁异常', '有人出现', '有人按门铃', '一次性密码开门'].obs; + List getDropDownItemList = [ + DropDownItem(itemTitle: "全部事件", itemValue: '0', isCheked: false), + DropDownItem(itemTitle: "开锁事件", itemValue: '1', isCheked: false), + DropDownItem(itemTitle: "异常事件", itemValue: '2', isCheked: false), + DropDownItem(itemTitle: "门锁事件", itemValue: '3', isCheked: false), + DropDownItem(itemTitle: "视频事件", itemValue: '4', isCheked: false), + ]; + var currentStep = 0.obs; DoorLockLogState() { diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index 0f0096cc..5f658d46 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -1,6 +1,6 @@ abstract class Api { - // static String baseAddress = "https://pre.lock.star-lock.cn"; //预发布环境 - static String baseAddress = "https://dev.lock.star-lock.cn"; //联调环境 + static String baseAddress = "https://pre.lock.star-lock.cn"; //预发布环境 + // static String baseAddress = "https://dev.lock.star-lock.cn"; //联调环境 // static String baseAddress = "http://192.168.1.15:8022"; //谢总本地 // static String baseAddress = "https://ge.lock.star-lock.cn"; //葛工开发环境地址 diff --git a/star_lock/lib/tools/advancedCalendar/src/header.dart b/star_lock/lib/tools/advancedCalendar/src/header.dart index bdc50a97..1a09140e 100644 --- a/star_lock/lib/tools/advancedCalendar/src/header.dart +++ b/star_lock/lib/tools/advancedCalendar/src/header.dart @@ -51,7 +51,7 @@ class Header extends StatelessWidget { '今天', style: TextStyle( color: Colors.black, - fontSize: 22.sp, + fontSize: 24.sp, fontWeight: FontWeight.w600), ), ), diff --git a/star_lock/lib/tools/menuItem/dropDownItem.dart b/star_lock/lib/tools/menuItem/dropDownItem.dart new file mode 100644 index 00000000..b08b44c3 --- /dev/null +++ b/star_lock/lib/tools/menuItem/dropDownItem.dart @@ -0,0 +1,14 @@ +/// 通用菜单项 +class DropDownItem { + // 显示的文本 + String itemTitle = ''; + // 选中的值 + dynamic itemValue; + // 是否选中 + bool isCheked = false; + + DropDownItem( + {required this.itemTitle, + required this.itemValue, + required this.isCheked}); +} diff --git a/star_lock/lib/tools/menuItem/xsDropDownWidget.dart b/star_lock/lib/tools/menuItem/xsDropDownWidget.dart new file mode 100644 index 00000000..25ea1eb4 --- /dev/null +++ b/star_lock/lib/tools/menuItem/xsDropDownWidget.dart @@ -0,0 +1,161 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:star_lock/app_settings/app_colors.dart'; +import 'package:star_lock/tools/menuItem/dropDownItem.dart'; + +/// @author baorant +/// @创建时间:2024/4/11 +/// 下拉菜单按钮组件 +class XSDropDownWidget extends StatefulWidget { + // 显示的菜单项 + List items = []; + // 当前选中的值 + final dynamic value; + // 选择框前的标题 + final String? title; + // 提示语 + final String tooltip; + // 选中数据的回调事件 + final ValueChanged? valueChanged; + XSDropDownWidget( + {Key? key, + required this.items, + this.value, + this.valueChanged, + this.title, + this.tooltip = "点击选择"}) + : super(key: key); + + @override + State createState() => _XSDropDownWidgetState(); +} + +class _XSDropDownWidgetState extends State { + String label = '请选择'; + // 是否展开下拉按钮 + bool isExpand = false; + // 当前的值 + dynamic currentValue; + + @override + void initState() { + currentValue = widget.value; + super.initState(); + } + + /// 根据当前的value处理当前文本显示 + void initTitle() { + if (currentValue != null) { + // 有值查值 + for (DropDownItem item in widget.items) { + if (item.itemValue == currentValue) { + label = item.itemTitle; + return; + } + } + } + // 没值默认取第一个 + if (widget.items.isNotEmpty) { + label = widget.items[0].itemTitle; + } + } + + @override + Widget build(BuildContext context) { + initTitle(); + return Wrap( + children: [ + if (widget.title != null) + Text(widget.title!, + style: TextStyle( + fontSize: 26.sp, + color: Colors.black, + fontWeight: FontWeight.w600, + )), + PopupMenuButton( + color: Colors.white, + // initialValue: currentValue, + tooltip: widget.tooltip, + offset: const Offset(0, 30), + enableFeedback: true, + child: Listener( + // 使用listener事件能够继续传递 + onPointerDown: (event) { + setState(() { + isExpand = !isExpand; + }); + }, + child: Wrap( + children: [ + Text( + label, + style: TextStyle( + fontSize: 24.sp, + color: Colors.black, + fontWeight: FontWeight.w600, + ), + ), + isExpand + ? const Icon(Icons.arrow_drop_up) + : const Icon(Icons.arrow_drop_down) + ], + ), + ), + onSelected: (value) { + widget.valueChanged?.call(value); + setState(() { + currentValue = value; + isExpand = !isExpand; + }); + }, + onCanceled: () { + // 取消展开 + setState(() { + isExpand = false; + }); + }, + itemBuilder: (context) { + return widget.items.map((item) { + return PopupMenuItem( + value: item.itemValue, + child: Container( + margin: + EdgeInsets.only(left: 0.w, right: 0, top: 0, bottom: 0), + color: item.itemValue == currentValue + ? AppColors.mainColor + : null, // 设置选中项背景色为蓝色 + child: Text( + item.itemTitle, + style: TextStyle( + color: item.itemValue == currentValue + ? Colors.white + : Colors.black, // 设置选中项文字颜色为白色 + ), + ), + ), + ); + }).toList(); + }, + // itemBuilder: (context) { + // return widget.items + // .map( + // (item) => item.itemValue == currentValue + // ? PopupMenuItem( + // value: item.itemValue, + // child: Text( + // item.itemTitle, + // style: TextStyle(color: AppColors.mainColor), + // ), + // ) + // : PopupMenuItem( + // value: item.itemValue, + // child: Text(item.itemTitle), + // ), + // ) + // .toList(); + // }, + ) + ], + ); + } +}