From 7d93f2fbc42c3c853d6f8f3b9ab6dafcf648f5aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AD=8F=E5=B0=91=E9=98=B3?= <786612630@qq.com> Date: Sat, 15 Jun 2024 18:09:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BE=A4=E5=8F=91=E7=94=B5?= =?UTF-8?q?=E5=AD=90=E9=92=A5=E5=8C=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../volumeAuthorizationLock_page.dart | 27 ++++----- .../massSendLockGroupListEntity.dart | 6 +- .../massSendLockGroupList_logic.dart | 34 ++++++++++++ .../massSendLockGroupList_page.dart | 55 ++++++++++++------- .../massSendLockGroupList_state.dart | 21 ++++--- lib/tools/ExpandedListView.dart | 25 +++++++-- 6 files changed, 119 insertions(+), 49 deletions(-) diff --git a/lib/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/volumeAuthorizationLock_page.dart b/lib/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/volumeAuthorizationLock_page.dart index 0781f3b0..e8d92d4d 100755 --- a/lib/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/volumeAuthorizationLock_page.dart +++ b/lib/main/lockDetail/authorizedAdmin/volumeAuthorizationLock/volumeAuthorizationLock_page.dart @@ -185,20 +185,21 @@ class _VolumeAuthorizationLockPageState ? TranslationLoader.lanKeys!.pleaseSelect!.tr : state.lockIdList.length.toString(), isHaveDirection: true, - action: () { - Navigator.pushNamed(context, Routers.massSendLockGroupListPage, - arguments: {'keyLimits': '1'}) - .then((Object? value) { - //得到选中的锁ID列表 - if (value is Map && - value['selectLockIdList'] is List) { - state.lockIdList.clear(); - value['selectLockIdList'].forEach((element) { - state.lockIdList.add(element); + action: () async { + final result = await Get.toNamed(Routers.massSendLockGroupListPage, + arguments: { + 'keyLimits': '1', + 'lockIdList': state.lockIdList.value }); - setState(() {}); - } - }); + if (result != null && result.isNotEmpty) { + final List selectLockIdList = result['selectLockIdList']; + state.lockIdList.value.clear(); + // state.lockIdList.addAll(state.lockIdList.value); + selectLockIdList.forEach((element) { + state.lockIdList.value.add(element); + }); + setState(() {}); + } }), Container(height: 10.h), CommonItem( diff --git a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart index b3d557b0..cf2dac59 100755 --- a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart +++ b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart @@ -55,11 +55,11 @@ class GroupListItem { int? groupType; //组类型 0未分组 1非未分组 String? keyGroupName; List? lockList; - bool _isChecked = false; - bool get isChecked => _isChecked ?? false; + bool isChecked = false; + // bool get isChecked => _isChecked ?? false; bool isVip = false; - set isChecked(bool value) => _isChecked = value; + // set isChecked(bool value) => _isChecked = value; GroupListItem( {this.lockNum, diff --git a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart index ee92feed..f613187d 100755 --- a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart +++ b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_logic.dart @@ -1,3 +1,4 @@ +import 'package:star_lock/app_settings/app_settings.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart'; import 'package:star_lock/network/api_repository.dart'; @@ -14,6 +15,39 @@ class MassSendLockGroupListLogic extends BaseGetXController { if (entity.errorCode!.codeIsSuccessful) { if (entity.data != null) { state.lockGroupList.value = entity.data!.groupList!; + + // 实现如果传入的selectLockIdList不为空,就state.lockGroupList.value里面的每个item的isSelected为true + if (state.selectLockIdList.isNotEmpty) { + for (int i = 0; i < state.lockGroupList.length; i++) { + final GroupListItem groupItem = state.lockGroupList[i]; + for (int j = 0; j < groupItem.lockList!.length; j++) { + final LockListItem lockItem = groupItem.lockList![j]; + if (state.selectLockIdList.contains(lockItem.lockId)) { + lockItem.isChecked = true; + }else{ + lockItem.isChecked = false; + } + } + } + } + + // 如果state.lockGroupList里面的每个item的isSelected为true则state.lockGroupList的isSelected为true + for (int i = 0; i < state.lockGroupList.length; i++) { + final GroupListItem groupItem = state.lockGroupList[i]; + if (groupItem.lockList != null && groupItem.lockList!.isNotEmpty) { + bool isAllChecked = true; + for (int j = 0; j < groupItem.lockList!.length; j++) { + final LockListItem lockItem = groupItem.lockList![j]; + // AppLog.log('111lockItem.lockId:${lockItem.lockId} lockItem.isChecked:${lockItem.isChecked}'); + if (!lockItem.isChecked) { + isAllChecked = false; + break; + } + } + groupItem.isChecked = isAllChecked; + } + } + state.lockGroupList.refresh(); } } diff --git a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart index 5d9b5d6b..91b2f73e 100755 --- a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart +++ b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_page.dart @@ -1,3 +1,4 @@ + import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; @@ -11,6 +12,8 @@ import 'package:star_lock/tools/showCupertinoAlertView.dart'; import 'package:star_lock/tools/submitBtn.dart'; import 'package:star_lock/translations/trans_lib.dart'; +import '../../../../../app_settings/app_settings.dart'; + class MassSendLockGroupListPage extends StatefulWidget { const MassSendLockGroupListPage({Key? key}) : super(key: key); @@ -21,10 +24,8 @@ class MassSendLockGroupListPage extends StatefulWidget { } class _MassSendLockGroupListPageState extends State { - final MassSendLockGroupListLogic logic = - Get.put(MassSendLockGroupListLogic()); - final MassSendLockGroupListState state = - Get.find().state; + final MassSendLockGroupListLogic logic = Get.put(MassSendLockGroupListLogic()); + final MassSendLockGroupListState state = Get.find().state; @override void initState() { @@ -54,9 +55,9 @@ class _MassSendLockGroupListPageState extends State { body: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, - children: [ + children: [ Obx(() => Visibility( - visible: state.isVip.value ? false : true, + visible: !state.isVip.value, child: ShowCupertinoAlertView() .topTipsAdvancedFeatures('开通高级功能后才可以对锁进行管理'.tr))), SizedBox( @@ -76,14 +77,13 @@ class _MassSendLockGroupListPageState extends State { child: Obx( () => _buildListView(context, state.lockGroupList.value))), Obx(() => Visibility( - visible: state.isVip.value ? true : false, + visible: state.isVip.value, child: SubmitBtn( btnName: '确定'.tr, onClick: () { - final Map resultMap = {}; - resultMap['selectLockIdList'] = - state.selectLockIdList.value; - Navigator.pop(context, resultMap); + Map resultMap = {}; + resultMap['selectLockIdList'] = state.selectLockIdList.value; + Get.back(result: resultMap); }, ), )), @@ -102,7 +102,7 @@ class _MassSendLockGroupListPageState extends State { return _buildLockExpandedList(context, index, itemData); }, shrinkWrap: true, - separatorBuilder: (BuildContext context, index) { + separatorBuilder: (BuildContext context, int index) { return const Divider( height: 1, color: AppColors.greyLineColor, @@ -112,20 +112,20 @@ class _MassSendLockGroupListPageState extends State { //设备多层级列表 Widget _buildLockExpandedList(context, index, GroupListItem itemData) { - List lockItemList = itemData.lockList ?? []; + final List lockItemList = itemData.lockList ?? []; itemData.isVip = state.isVip.value; return ExpandedListTile( onTap: () { //是否选中组 if (itemData.isChecked) { - var selectList = itemData.lockList; - for (LockListItem lockListItem in selectList!) { + final List? selectList = itemData.lockList; + for (final LockListItem lockListItem in selectList!) { lockListItem.isChecked = true; - state.selectLockIdList.value.add(lockListItem.lockId); + state.selectLockIdList.value.add(lockListItem.lockId??0); } } else { - var selectList = itemData.lockList; - for (LockListItem lockListItem in selectList!) { + final List? selectList = itemData.lockList; + for (final LockListItem lockListItem in selectList!) { lockListItem.isChecked = false; state.selectLockIdList.value.remove(lockListItem.lockId); } @@ -133,17 +133,30 @@ class _MassSendLockGroupListPageState extends State { setState(() {}); }, isShowBtn: true, + isCheck: itemData.isChecked, typeImgList: const [], groupItem: itemData, child: massSendLockGroupCell(index, currentIndex: index, lockListByGroup: lockItemList, isVip: state.isVip.value, - isShowBtn: true, selectLockAction: (selectIndex, selectLockId) { - LockListItem lockItem = lockItemList[selectIndex]; + isShowBtn: true, selectLockAction: (int selectIndex, String selectLockId) { + final LockListItem lockItem = lockItemList[selectIndex]; lockItem.isChecked = !lockItem.isChecked; if (lockItem.isChecked) { - state.selectLockIdList.value.add(lockItem.lockId); + state.selectLockIdList.value.add(lockItem.lockId??0); + // 实现lockItemList里面的所有数据都选中的话 itemData.isChecked设置选中 + bool isAllChecked = true; + for (final LockListItem lockListItem in lockItemList) { + if (!lockListItem.isChecked) { + isAllChecked = false; + break; + } + } + itemData.isChecked = isAllChecked; + }else{ + state.selectLockIdList.value.remove(lockItem.lockId); + itemData.isChecked = false; } setState(() {}); }), diff --git a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart index 94c259a3..ffcaab90 100755 --- a/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart +++ b/lib/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupList_state.dart @@ -1,15 +1,20 @@ import 'package:get/get.dart'; +import 'package:star_lock/app_settings/app_settings.dart'; -class MassSendLockGroupListState { - var lockGroupList = [].obs; - var selectLockIdList = [].obs; - var isVip = false.obs; - - var keyLimits = '';// 1管理员(包括超级管理员跟管理员) 2普通用户 +class MassSendLockGroupListState {// 1管理员(包括超级管理员跟管理员) 2普通用户 MassSendLockGroupListState(){ - Map map = Get.arguments; - if(map["keyLimits"] != null){ + final Map map = Get.arguments; + if(map['keyLimits'] != null){ keyLimits = map['keyLimits']; } + if(map['lockIdList'] != null){ + var list = map['lockIdList']; + selectLockIdList.value.addAll(list); + } } + RxList lockGroupList = [].obs; + RxList selectLockIdList = [].obs; + RxBool isVip = false.obs; + + String keyLimits = ''; } diff --git a/lib/tools/ExpandedListView.dart b/lib/tools/ExpandedListView.dart index 618f484f..31bca4cf 100755 --- a/lib/tools/ExpandedListView.dart +++ b/lib/tools/ExpandedListView.dart @@ -3,13 +3,18 @@ import 'dart:core'; 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/app_settings/app_settings.dart'; import 'package:star_lock/main/lockDetail/electronicKey/massSendElectronicKey/massSendLockGroupList/massSendLockGroupListEntity.dart'; class ExpandedListTile extends StatefulWidget { const ExpandedListTile( - {required this.isShowBtn, required this.groupItem, required this.typeImgList, Key? key, - this.child, - this.onTap}) + {required this.isShowBtn, + required this.groupItem, + required this.typeImgList, + this.isCheck = false, + this.child, + this.onTap, + Key? key}) : super(key: key); final Widget? child; @@ -17,7 +22,7 @@ class ExpandedListTile extends StatefulWidget { final Function()? onTap; final GroupListItem groupItem; final bool isShowBtn; - + final bool isCheck; @override _ExpandedListTileState createState() => _ExpandedListTileState(); } @@ -27,6 +32,18 @@ class _ExpandedListTileState extends State { final Duration _animationDuration = const Duration(milliseconds: 200); bool _isCheck = false; + @override + void initState() { + super.initState(); + _isCheck = widget.isCheck; // Initialize _isCheck with the value from the widget + } + + @override + void didUpdateWidget(ExpandedListTile oldWidget) { + super.didUpdateWidget(oldWidget); + _isCheck = widget.isCheck; // Initialize _isCheck with the value from the widget + } + @override Widget build(BuildContext context) { return Column(