mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-01 07:39:47 +08:00
opt download (#1755)
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -6,7 +6,7 @@ mixin MultiSelectData {
|
||||
bool? checked;
|
||||
}
|
||||
|
||||
abstract class MultiSelectBase<T> {
|
||||
mixin MultiSelectBase<T extends MultiSelectData> {
|
||||
RxBool get enableMultiSelect;
|
||||
RxBool get allSelected;
|
||||
|
||||
@@ -17,6 +17,52 @@ abstract class MultiSelectBase<T> {
|
||||
void onRemove();
|
||||
}
|
||||
|
||||
mixin BaseMultiSelectMixin<T extends MultiSelectData>
|
||||
implements MultiSelectBase<T> {
|
||||
@override
|
||||
late final allSelected = false.obs;
|
||||
|
||||
late final RxInt rxCount = 0.obs;
|
||||
@override
|
||||
int get checkedCount => rxCount.value;
|
||||
|
||||
@override
|
||||
final RxBool enableMultiSelect = false.obs;
|
||||
|
||||
RxObjectMixin get state;
|
||||
List<T> get list;
|
||||
|
||||
Iterable<T> get allChecked => list.where((v) => v.checked == true);
|
||||
|
||||
@override
|
||||
void handleSelect({bool checked = false, bool disableSelect = true}) {
|
||||
for (var item in list) {
|
||||
item.checked = checked;
|
||||
}
|
||||
state.refresh();
|
||||
rxCount.value = checked ? list.length : 0;
|
||||
if (disableSelect && !checked) {
|
||||
enableMultiSelect.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onSelect(T item) {
|
||||
item.checked = !(item.checked ?? false);
|
||||
if (item.checked!) {
|
||||
rxCount.value++;
|
||||
} else {
|
||||
rxCount.value--;
|
||||
}
|
||||
state.refresh();
|
||||
if (checkedCount == 0) {
|
||||
enableMultiSelect.value = false;
|
||||
} else {
|
||||
allSelected.value = checkedCount == list.length;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mixin CommonMultiSelectMixin<T extends MultiSelectData>
|
||||
implements MultiSelectBase<T> {
|
||||
@override
|
||||
|
||||
@@ -7,11 +7,7 @@ import 'package:PiliPlus/pages/common/search/common_search_controller.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
abstract class CommonSearchPage extends StatefulWidget {
|
||||
const CommonSearchPage({super.key});
|
||||
}
|
||||
|
||||
abstract class CommonSearchPageState<S extends CommonSearchPage, R, T>
|
||||
abstract class CommonSearchPageState<S extends StatefulWidget, R, T>
|
||||
extends State<S> {
|
||||
CommonSearchController<R, T> get controller;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user