diff --git a/lib/app/app.dart b/lib/app/app.dart index 845800ba..76c32b19 100644 --- a/lib/app/app.dart +++ b/lib/app/app.dart @@ -2,6 +2,7 @@ import 'package:revanced_manager/services/github_api.dart'; import 'package:revanced_manager/services/manager_api.dart'; import 'package:revanced_manager/services/patcher_api.dart'; import 'package:revanced_manager/services/revanced_api.dart'; +import 'package:revanced_manager/services/toast.dart'; import 'package:revanced_manager/ui/views/app_selector/app_selector_view.dart'; import 'package:revanced_manager/ui/views/contributors/contributors_view.dart'; import 'package:revanced_manager/ui/views/home/home_viewmodel.dart'; @@ -36,6 +37,7 @@ import 'package:stacked_services/stacked_services.dart'; LazySingleton(classType: PatcherAPI), LazySingleton(classType: RevancedAPI), LazySingleton(classType: GithubAPI), + LazySingleton(classType: Toast), ], ) class AppSetup {} diff --git a/lib/services/toast.dart b/lib/services/toast.dart new file mode 100644 index 00000000..3a47fcf2 --- /dev/null +++ b/lib/services/toast.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_i18n/flutter_i18n.dart'; +import 'package:fluttertoast/fluttertoast.dart' as t; + +class Toast { + final t.FToast _fToast = t.FToast(); + late BuildContext buildContext; + + void initialize(BuildContext context) { + _fToast.init(context); + } + + void show(String text) { + t.Fluttertoast.showToast( + msg: FlutterI18n.translate( + _fToast.context!, + text, + ), + toastLength: t.Toast.LENGTH_LONG, + gravity: t.ToastGravity.CENTER, + ); + } +} diff --git a/lib/ui/views/app_selector/app_selector_viewmodel.dart b/lib/ui/views/app_selector/app_selector_viewmodel.dart index faa87020..95ee3ec0 100644 --- a/lib/ui/views/app_selector/app_selector_viewmodel.dart +++ b/lib/ui/views/app_selector/app_selector_viewmodel.dart @@ -2,16 +2,16 @@ import 'dart:io'; import 'package:device_apps/device_apps.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/models/patched_application.dart'; import 'package:revanced_manager/services/patcher_api.dart'; +import 'package:revanced_manager/services/toast.dart'; import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart'; import 'package:stacked/stacked.dart'; class AppSelectorViewModel extends BaseViewModel { final PatcherAPI _patcherAPI = locator(); + final Toast _toast = locator(); final List apps = []; bool noApps = false; @@ -61,14 +61,7 @@ class AppSelectorViewModel extends BaseViewModel { } } } on Exception { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'appSelectorView.errorMessage', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('appSelectorView.errorMessage'); } } diff --git a/lib/ui/views/home/home_viewmodel.dart b/lib/ui/views/home/home_viewmodel.dart index 9839fd86..62a90c23 100644 --- a/lib/ui/views/home/home_viewmodel.dart +++ b/lib/ui/views/home/home_viewmodel.dart @@ -6,13 +6,13 @@ import 'package:device_apps/device_apps.dart'; import 'package:flutter/material.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:injectable/injectable.dart'; import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.router.dart'; import 'package:revanced_manager/models/patched_application.dart'; import 'package:revanced_manager/services/manager_api.dart'; import 'package:revanced_manager/services/patcher_api.dart'; +import 'package:revanced_manager/services/toast.dart'; import 'package:revanced_manager/ui/views/navigation/navigation_viewmodel.dart'; import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart'; import 'package:revanced_manager/ui/widgets/installerView/custom_material_button.dart'; @@ -25,6 +25,7 @@ class HomeViewModel extends BaseViewModel { final NavigationService _navigationService = locator(); final ManagerAPI _managerAPI = locator(); final PatcherAPI _patcherAPI = locator(); + final Toast _toast = locator(); final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); DateTime? _lastUpdate; bool showUpdatableApps = true; @@ -45,14 +46,7 @@ class HomeViewModel extends BaseViewModel { ?.requestPermission(); bool isConnected = await Connectivity().checkConnection(); if (!isConnected) { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'homeView.noConnection', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('homeView.noConnection'); } _getPatchedApps(); _managerAPI.reAssessSavedApps().then((_) => _getPatchedApps()); @@ -109,14 +103,7 @@ class HomeViewModel extends BaseViewModel { Future updateManager(BuildContext context) async { try { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'homeView.downloadingMessage', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('homeView.downloadingMessage'); File? managerApk = await _managerAPI.downloadManager(); if (managerApk != null) { await flutterLocalNotificationsPlugin.zonedSchedule( @@ -143,34 +130,13 @@ class HomeViewModel extends BaseViewModel { uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime, ); - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'homeView.installingMessage', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('homeView.installingMessage'); await AppInstaller.installApk(managerApk.path); } else { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'homeView.errorDownloadMessage', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('homeView.errorDownloadMessage'); } } on Exception { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'homeView.errorInstallMessage', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('homeView.errorInstallMessage'); } } diff --git a/lib/ui/views/installer/installer_viewmodel.dart b/lib/ui/views/installer/installer_viewmodel.dart index 8e83ab1b..5399b34a 100644 --- a/lib/ui/views/installer/installer_viewmodel.dart +++ b/lib/ui/views/installer/installer_viewmodel.dart @@ -3,13 +3,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_background/flutter_background.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/models/patch.dart'; import 'package:revanced_manager/models/patched_application.dart'; import 'package:revanced_manager/services/manager_api.dart'; import 'package:revanced_manager/services/patcher_api.dart'; +import 'package:revanced_manager/services/toast.dart'; import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart'; import 'package:revanced_manager/ui/widgets/installerView/custom_material_button.dart'; import 'package:stacked/stacked.dart'; @@ -18,6 +18,7 @@ import 'package:wakelock/wakelock.dart'; class InstallerViewModel extends BaseViewModel { final ManagerAPI _managerAPI = locator(); final PatcherAPI _patcherAPI = locator(); + final Toast _toast = locator(); final PatchedApplication _app = locator().selectedApp!; final List _patches = locator().selectedPatches; static const _installerChannel = MethodChannel( @@ -219,14 +220,7 @@ class InstallerViewModel extends BaseViewModel { Future onWillPop(BuildContext context) async { if (isPatching) { - Fluttertoast.showToast( - msg: FlutterI18n.translate( - context, - 'installerView.noExit', - ), - toastLength: Toast.LENGTH_LONG, - gravity: ToastGravity.CENTER, - ); + _toast.show('installerView.noExit'); return false; } cleanPatcher(); diff --git a/lib/ui/views/navigation/navigation_viewmodel.dart b/lib/ui/views/navigation/navigation_viewmodel.dart index 18e86004..65b035d7 100644 --- a/lib/ui/views/navigation/navigation_viewmodel.dart +++ b/lib/ui/views/navigation/navigation_viewmodel.dart @@ -4,7 +4,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:injectable/injectable.dart'; import 'package:permission_handler/permission_handler.dart'; +import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/services/root_api.dart'; +import 'package:revanced_manager/services/toast.dart'; import 'package:revanced_manager/ui/views/home/home_view.dart'; import 'package:revanced_manager/ui/views/patcher/patcher_view.dart'; import 'package:revanced_manager/ui/views/settings/settings_view.dart'; @@ -14,6 +16,7 @@ import 'package:stacked/stacked.dart'; @lazySingleton class NavigationViewModel extends IndexTrackingViewModel { void initialize(BuildContext context) async { + locator().initialize(context); SharedPreferences prefs = await SharedPreferences.getInstance(); if (prefs.getBool('permissionsRequested') == null) { await prefs.setBool('permissionsRequested', true);