diff --git a/lib/models/patched_application.dart b/lib/models/patched_application.dart index c87d0270..76176ed7 100644 --- a/lib/models/patched_application.dart +++ b/lib/models/patched_application.dart @@ -15,7 +15,7 @@ class PatchedApplication { toJson: encodeBase64, ) final Uint8List icon; - final DateTime patchDate; + DateTime patchDate; final bool isRooted; final bool isFromStorage; List appliedPatches; diff --git a/lib/ui/views/installer/installer_viewmodel.dart b/lib/ui/views/installer/installer_viewmodel.dart index edcfe06c..db47a4cb 100644 --- a/lib/ui/views/installer/installer_viewmodel.dart +++ b/lib/ui/views/installer/installer_viewmodel.dart @@ -118,6 +118,7 @@ class InstallerViewModel extends BaseViewModel { isInstalled = await locator().installPatchedFile(selectedApp); if (isInstalled) { updateLog('Done'); + selectedApp.patchDate = DateTime.now(); selectedApp.appliedPatches .addAll(selectedPatches.map((p) => p.name).toList()); await saveApp(selectedApp); @@ -157,7 +158,8 @@ class InstallerViewModel extends BaseViewModel { SharedPreferences prefs = await SharedPreferences.getInstance(); List patchedApps = prefs.getStringList('patchedApps') ?? []; String app = json.encode(selectedApp.toJson()); - patchedApps.remove(app); + patchedApps.removeWhere( + (a) => json.decode(a)['packageName'] == selectedApp.packageName); patchedApps.add(app); prefs.setStringList('patchedApps', patchedApps); } diff --git a/lib/ui/views/patches_selector/patches_selector_view.dart b/lib/ui/views/patches_selector/patches_selector_view.dart index 752fd873..df63b1bb 100644 --- a/lib/ui/views/patches_selector/patches_selector_view.dart +++ b/lib/ui/views/patches_selector/patches_selector_view.dart @@ -62,10 +62,7 @@ class _PatchesSelectorViewState extends State { shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), - onPressed: () { - model.selectPatches(patches); - Navigator.of(context).pop(); - }, + onPressed: () => Navigator.of(context).pop(), child: I18nText('patchesSelectorView.fabButton'), ), ], diff --git a/lib/ui/views/patches_selector/patches_selector_viewmodel.dart b/lib/ui/views/patches_selector/patches_selector_viewmodel.dart index 22cc78d4..17e17a8d 100644 --- a/lib/ui/views/patches_selector/patches_selector_viewmodel.dart +++ b/lib/ui/views/patches_selector/patches_selector_viewmodel.dart @@ -22,17 +22,17 @@ class PatchesSelectorViewModel extends BaseViewModel { patches = await patcherAPI.getFilteredPatches(app); } - void selectPatches(List patchItems) { - selectedPatches.clear(); - for (PatchItem item in patchItems) { - if (item.isSelected) { - Patch patch = - patches.firstWhere((element) => element.name == item.name); - if (!selectedPatches.contains(patch)) { - selectedPatches.add(patch); - } - } + void selectPatch(PatchItem item) { + Patch patch = locator() + .patches + .firstWhere((p) => p.name == item.name); + if (item.isSelected && + !locator().selectedPatches.contains(patch)) { + locator().selectedPatches.add(patch); + } else { + locator().selectedPatches.remove(patch); } + locator().notifyListeners(); locator().notifyListeners(); } } diff --git a/lib/ui/widgets/patch_item.dart b/lib/ui/widgets/patch_item.dart index 0fc2966e..c2a5762c 100644 --- a/lib/ui/widgets/patch_item.dart +++ b/lib/ui/widgets/patch_item.dart @@ -1,5 +1,7 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; +import 'package:revanced_manager/app/app.locator.dart'; +import 'package:revanced_manager/ui/views/patches_selector/patches_selector_viewmodel.dart'; // ignore: must_be_immutable class PatchItem extends StatefulWidget { @@ -26,9 +28,10 @@ class _PatchItemState extends State { @override Widget build(BuildContext context) { return InkWell( - onTap: () => setState(() { - widget.isSelected = !widget.isSelected; - }), + onTap: () { + setState(() => widget.isSelected = !widget.isSelected); + locator().selectPatch(widget); + }, child: Container( decoration: BoxDecoration( color: Theme.of(context).colorScheme.primary, @@ -78,9 +81,8 @@ class _PatchItemState extends State { value: widget.isSelected, activeColor: Colors.blueGrey[500], onChanged: (newValue) { - setState(() { - widget.isSelected = newValue!; - }); + setState(() => widget.isSelected = newValue!); + locator().selectPatch(widget); }, ), )