From 9f6f52559f71f8155b607c4266b25fe704c3d393 Mon Sep 17 00:00:00 2001 From: Daisy <> Date: Fri, 26 Apr 2024 14:48:26 +0800 Subject: [PATCH] =?UTF-8?q?1=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=BA=91=E5=AD=98=E8=A7=86=E9=A2=91=E6=8E=A5=E5=8F=A3=E5=AF=B9?= =?UTF-8?q?=E6=8E=A5=202=EF=BC=8C=E7=BC=96=E8=BE=91=E4=BA=91=E5=AD=98?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E9=A1=B5=E9=9D=A2=E5=88=A0=E9=99=A4=E5=8F=8A?= =?UTF-8?q?=E5=85=A8=E9=80=89=E9=80=BB=E8=BE=91=E5=A4=84=E7=90=86=203?= =?UTF-8?q?=EF=BC=8C=E4=BA=91=E5=AD=98=E8=A7=86=E9=A2=91=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=9B=BD=E9=99=85=E5=8C=96=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=204=EF=BC=8C=E6=96=B0=E5=A2=9E=E4=B8=8B=E8=BD=BD=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E9=A1=B5=E5=8F=8A=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- star_lock/images/lan/lan_en.json | 6 +- star_lock/images/lan/lan_keys.json | 6 +- star_lock/images/lan/lan_zh.json | 6 +- .../editVideoLog/editVideoLog_logic.dart | 26 +++- .../editVideoLog/editVideoLog_page.dart | 141 +++++++++++------- .../editVideoLog/editVideoLog_state.dart | 9 +- .../videoLog/videoLog/videoLog_entity.dart | 1 + .../videoLog/videoLog/videoLog_logic.dart | 7 + .../videoLog/videoLog/videoLog_page.dart | 12 +- .../videoLog/videoLog/videoLog_state.dart | 3 +- .../videoLogDetail/videoLogDetail_page.dart | 2 +- .../videoLogDownLoad_page.dart | 115 +++++++------- .../videoLogDownLoad_state.dart | 14 +- star_lock/lib/network/api.dart | 1 + star_lock/lib/network/api_provider.dart | 4 + star_lock/lib/network/api_repository.dart | 7 + 16 files changed, 229 insertions(+), 131 deletions(-) diff --git a/star_lock/images/lan/lan_en.json b/star_lock/images/lan/lan_en.json index 625c2edd..f935e3b6 100644 --- a/star_lock/images/lan/lan_en.json +++ b/star_lock/images/lan/lan_en.json @@ -787,5 +787,9 @@ "下载列表":"Download list", "已下载":"Downloaded", "全部视频":"All videos", - "已为本设备免费提供3大滚动视频储存服务":"Three scrolling video storage services have been provided for this device free of charge" + "已为本设备免费提供3大滚动视频储存服务":"Three scrolling video storage services have been provided for this device free of charge", + "视频播放":"Video playback", + "全选":"Select all", + "请选择要删除的视频":"Please select the video you want to delete", + "请选择要下载的视频":"Please select the video you want to download" } diff --git a/star_lock/images/lan/lan_keys.json b/star_lock/images/lan/lan_keys.json index 66b4b37b..8d7771e5 100644 --- a/star_lock/images/lan/lan_keys.json +++ b/star_lock/images/lan/lan_keys.json @@ -786,5 +786,9 @@ "下载列表":"下载列表", "已下载":"已下载", "全部视频":"全部视频", - "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务" + "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务", + "视频播放":"视频播放", + "全选":"全选", + "请选择要删除的视频":"请选择要删除的视频", + "请选择要下载的视频":"请选择要下载的视频" } diff --git a/star_lock/images/lan/lan_zh.json b/star_lock/images/lan/lan_zh.json index a7ca0e21..b1b01fe7 100644 --- a/star_lock/images/lan/lan_zh.json +++ b/star_lock/images/lan/lan_zh.json @@ -789,5 +789,9 @@ "下载列表":"下载列表", "已下载":"已下载", "全部视频":"全部视频", - "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务" + "已为本设备免费提供3大滚动视频储存服务":"已为本设备免费提供3大滚动视频储存服务", + "视频播放":"视频播放", + "全选":"全选", + "请选择要删除的视频":"请选择要删除的视频", + "请选择要下载的视频":"请选择要下载的视频" } diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart index 8d45d5c7..19e0ee91 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_logic.dart @@ -1,8 +1,28 @@ - +import 'package:star_lock/network/api_repository.dart'; import 'package:star_lock/tools/baseGetXController.dart'; import 'editVideoLog_state.dart'; -class EditVideoLogLogic extends BaseGetXController{ +class EditVideoLogLogic extends BaseGetXController { EditVideoLogState state = EditVideoLogState(); -} \ No newline at end of file + void deleteLockCloudStorageList() async { + var entity = await ApiRepository.to.deleteLockCloudStorageList( + recordIds: state.selectVideoLogList.value.map((e) => e.recordId).toList(), + ); + if (entity.errorCode!.codeIsSuccessful) { + state.selectVideoLogList.value.clear(); + showToast('删除成功'); + getLockCloudStorageList(); + } + } + + void getLockCloudStorageList() async { + var entity = await ApiRepository.to.getLockCloudStorageList( + lockId: state.getLockId.value, + ); + if (entity.errorCode!.codeIsSuccessful) { + state.videoLogList.value = entity.data!; + state.videoLogList.refresh(); + } + } +} diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart index a8f94f11..6e5fbb72 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_page.dart @@ -1,6 +1,7 @@ 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/videoLog/videoLog/videoLog_entity.dart'; import 'package:star_lock/tools/dateTool.dart'; @@ -24,17 +25,38 @@ class _EditVideoLogPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "已选${state.selectVideoLog.value}项", + barTitle: "已选${state.selectVideoLogList.value.length}项", haveBack: true, backgroundColor: AppColors.mainColor, actionsList: [ TextButton( child: Text( - "全选", + "全选".tr, style: TextStyle(color: Colors.white, fontSize: 24.sp), ), onPressed: () async { state.isSelectAll.value = !state.isSelectAll.value; + if (state.selectVideoLogList.value.isEmpty) { + state.isSelectAll.value = true; + } + if (state.isSelectAll.value == true) { + state.selectVideoLogList.value.clear(); + state.videoLogList.forEach((element) { + element.recordList!.forEach((element) { + element.isSelect = true; + state.selectVideoLogList.add(element); + }); + }); + } else { + state.selectVideoLogList.value.clear(); + state.videoLogList.forEach((element) { + element.recordList!.forEach((element) { + element.isSelect = false; + state.selectVideoLogList.remove(element); + }); + }); + } + setState(() {}); }, ), ], @@ -91,70 +113,87 @@ class _EditVideoLogPageState extends State { } Widget videoItem(RecordListData recordData, int index) { - return SizedBox( + return Container( width: itemW, height: itemH, - child: Stack( - children: [ - Column( + color: Colors.white, + child: GestureDetector( + onTap: () { + recordData.isSelect = !recordData.isSelect!; + if (recordData.isSelect! == true) { + state.selectVideoLogList.add(recordData); + } else { + state.selectVideoLogList.remove(recordData); + } + setState(() {}); + }, + child: Stack( children: [ - Container( - width: itemW, - height: itemW, - margin: const EdgeInsets.all(0), - color: Colors.white, - child: ClipRRect( - borderRadius: BorderRadius.circular(10.w), - child: Image( - fit: BoxFit.cover, - image: Image.network(recordData.imagesUrl ?? - "images/icon_video_placeholder.jpg") - .image), - ), + Column( + children: [ + Container( + width: itemW, + height: itemW, + margin: const EdgeInsets.all(0), + color: Colors.white, + child: ClipRRect( + borderRadius: BorderRadius.circular(10.w), + child: Image( + fit: BoxFit.cover, + image: Image.network(recordData.imagesUrl ?? + "images/icon_video_placeholder.jpg") + .image), + ), + ), + SizedBox(height: 5.h), + Text( + DateTool() + .dateToYMDHNString(recordData.operateDate.toString()), + textAlign: TextAlign.center, + style: TextStyle(fontSize: 18.sp)) + ], ), - SizedBox(height: 5.h), - Text( - DateTool() - .dateToYMDHNString(recordData.operateDate.toString()), - textAlign: TextAlign.center, - style: TextStyle(fontSize: 18.sp)) + Positioned( + top: 0.w, + right: 0.w, + child: Image( + width: 36.w, + height: 36.w, + image: state.selectVideoLogList.value.contains(recordData) + ? const AssetImage("images/icon_round_select.png") + : const AssetImage("images/icon_round_unSelect.png"))) ], - ), - Visibility( - visible: true, - child: Positioned( - top: 0.w, - right: 0.w, - child: GestureDetector( - onTap: () {}, - child: Obx(() => Image( - width: 36.w, - height: 36.w, - image: state.isSelectAll.value - ? const AssetImage("images/icon_round_select.png") - : const AssetImage( - "images/icon_round_unSelect.png"))))), - ) - ], - ), + )), ); } Widget bottomBottomBtnWidget() { - return Container( + return SizedBox( width: 1.sw, child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [ bottomBtnItemWidget( "images/main/icon_lockDetail_monitoringDownloadVideo.png", - "下载", - Colors.white, - () {}), + "下载".tr, + Colors.white, () { + if (state.selectVideoLogList.value.isNotEmpty) { + Get.toNamed(Routers.videoLogDownLoadPage, arguments: { + "downloadVideoLogList": state.selectVideoLogList.value + }); + } else { + logic.showToast('请选择要下载的视频'); + } + }), SizedBox(width: 100.w), bottomBtnItemWidget( "images/main/icon_lockDetail_monitoringDeletVideo.png", - "删除", - AppColors.mainColor, - () {}) + "删除".tr, + AppColors.mainColor, () { + if (state.selectVideoLogList.value.isNotEmpty) { + logic.deleteLockCloudStorageList(); + } else { + logic.showToast('请选择要删除的视频'.tr); + } + }) ]), ); } @@ -164,7 +203,7 @@ class _EditVideoLogPageState extends State { var wh = 40.w; return GestureDetector( onTap: onClick, - child: Container( + child: SizedBox( height: 140.h, child: Column( crossAxisAlignment: CrossAxisAlignment.center, diff --git a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart index 7d4a7fe0..d83405a9 100644 --- a/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/editVideoLog/editVideoLog_state.dart @@ -1,15 +1,20 @@ import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; class EditVideoLogState { - var selectVideoLog = 0.obs; - var selectVideoLogList = [].obs; + var selectVideoLogList = [].obs; var isSelectAll = false.obs; var videoLogList = [].obs; + var getLockId = 0.obs; EditVideoLogState() { Map map = Get.arguments; if (map['videoDataList'] != null) { videoLogList.value = map['videoDataList']; } + + if (map['lockId'] != null) { + getLockId.value = map['lockId']; + } } } diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart index 7c7a90fd..9e8dd9a2 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_entity.dart @@ -62,6 +62,7 @@ class RecordListData { String? imagesUrl; String? videoUrl; int? recordType; + bool? isSelect = false; RecordListData( {this.recordId, diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart index be027017..0d717537 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_logic.dart @@ -14,4 +14,11 @@ class VideoLogLogic extends BaseGetXController { state.videoLogList.refresh(); } } + + @override + onReady() { + super.onReady(); + + getLockCloudStorageList(); + } } diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart index 44ce3e3f..5e4a24fc 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_page.dart @@ -22,12 +22,6 @@ class _VideoLogPageState extends State { final logic = Get.put(VideoLogLogic()); final state = Get.find().state; - @override - initState() { - super.initState(); - logic.getLockCloudStorageList(); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -234,8 +228,10 @@ class _VideoLogPageState extends State { iconSize: 30, color: Colors.black54, onPressed: () { - Get.toNamed(Routers.editVideoLogPage, - arguments: {"videoDataList": state.videoLogList.value}); + Get.toNamed(Routers.editVideoLogPage, arguments: { + "videoDataList": state.videoLogList.value, + "lockId": state.getLockId.value + }); }, ) // TextButton( diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart index 214c38d2..ac9f2358 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLog/videoLog_state.dart @@ -1,10 +1,11 @@ import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; class VideoLogState { var isNavLocal = false.obs; var localList = []; var getLockId = 0.obs; - var videoLogList = [].obs; + var videoLogList = [].obs; VideoLogState() { Map map = Get.arguments; diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart index 1f5a1d34..dc3938d0 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDetail/videoLogDetail_page.dart @@ -42,7 +42,7 @@ class _VideoLogDetailPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "视频播放", + barTitle: "视频播放".tr, haveBack: true, backgroundColor: AppColors.mainColor, ), diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart index 520ec302..5bd84efe 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_page.dart @@ -1,8 +1,8 @@ - - import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; +import 'package:star_lock/tools/dateTool.dart'; import '../../../../app_settings/app_colors.dart'; import '../../../../tools/noData.dart'; @@ -25,77 +25,74 @@ class _VideoLogDownLoadPageState extends State { return Scaffold( backgroundColor: Colors.white, appBar: TitleAppBar( - barTitle: "下载列表", + barTitle: "下载列表".tr, haveBack: true, backgroundColor: AppColors.mainColor, ), - body: Column( - children: [ - Expanded( - child: state.localList.isNotEmpty ? ListView.builder( - itemCount: 5, - itemBuilder: (c, index) { - return Column(children: [ - Container( - margin: EdgeInsets.only(left:20.w, top: 15.w, bottom: 15.w), - child: Row( - children: [ - Text("2023.10.23", style: TextStyle(fontSize: 20.sp)), - ] - )), - mainListView(index) - ],); - }): NoData(), - ), - ], + body: Container( + color: AppColors.greyBackgroundColor, + child: Column( + children: [ + Expanded( + child: Obx( + () => state.videoLogDownloadList.isNotEmpty + ? mainListView(state.videoLogDownloadList.value) + : NoData(), + )), + ], + ), ), ); } - var itemW = (1.sw - 15.w*4)/3; - var itemH = (1.sw - 15.w*4)/3+40.h; - Widget mainListView(int index){ - return Container( - // margin: EdgeInsets.only(left: 10.w, right: 10.w, top: 40.h), - // color: Colors.blue, - child: GridView.builder( - padding: EdgeInsets.only(left: 15.w, right: 15.w), - itemCount: index+1, + var itemW = (1.sw - 15.w * 4) / 3; + var itemH = (1.sw - 15.w * 4) / 3 + 40.h; + Widget mainListView(List itemList) { + return ListView.separated( + itemCount: itemList.length, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - //横轴元素个数 - crossAxisCount: 3, - //纵轴间距 - mainAxisSpacing: 10.w, - // 横轴间距 - crossAxisSpacing: 15.w, - //子组件宽高长度比例 - childAspectRatio: itemW/itemH - ), - itemBuilder: (context, index) { - return videoItem(); + separatorBuilder: (c, index) { + return const Divider( + height: 1, + color: Colors.transparent, + ); }, - ), - ); + itemBuilder: (c, index) { + RecordListData recordData = itemList[index]; + return videoItem(recordData, index); + }); } - Widget videoItem(){ - return SizedBox( - width: itemW, - height: itemH, - child: Stack( + Widget videoItem(RecordListData recordData, int index) { + return Container( + padding: + EdgeInsets.only(left: 20.w, right: 20.w, bottom: 20.h, top: 20.h), + color: Colors.white, + child: Row( children: [ - Column( - children: [ - ClipRRect( - borderRadius: BorderRadius.circular(10.w), - child: Image(width: itemW, height: itemW, fit: BoxFit.fill, image: const AssetImage("images/main/icon_lockDetail_monitoringvoiceFrist.png")), - ), - SizedBox(height:5.h), - Text("2023.10.23 10:00", style: TextStyle(fontSize: 20.sp)) - ], + ClipRRect( + borderRadius: BorderRadius.circular(10.w), + child: Image( + fit: BoxFit.cover, + width: 120.w, + height: 80.w, + image: Image.network(recordData.imagesUrl ?? + "images/icon_video_placeholder.jpg") + .image), ), + SizedBox(width: 15.w), + Text(DateTool().dateToYMDHNString(recordData.operateDate.toString()), + style: TextStyle(fontSize: 20.sp)), + Expanded( + child: SizedBox( + width: 20.w, + )), + TextButton( + onPressed: () {}, + child: Text('下载'.tr, + style: + TextStyle(fontSize: 22.sp, color: AppColors.mainColor))) ], ), ); diff --git a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart index 3e60e4d5..e57c35de 100644 --- a/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart +++ b/star_lock/lib/main/lockDetail/videoLog/videoLogDownLoad/videoLogDownLoad_state.dart @@ -1,5 +1,13 @@ +import 'package:get/get.dart'; +import 'package:star_lock/main/lockDetail/videoLog/videoLog/videoLog_entity.dart'; +class VideoLogDownLoadState { + var videoLogDownloadList = [].obs; -class VideoLogDownLoadState{ - var localList = []; -} \ No newline at end of file + VideoLogDownLoadState() { + Map map = Get.arguments; + if (map['downloadVideoLogList'] != null) { + videoLogDownloadList.value = map['downloadVideoLogList']; + } + } +} diff --git a/star_lock/lib/network/api.dart b/star_lock/lib/network/api.dart index ebe843c7..87a56aba 100644 --- a/star_lock/lib/network/api.dart +++ b/star_lock/lib/network/api.dart @@ -222,4 +222,5 @@ abstract class Api { final String getUseRecordListURL = '/v2/service/getUseRecordList'; //获取使用记录列表 final String getlockCloudStorageListURL = '/lockCloudStorage/list'; //获取云存列表 + final String deleteLockCloudStorageURL = '/lockCloudStorage/delete'; //删除云存 } diff --git a/star_lock/lib/network/api_provider.dart b/star_lock/lib/network/api_provider.dart index 2eee89be..1428c012 100644 --- a/star_lock/lib/network/api_provider.dart +++ b/star_lock/lib/network/api_provider.dart @@ -1946,6 +1946,10 @@ class ApiProvider extends BaseProvider { Future getLockCloudStorageList(int lockId) => post(getlockCloudStorageListURL.toUrl, jsonEncode({'lockId': lockId})); + // 删除云存列表 + Future deleteLockCloudStorageList(List recordIds) => post( + deleteLockCloudStorageURL.toUrl, jsonEncode({'recordIds': recordIds})); + // 设置微信公众号推送 Future setMpWechatPushSwitch(int mpWechatPushSwitch) => post( setWechatPushSwitchURL.toUrl, diff --git a/star_lock/lib/network/api_repository.dart b/star_lock/lib/network/api_repository.dart index c29f283f..13fc6263 100644 --- a/star_lock/lib/network/api_repository.dart +++ b/star_lock/lib/network/api_repository.dart @@ -1967,6 +1967,13 @@ class ApiRepository { return VideoLogEntity.fromJson(res.body); } + // 删除云存列表 + Future deleteLockCloudStorageList( + {required List recordIds}) async { + final res = await apiProvider.deleteLockCloudStorageList(recordIds); + return VersionUndateEntity.fromJson(res.body); + } + // 设置微信公众号推送 Future setMpWechatPushSwitch( {required int mpWechatPushSwitch}) async {