mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2024-11-10 01:01:56 +01:00
feat: improve predictive back (#1487)
Signed-off-by: validcube <pun.butrach@gmail.com>
This commit is contained in:
parent
98c16eb1dc
commit
06ff36c836
4 changed files with 42 additions and 31 deletions
|
@ -582,8 +582,8 @@ class ManagerAPI {
|
|||
return showDialog(
|
||||
barrierDismissible: false,
|
||||
context: context,
|
||||
builder: (context) => WillPopScope(
|
||||
onWillPop: () async => false,
|
||||
builder: (context) => PopScope(
|
||||
canPop: false,
|
||||
child: AlertDialog(
|
||||
backgroundColor: Theme.of(context).colorScheme.secondaryContainer,
|
||||
title: I18nText('warning'),
|
||||
|
|
|
@ -15,7 +15,8 @@ class InstallerView extends StatelessWidget {
|
|||
return ViewModelBuilder<InstallerViewModel>.reactive(
|
||||
onViewModelReady: (model) => model.initialize(context),
|
||||
viewModelBuilder: () => InstallerViewModel(),
|
||||
builder: (context, model, child) => WillPopScope(
|
||||
builder: (context, model, child) => PopScope(
|
||||
onPopInvoked: (bool didPop) => model.onPopInvoked(context, didPop),
|
||||
child: SafeArea(
|
||||
top: false,
|
||||
bottom: model.isPatching,
|
||||
|
@ -83,7 +84,7 @@ class InstallerView extends StatelessWidget {
|
|||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
onBackButtonPressed: () => model.onWillPop(context),
|
||||
onBackButtonPressed: () => model.onBackButtonInvoked(context),
|
||||
bottom: PreferredSize(
|
||||
preferredSize: const Size(double.infinity, 1.0),
|
||||
child: GradientProgressIndicator(progress: model.progress),
|
||||
|
@ -111,7 +112,6 @@ class InstallerView extends StatelessWidget {
|
|||
),
|
||||
),
|
||||
),
|
||||
onWillPop: () => model.onWillPop(context),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -182,7 +182,8 @@ class InstallerViewModel extends BaseViewModel {
|
|||
Future<void> copyLogs() async {
|
||||
final info = await AboutInfo.getInfo();
|
||||
dynamic getValue(String patchName, Option option) {
|
||||
final Option? savedOption = _managerAPI.getPatchOption(_app.packageName, patchName, option.key);
|
||||
final Option? savedOption =
|
||||
_managerAPI.getPatchOption(_app.packageName, patchName, option.key);
|
||||
if (savedOption != null) {
|
||||
return savedOption.value;
|
||||
} else {
|
||||
|
@ -203,7 +204,6 @@ class InstallerViewModel extends BaseViewModel {
|
|||
'App: ${_app.packageName} v${_app.version}',
|
||||
'Patches version: ${_managerAPI.patchesVersion}',
|
||||
'Patches: ${_patches.map((p) => p.name + (p.options.isEmpty ? '' : ' [${p.options.map((o) => '${o.title}: ${getValue(p.name, o)}').join(", ")}]')).toList().join(", ")}',
|
||||
|
||||
'\n- Settings',
|
||||
'Allow changing patch selection: ${_managerAPI.isPatchesChangeEnabled()}',
|
||||
'Version compatibility check: ${_managerAPI.isVersionCompatibilityCheckEnabled()}',
|
||||
|
@ -427,25 +427,38 @@ class InstallerViewModel extends BaseViewModel {
|
|||
}
|
||||
}
|
||||
|
||||
Future<bool> onWillPop(BuildContext context) async {
|
||||
if (isPatching) {
|
||||
if (!cancel) {
|
||||
cancel = true;
|
||||
_toast.showBottom('installerView.pressBackAgain');
|
||||
} else if (!isCanceled) {
|
||||
await stopPatcher();
|
||||
} else {
|
||||
_toast.showBottom('installerView.noExit');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (!cancel) {
|
||||
cleanPatcher();
|
||||
bool canPop() {
|
||||
return !isPatching;
|
||||
}
|
||||
|
||||
void onBackButtonInvoked(BuildContext context) {
|
||||
if (canPop()) {
|
||||
onPopInvoked(context, true);
|
||||
} else {
|
||||
_patcherAPI.cleanPatcher();
|
||||
onPopInvoked(context, false);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onPopInvoked(BuildContext context, bool didPop) async {
|
||||
if (didPop) {
|
||||
if (!cancel) {
|
||||
cleanPatcher();
|
||||
} else {
|
||||
_patcherAPI.cleanPatcher();
|
||||
}
|
||||
screenshotCallback.dispose();
|
||||
Navigator.of(context).pop();
|
||||
} else {
|
||||
if (isPatching) {
|
||||
if (!cancel) {
|
||||
cancel = true;
|
||||
_toast.showBottom('installerView.pressBackAgain');
|
||||
} else if (!isCanceled) {
|
||||
await stopPatcher();
|
||||
} else {
|
||||
_toast.showBottom('installerView.noExit');
|
||||
}
|
||||
}
|
||||
}
|
||||
screenshotCallback.dispose();
|
||||
Navigator.of(context).pop();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,13 +13,11 @@ class NavigationView extends StatelessWidget {
|
|||
return ViewModelBuilder<NavigationViewModel>.reactive(
|
||||
onViewModelReady: (model) => model.initialize(context),
|
||||
viewModelBuilder: () => locator<NavigationViewModel>(),
|
||||
builder: (context, model, child) => WillPopScope(
|
||||
onWillPop: () async {
|
||||
if (model.currentIndex == 0) {
|
||||
return true;
|
||||
} else {
|
||||
builder: (context, model, child) => PopScope(
|
||||
canPop: model.currentIndex == 0,
|
||||
onPopInvoked: (bool didPop) {
|
||||
if (!didPop) {
|
||||
model.setIndex(0);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
child: Scaffold(
|
||||
|
|
Loading…
Reference in a new issue