mirror of
https://github.com/revanced/revanced-manager
synced 2024-05-14 13:56:57 +02:00
feat: add select/deselect icon on Patches Selector View
This commit is contained in:
parent
2f83ea290b
commit
b327926219
@ -40,6 +40,7 @@ class _AppSelectorViewState extends State<AppSelectorView> {
|
||||
? Column(
|
||||
children: [
|
||||
SearchBar(
|
||||
showSelectIcon: false,
|
||||
fillColor:
|
||||
isDark ? const Color(0xff1B222B) : Colors.grey[200],
|
||||
hintText: FlutterI18n.translate(
|
||||
|
@ -31,6 +31,7 @@ class _PatchesSelectorViewState extends State<PatchesSelectorView> {
|
||||
? Column(
|
||||
children: [
|
||||
SearchBar(
|
||||
showSelectIcon: true,
|
||||
fillColor:
|
||||
isDark ? const Color(0xff1B222B) : Colors.grey[200],
|
||||
hintText: FlutterI18n.translate(
|
||||
@ -43,6 +44,7 @@ class _PatchesSelectorViewState extends State<PatchesSelectorView> {
|
||||
query = searchQuery;
|
||||
});
|
||||
},
|
||||
onSelectAll: (value) => model.selectAllPatches(value),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
query.isEmpty || query.length < 2
|
||||
@ -90,11 +92,8 @@ class _PatchesSelectorViewState extends State<PatchesSelectorView> {
|
||||
simpleName: model.patches[index].simpleName,
|
||||
version: model.patches[index].version,
|
||||
description: model.patches[index].description,
|
||||
isSelected: model.selectedPatches.any(
|
||||
(element) => element.name == model.patches[index].name,
|
||||
),
|
||||
onChanged: (value) =>
|
||||
model.selectPatch(model.patches[index].name, value),
|
||||
isSelected: model.isSelected(index),
|
||||
onChanged: (value) => model.selectPatch(index, value),
|
||||
);
|
||||
_items.add(item);
|
||||
return item;
|
||||
@ -118,11 +117,8 @@ class _PatchesSelectorViewState extends State<PatchesSelectorView> {
|
||||
simpleName: model.patches[index].simpleName,
|
||||
version: model.patches[index].version,
|
||||
description: model.patches[index].description,
|
||||
isSelected: model.selectedPatches.any(
|
||||
(element) => element.name == model.patches[index].name,
|
||||
),
|
||||
onChanged: (value) =>
|
||||
model.selectPatch(model.patches[index].name, value),
|
||||
isSelected: model.isSelected(index),
|
||||
onChanged: (value) => model.selectPatch(index, value),
|
||||
);
|
||||
_items.add(item);
|
||||
return item;
|
||||
|
@ -17,8 +17,14 @@ class PatchesSelectorViewModel extends BaseViewModel {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void selectPatch(String name, bool isSelected) {
|
||||
Patch patch = patches.firstWhere((p) => p.name == name);
|
||||
bool isSelected(int index) {
|
||||
return selectedPatches.any(
|
||||
(element) => element.name == patches[index].name,
|
||||
);
|
||||
}
|
||||
|
||||
void selectPatch(int index, bool isSelected) {
|
||||
Patch patch = patches.firstWhere((p) => p.name == patches[index].name);
|
||||
if (isSelected && !selectedPatches.contains(patch)) {
|
||||
selectedPatches.add(patch);
|
||||
} else {
|
||||
@ -27,6 +33,14 @@ class PatchesSelectorViewModel extends BaseViewModel {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void selectAllPatches(bool isSelected) {
|
||||
selectedPatches.clear();
|
||||
if (isSelected) {
|
||||
selectedPatches.addAll(patches);
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
void selectPatches() {
|
||||
locator<PatcherViewModel>().selectedPatches = selectedPatches;
|
||||
locator<PatcherViewModel>().notifyListeners();
|
||||
|
@ -3,17 +3,21 @@ import 'package:google_fonts/google_fonts.dart';
|
||||
|
||||
class SearchBar extends StatefulWidget {
|
||||
final String? hintText;
|
||||
final Color? backgroundColor;
|
||||
final Color? fillColor;
|
||||
final bool showSelectIcon;
|
||||
final Function(bool)? onSelectAll;
|
||||
final Color? backgroundColor;
|
||||
final Color? hintTextColor;
|
||||
|
||||
const SearchBar({
|
||||
Key? key,
|
||||
required this.hintText,
|
||||
required this.fillColor,
|
||||
required this.onQueryChanged,
|
||||
this.onSelectAll,
|
||||
this.showSelectIcon = false,
|
||||
this.backgroundColor = const Color(0xff1B222B),
|
||||
this.hintTextColor = Colors.white,
|
||||
required this.fillColor,
|
||||
Key? key,
|
||||
required this.onQueryChanged,
|
||||
}) : super(key: key);
|
||||
|
||||
final Function(String) onQueryChanged;
|
||||
@ -24,6 +28,8 @@ class SearchBar extends StatefulWidget {
|
||||
|
||||
class _SearchBarState extends State<SearchBar> {
|
||||
final TextEditingController _textController = TextEditingController();
|
||||
bool _toggleSelectAll = false;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
@ -40,7 +46,7 @@ class _SearchBarState extends State<SearchBar> {
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: TextField(
|
||||
child: TextFormField(
|
||||
onChanged: widget.onQueryChanged,
|
||||
controller: _textController,
|
||||
decoration: InputDecoration(
|
||||
@ -65,7 +71,22 @@ class _SearchBarState extends State<SearchBar> {
|
||||
widget.onQueryChanged('');
|
||||
},
|
||||
)
|
||||
: null,
|
||||
: widget.showSelectIcon
|
||||
? IconButton(
|
||||
icon: _toggleSelectAll
|
||||
? const Icon(Icons.deselect)
|
||||
: const Icon(Icons.select_all),
|
||||
iconSize: 24.0,
|
||||
onPressed: widget.onSelectAll != null
|
||||
? () {
|
||||
setState(() {
|
||||
_toggleSelectAll = !_toggleSelectAll;
|
||||
});
|
||||
widget.onSelectAll!(_toggleSelectAll);
|
||||
}
|
||||
: () => {},
|
||||
)
|
||||
: null,
|
||||
border: OutlineInputBorder(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
borderSide: BorderSide.none,
|
||||
|
Loading…
Reference in New Issue
Block a user