import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/models_new/download/bili_download_entry_info.dart'; import 'package:PiliPlus/pages/common/search/common_search_page.dart'; import 'package:PiliPlus/pages/download/detail/widgets/item.dart'; import 'package:PiliPlus/pages/download/search/controller.dart'; import 'package:PiliPlus/services/download/download_service.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:flutter/material.dart' hide SliverGridDelegateWithMaxCrossAxisExtent; import 'package:get/get.dart'; class DownloadSearchPage extends StatefulWidget { const DownloadSearchPage({ super.key, required this.progress, }); final ValueNotifier progress; @override State createState() => _DownloadSearchPageState(); } class _DownloadSearchPageState extends CommonSearchPageState< DownloadSearchPage, List, BiliDownloadEntryInfo > { @override DownloadSearchController controller = Get.put(DownloadSearchController()); final _downloadService = Get.find(); @override List? get extraActions => [ IconButton( tooltip: '多选', onPressed: () { if (controller.enableMultiSelect.value) { controller.handleSelect(); } else { controller.enableMultiSelect.value = true; } }, icon: const Icon(Icons.edit_note), ), ]; @override Widget buildList(List list) { if (list.isNotEmpty) { return SliverGrid.builder( gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( mainAxisSpacing: 2, mainAxisExtent: 100, maxCrossAxisExtent: Grid.smallCardWidth * 2, ), itemBuilder: (context, index) { final entry = list[index]; return DetailItem( entry: entry, progress: widget.progress, downloadService: _downloadService, showTitle: true, onDelete: () => controller.onRemoveSingle(index, entry), controller: controller, ); }, itemCount: list.length, ); } return const HttpError(); } }