opt: multi select

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-05 14:45:20 +08:00
parent e4b8dfcada
commit 1643db4656
10 changed files with 24 additions and 25 deletions

View File

@@ -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'];
}

View File

@@ -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<String, dynamic> 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) {

View File

@@ -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<String, dynamic> json) {
@@ -140,7 +140,6 @@ class HisListItem {
kid = json['kid'];
tagName = json['tag_name'];
liveStatus = json['live_status'];
checked = false;
}
}

View File

@@ -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;

View File

@@ -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(),

View File

@@ -365,7 +365,8 @@ class _FavDetailPageState extends State<FavDetailPage> {
child: LayoutBuilder(
builder: (context, constraints) =>
AnimatedOpacity(
opacity: loadingState.response[index].checked
opacity:
loadingState.response[index].checked == true
? 1
: 0,
duration: const Duration(milliseconds: 200),
@@ -382,8 +383,9 @@ class _FavDetailPageState extends State<FavDetailPage> {
width: 34,
height: 34,
child: AnimatedScale(
scale:
loadingState.response[index].checked
scale: loadingState
.response[index].checked ==
true
? 1
: 0,
duration:

View File

@@ -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());
}
},

View File

@@ -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(

View File

@@ -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('确认'),

View File

@@ -172,7 +172,7 @@ class _LaterPageState extends State<LaterPage> {
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<LaterPage> {
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(