mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-21 01:26:59 +08:00
opt: multiSelect (#935)
This commit is contained in:
committed by
GitHub
parent
d246462535
commit
7b51f15753
@@ -1,12 +1,19 @@
|
||||
import 'package:PiliPlus/common/widgets/dialog/dialog.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/http/user.dart';
|
||||
import 'package:PiliPlus/models_new/history/data.dart';
|
||||
import 'package:PiliPlus/models_new/history/list.dart';
|
||||
import 'package:PiliPlus/pages/common/common_search_controller.dart';
|
||||
import 'package:PiliPlus/pages/common/multi_select_controller.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class HistorySearchController
|
||||
extends CommonSearchController<HistoryData, HistoryItemModel> {
|
||||
extends CommonSearchController<HistoryData, HistoryItemModel>
|
||||
with
|
||||
MultiSelectMixin<HistoryItemModel>,
|
||||
CommonMultiSelectMixin,
|
||||
DeleteItemMixin {
|
||||
@override
|
||||
Future<LoadingState<HistoryData>> customGetData() => UserHttp.searchHistory(
|
||||
pn: page,
|
||||
@@ -18,12 +25,14 @@ class HistorySearchController
|
||||
return response.list;
|
||||
}
|
||||
|
||||
Future<void> onDelHistory(int index, kid, business) async {
|
||||
String resKid = 'archive_$kid';
|
||||
Future<void> onDelHistory(int index, kid, String business) async {
|
||||
final String resKid;
|
||||
if (business == 'live') {
|
||||
resKid = 'live_$kid';
|
||||
} else if (business.contains('article')) {
|
||||
resKid = 'article_$kid';
|
||||
} else {
|
||||
resKid = 'archive_$kid';
|
||||
}
|
||||
|
||||
var res = await UserHttp.delHistory([resKid]);
|
||||
@@ -34,4 +43,26 @@ class HistorySearchController
|
||||
}
|
||||
SmartDialog.showToast(res['msg']);
|
||||
}
|
||||
|
||||
@override
|
||||
void onConfirm() {
|
||||
showConfirmDialog(
|
||||
context: Get.context!,
|
||||
content: '确认删除所选历史记录吗?',
|
||||
title: '提示',
|
||||
onConfirm: () async {
|
||||
SmartDialog.showLoading(msg: '请求中');
|
||||
final result = allChecked.toSet();
|
||||
final kidList = result.map(
|
||||
(item) => '${item.history.business!}_${item.kid!}',
|
||||
);
|
||||
var response = await UserHttp.delHistory(kidList);
|
||||
if (response['status']) {
|
||||
afterDelete(result);
|
||||
}
|
||||
SmartDialog.dismiss();
|
||||
SmartDialog.showToast(response['msg']);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:PiliPlus/common/widgets/appbar/appbar.dart';
|
||||
import 'package:PiliPlus/models_new/history/data.dart';
|
||||
import 'package:PiliPlus/models_new/history/list.dart';
|
||||
import 'package:PiliPlus/pages/common/common_search_page.dart';
|
||||
@@ -28,6 +29,31 @@ class _HistorySearchPageState
|
||||
tag: Utils.generateRandomString(8),
|
||||
);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
// TODO: refa
|
||||
return Obx(() {
|
||||
final parent = super.build(context) as Scaffold;
|
||||
final enableMultiSelect = controller.enableMultiSelect.value;
|
||||
return PopScope(
|
||||
canPop: !enableMultiSelect,
|
||||
onPopInvokedWithResult: (didPop, result) {
|
||||
if (enableMultiSelect) {
|
||||
controller.handleSelect();
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
resizeToAvoidBottomInset: parent.resizeToAvoidBottomInset,
|
||||
appBar: MultiSelectAppBarWidget(
|
||||
ctr: controller,
|
||||
child: parent.appBar as AppBar,
|
||||
),
|
||||
body: parent.body,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget buildList(List<HistoryItemModel> list) {
|
||||
return SliverGrid(
|
||||
@@ -42,10 +68,8 @@ class _HistorySearchPageState
|
||||
return HistoryItem(
|
||||
item: item,
|
||||
ctr: controller,
|
||||
onChoose: null,
|
||||
onDelete: (kid, business) {
|
||||
controller.onDelHistory(index, kid, business);
|
||||
},
|
||||
onDelete: (kid, business) =>
|
||||
controller.onDelHistory(index, kid, business),
|
||||
);
|
||||
},
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user