From 1643db4656a094639ab5be516a3c697d3cdb0663 Mon Sep 17 00:00:00 2001 From: bggRGjQaUbCoE Date: Sun, 5 Jan 2025 14:45:20 +0800 Subject: [PATCH] opt: multi select Signed-off-by: bggRGjQaUbCoE --- lib/models/model_hot_video_item.dart | 5 ++--- lib/models/user/fav_detail.dart | 5 ++--- lib/models/user/history.dart | 5 ++--- lib/pages/common/multi_select_controller.dart | 4 ++-- lib/pages/fav_detail/controller.dart | 2 +- lib/pages/fav_detail/view.dart | 16 +++++++++------- lib/pages/history/controller.dart | 2 +- lib/pages/history/widgets/item.dart | 4 ++-- lib/pages/later/controller.dart | 2 +- lib/pages/later/view.dart | 4 ++-- 10 files changed, 24 insertions(+), 25 deletions(-) diff --git a/lib/models/model_hot_video_item.dart b/lib/models/model_hot_video_item.dart index 9416a646..b57ce9e6 100644 --- a/lib/models/model_hot_video_item.dart +++ b/lib/models/model_hot_video_item.dart @@ -27,7 +27,7 @@ class HotVideoItemModel { this.seasontype, this.isOgv, this.rcmdReason, - required this.checked, + this.checked, this.pgcLabel, this.redirectUrl, }); @@ -57,7 +57,7 @@ class HotVideoItemModel { int? seasontype; bool? isOgv; RcmdReason? rcmdReason; - late bool checked; + bool? checked; String? pgcLabel; String? redirectUrl; @@ -89,7 +89,6 @@ class HotVideoItemModel { rcmdReason = json['rcmd_reason'] != '' && json['rcmd_reason'] != null ? RcmdReason.fromJson(json['rcmd_reason']) : null; - checked = false; pgcLabel = json['pgc_label']; redirectUrl = json['redirect_url']; } diff --git a/lib/models/user/fav_detail.dart b/lib/models/user/fav_detail.dart index 7d031374..1b457762 100644 --- a/lib/models/user/fav_detail.dart +++ b/lib/models/user/fav_detail.dart @@ -47,7 +47,7 @@ class FavDetailItemData { this.stat, this.cid, this.epId, - required this.checked, + this.checked, }); int? id; @@ -70,7 +70,7 @@ class FavDetailItemData { Stat? stat; int? cid; String? epId; - late bool checked; + bool? checked; FavDetailItemData.fromJson(Map json) { id = json['id']; @@ -95,7 +95,6 @@ class FavDetailItemData { if (json['link'] != null && json['link'].contains('/bangumi')) { epId = resolveEpId(json['link']); } - checked = false; } String resolveEpId(url) { diff --git a/lib/models/user/history.dart b/lib/models/user/history.dart index 87781f69..95809014 100644 --- a/lib/models/user/history.dart +++ b/lib/models/user/history.dart @@ -85,7 +85,7 @@ class HisListItem { this.kid, this.tagName, this.liveStatus, - required this.checked, + this.checked, }); String? title; @@ -112,7 +112,7 @@ class HisListItem { int? kid; String? tagName; int? liveStatus; - late bool checked; + bool? checked; void isFullScreen; HisListItem.fromJson(Map json) { @@ -140,7 +140,6 @@ class HisListItem { kid = json['kid']; tagName = json['tag_name']; liveStatus = json['live_status']; - checked = false; } } diff --git a/lib/pages/common/multi_select_controller.dart b/lib/pages/common/multi_select_controller.dart index 37e2325f..4d26461d 100644 --- a/lib/pages/common/multi_select_controller.dart +++ b/lib/pages/common/multi_select_controller.dart @@ -9,8 +9,8 @@ abstract class MultiSelectController extends CommonController { onSelect(int index) { List list = (loadingState.value as Success).response; - list[index].checked = !list[index].checked; - checkedCount.value = list.where((item) => item.checked).length; + list[index].checked = !(list[index]?.checked ?? false); + checkedCount.value = list.where((item) => item.checked == true).length; loadingState.value = LoadingState.success(list); if (checkedCount.value == 0) { enableMultiSelect.value = false; diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index a40e86de..5966bad3 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -97,7 +97,7 @@ class FavDetailController extends MultiSelectController { onPressed: () async { Get.back(); List list = ((loadingState.value as Success).response as List) - .where((e) => e.checked) + .where((e) => e.checked == true) .toList(); dynamic result = await VideoHttp.delFav( ids: list.map((item) => '${item.id}:${item.type}').toList(), diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 74fda6dd..35fe09e6 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -365,9 +365,10 @@ class _FavDetailPageState extends State { child: LayoutBuilder( builder: (context, constraints) => AnimatedOpacity( - opacity: loadingState.response[index].checked - ? 1 - : 0, + opacity: + loadingState.response[index].checked == true + ? 1 + : 0, duration: const Duration(milliseconds: 200), child: Container( alignment: Alignment.center, @@ -382,10 +383,11 @@ class _FavDetailPageState extends State { width: 34, height: 34, child: AnimatedScale( - scale: - loadingState.response[index].checked - ? 1 - : 0, + scale: loadingState + .response[index].checked == + true + ? 1 + : 0, duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, diff --git a/lib/pages/history/controller.dart b/lib/pages/history/controller.dart index c86c8aba..df5651e8 100644 --- a/lib/pages/history/controller.dart +++ b/lib/pages/history/controller.dart @@ -181,7 +181,7 @@ class HistoryController extends MultiSelectController { Get.back(); if (loadingState.value is Success) { _onDelete(((loadingState.value as Success).response as List) - .where((e) => e.checked) + .where((e) => e.checked == true) .toList()); } }, diff --git a/lib/pages/history/widgets/item.dart b/lib/pages/history/widgets/item.dart index 01b37bd9..a6f8779e 100644 --- a/lib/pages/history/widgets/item.dart +++ b/lib/pages/history/widgets/item.dart @@ -226,7 +226,7 @@ class HistoryItem extends StatelessWidget { ), Positioned.fill( child: AnimatedOpacity( - opacity: videoItem.checked ? 1 : 0, + opacity: videoItem.checked == true ? 1 : 0, duration: const Duration(milliseconds: 200), child: Container( alignment: Alignment.center, @@ -238,7 +238,7 @@ class HistoryItem extends StatelessWidget { width: 34, height: 34, child: AnimatedScale( - scale: videoItem.checked ? 1 : 0, + scale: videoItem.checked == true ? 1 : 0, duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, child: IconButton( diff --git a/lib/pages/later/controller.dart b/lib/pages/later/controller.dart index 45c61076..54733dd3 100644 --- a/lib/pages/later/controller.dart +++ b/lib/pages/later/controller.dart @@ -135,7 +135,7 @@ class LaterController extends MultiSelectController { onPressed: () async { Get.back(); _onDelete(((loadingState.value as Success).response as List) - .where((e) => e.checked) + .where((e) => e.checked == true) .toList()); }, child: const Text('确认'), diff --git a/lib/pages/later/view.dart b/lib/pages/later/view.dart index 6da0f435..e5371564 100644 --- a/lib/pages/later/view.dart +++ b/lib/pages/later/view.dart @@ -172,7 +172,7 @@ class _LaterPageState extends State { child: IgnorePointer( child: LayoutBuilder( builder: (context, constraints) => AnimatedOpacity( - opacity: videoItem.checked ? 1 : 0, + opacity: videoItem.checked == true ? 1 : 0, duration: const Duration(milliseconds: 200), child: Container( alignment: Alignment.center, @@ -187,7 +187,7 @@ class _LaterPageState extends State { width: 34, height: 34, child: AnimatedScale( - scale: videoItem.checked ? 1 : 0, + scale: videoItem.checked == true ? 1 : 0, duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, child: IconButton(