opt download (#1755)

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
dom
2025-11-27 21:00:13 +08:00
committed by GitHub
parent ded78e534f
commit 9ccaa3072b
25 changed files with 1161 additions and 410 deletions

View File

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