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

@@ -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,9 +365,10 @@ class _FavDetailPageState extends State<FavDetailPage> {
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<FavDetailPage> {
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,

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(