diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index dbc20e29..8424eff4 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -23,7 +23,7 @@ jobs: - name: Setup JDK uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'zulu' - name: Setup Flutter uses: subosito/flutter-action@v2 diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 7d31e5a0..94f2921d 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -12,10 +12,10 @@ jobs: - uses: actions/checkout@v4 - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - - name: Set up JDK 11 + - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: "11" + java-version: "17" distribution: "zulu" - uses: subosito/flutter-action@v2 with: diff --git a/android/app/build.gradle b/android/app/build.gradle index a1b26cc8..ecf4135c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -26,30 +26,26 @@ apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion flutter.compileSdkVersion + compileSdk 34 ndkVersion flutter.ndkVersion compileOptions { - sourceCompatibility JavaVersion.VERSION_11 - targetCompatibility JavaVersion.VERSION_11 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = '11' + jvmTarget = '17' } - sourceSets { main.java.srcDirs += 'src/main/kotlin' } - defaultConfig { applicationId "app.revanced.manager.flutter" - minSdkVersion 26 - targetSdkVersion 33 + minSdk 26 + targetSdk 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } - buildTypes { release { shrinkResources false @@ -71,10 +67,21 @@ android { } } } - packagingOptions { - exclude '/prebuilt/**' + jniLibs { + useLegacyPackaging true + excludes += ['/prebuilt/**'] + } + resources { + excludes += ['/prebuilt/**'] + } } + + namespace 'app.revanced.manager.flutter' +} + +kotlin { + jvmToolchain(17) } flutter { diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 2abfc8e9..bbd7ee77 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -1,4 +1,3 @@ - + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3a2c4f8c..7fade03b 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,4 @@ - - + @@ -24,8 +22,7 @@ android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:largeHeap="true" - android:requestLegacyExternalStorage="true" - android:extractNativeLibs="true"> + android:requestLegacyExternalStorage="true"> ("cacheDirPath")!! try { + val patchBundleFile = File(patchBundleFilePath) + patchBundleFile.setWritable(false) patches = PatchBundleLoader.Dex( - File(patchBundleFilePath), + patchBundleFile, optimizedDexDirectory = File(cacheDirPath) ) } catch (ex: Exception) { diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 2abfc8e9..bbd7ee77 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -1,4 +1,3 @@ - + diff --git a/android/build.gradle b/android/build.gradle index 0165e070..0a04adab 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.9.0' + ext.kotlin_version = '1.9.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.3' + classpath 'com.android.tools.build:gradle:8.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } @@ -22,12 +22,13 @@ allprojects { } } -rootProject.buildDir = '../build' +layout.buildDirectory.set(file("../build")) +var root = layout.buildDirectory.get().asFile.absolutePath subprojects { - project.buildDir = "${rootProject.buildDir}/${project.name}" + project.layout.buildDirectory.set(file("$root/${project.name}")) project.evaluationDependsOn(':app') } tasks.register("clean", Delete) { - delete rootProject.buildDir + delete layout.buildDirectory } diff --git a/android/gradle.properties b/android/gradle.properties index 4b11638c..21a7e728 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -4,3 +4,6 @@ org.gradle.daemon=true org.gradle.caching=true android.useAndroidX=true android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 3c472b99..8bc9958a 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832..7f93135c 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661e..3fa8f862 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index a69d9cb6..1aa94a42 100644 --- a/gradlew +++ b/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -80,13 +80,11 @@ do esac done -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit - -APP_NAME="Gradle" +# This is normally unused +# shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,22 +131,29 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac case $MAX_FD in #( '' | soft) :;; #( *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -193,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index f127cfd4..93e3f59f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -26,6 +26,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% diff --git a/lib/main.dart b/lib/main.dart index 956f1c30..c81701ba 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -11,12 +11,10 @@ import 'package:revanced_manager/services/revanced_api.dart'; import 'package:revanced_manager/ui/theme/dynamic_theme_builder.dart'; import 'package:revanced_manager/ui/views/navigation/navigation_view.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:stacked_themes/stacked_themes.dart'; import 'package:timezone/data/latest.dart' as tz; late SharedPreferences prefs; Future main() async { - await ThemeManager.initialise(); await setupLocator(); WidgetsFlutterBinding.ensureInitialized(); await locator().initialize(); diff --git a/lib/services/patcher_api.dart b/lib/services/patcher_api.dart index 80a7e470..4266a880 100644 --- a/lib/services/patcher_api.dart +++ b/lib/services/patcher_api.dart @@ -1,10 +1,10 @@ import 'dart:io'; import 'package:collection/collection.dart'; -import 'package:cr_file_saver/file_saver.dart'; import 'package:device_apps/device_apps.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_file_dialog/flutter_file_dialog.dart'; import 'package:injectable/injectable.dart'; import 'package:install_plugin/install_plugin.dart'; import 'package:path_provider/path_provider.dart'; @@ -13,7 +13,7 @@ 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/root_api.dart'; -import 'package:share_extend/share_extend.dart'; +import 'package:share_plus/share_plus.dart'; @lazySingleton class PatcherAPI { @@ -236,10 +236,10 @@ void exportPatchedFile(String appName, String version) { try { if (outFile != null) { final String newName = _getFileName(appName, version); - CRFileSaver.saveFileWithDialog( - SaveFileDialogParams( + FlutterFileDialog.saveFile( + params: SaveFileDialogParams( sourceFilePath: outFile!.path, - destinationFileName: newName, + fileName: newName, ), ); } @@ -258,7 +258,7 @@ void sharePatchedFile(String appName, String version) { final String newPath = outFile!.path.substring(0, lastSeparator + 1) + newName; final File shareFile = outFile!.copySync(newPath); - ShareExtend.share(shareFile.path, 'file'); + Share.shareXFiles([XFile(shareFile.path)]); } } on Exception catch (e) { if (kDebugMode) { @@ -286,10 +286,10 @@ Future exportPatcherLog(String logs) async { final String fileName = 'revanced-manager_patcher_$dateTime.txt'; final File log = File('${logDir.path}/$fileName'); log.writeAsStringSync(logs); - CRFileSaver.saveFileWithDialog( - SaveFileDialogParams( + FlutterFileDialog.saveFile( + params: SaveFileDialogParams( sourceFilePath: log.path, - destinationFileName: fileName, + fileName: fileName, ), ); } diff --git a/lib/ui/views/app_selector/app_selector_viewmodel.dart b/lib/ui/views/app_selector/app_selector_viewmodel.dart index 9d2f9a7b..53c7a239 100644 --- a/lib/ui/views/app_selector/app_selector_viewmodel.dart +++ b/lib/ui/views/app_selector/app_selector_viewmodel.dart @@ -1,9 +1,9 @@ import 'dart:io'; import 'package:device_apps/device_apps.dart'; -import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_file_dialog/flutter_file_dialog.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/models/patch.dart'; @@ -181,13 +181,14 @@ class AppSelectorViewModel extends BaseViewModel { Future selectAppFromStorage(BuildContext context) async { try { - final FilePickerResult? result = await FilePicker.platform.pickFiles( - type: FileType.custom, - allowedExtensions: ['apk'], + final String? result = await FlutterFileDialog.pickFile( + params: const OpenFileDialogParams( + fileExtensionsFilter: ['apk'], + ), ); - if (result != null && result.files.single.path != null) { - final File apkFile = File(result.files.single.path!); - final List pathSplit = result.files.single.path!.split('/'); + if (result != null) { + final File apkFile = File(result); + final List pathSplit = result.split('/'); pathSplit.removeLast(); final Directory filePickerCacheDir = Directory(pathSplit.join('/')); final Iterable deletableFiles = @@ -207,7 +208,7 @@ class AppSelectorViewModel extends BaseViewModel { name: application.appName, packageName: application.packageName, version: application.versionName!, - apkFilePath: result.files.single.path!, + apkFilePath: result, icon: application.icon, patchDate: DateTime.now(), isFromStorage: true, diff --git a/lib/ui/views/home/home_viewmodel.dart b/lib/ui/views/home/home_viewmodel.dart index b69b99da..b85e49da 100644 --- a/lib/ui/views/home/home_viewmodel.dart +++ b/lib/ui/views/home/home_viewmodel.dart @@ -1,7 +1,7 @@ // ignore_for_file: use_build_context_synchronously import 'dart:async'; import 'dart:io'; -import 'package:cross_connectivity/cross_connectivity.dart'; +import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -64,8 +64,9 @@ class HomeViewModel extends BaseViewModel { flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() - ?.requestPermission(); - final bool isConnected = await Connectivity().checkConnection(); + ?.requestNotificationsPermission(); + final bool isConnected = await Connectivity().checkConnectivity() != + ConnectivityResult.none; if (!isConnected) { _toast.showBottom('homeView.noConnection'); } diff --git a/lib/ui/views/installer/installer_viewmodel.dart b/lib/ui/views/installer/installer_viewmodel.dart index 7fef5e84..73b23027 100644 --- a/lib/ui/views/installer/installer_viewmodel.dart +++ b/lib/ui/views/installer/installer_viewmodel.dart @@ -18,7 +18,7 @@ import 'package:revanced_manager/ui/widgets/shared/custom_material_button.dart'; import 'package:revanced_manager/utils/about_info.dart'; import 'package:screenshot_callback/screenshot_callback.dart'; import 'package:stacked/stacked.dart'; -import 'package:wakelock/wakelock.dart'; +import 'package:wakelock_plus/wakelock_plus.dart'; class InstallerViewModel extends BaseViewModel { final ManagerAPI _managerAPI = locator(); @@ -74,7 +74,7 @@ class InstallerViewModel extends BaseViewModel { screenshotDetected(context); } }); - await Wakelock.enable(); + await WakelockPlus.enable(); await handlePlatformChannelMethods(); await runPatcher(); } @@ -171,7 +171,7 @@ class InstallerViewModel extends BaseViewModel { } // ignore } } - await Wakelock.disable(); + await WakelockPlus.disable(); } on Exception catch (e) { if (kDebugMode) { print(e); diff --git a/lib/ui/views/settings/settings_viewmodel.dart b/lib/ui/views/settings/settings_viewmodel.dart index bc3988e6..71730088 100644 --- a/lib/ui/views/settings/settings_viewmodel.dart +++ b/lib/ui/views/settings/settings_viewmodel.dart @@ -1,8 +1,7 @@ import 'dart:io'; -import 'package:cr_file_saver/file_saver.dart'; -import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_file_dialog/flutter_file_dialog.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:logcat/logcat.dart'; import 'package:path_provider/path_provider.dart'; @@ -14,7 +13,7 @@ import 'package:revanced_manager/ui/views/patcher/patcher_viewmodel.dart'; import 'package:revanced_manager/ui/views/patches_selector/patches_selector_viewmodel.dart'; import 'package:revanced_manager/ui/views/settings/settingsFragment/settings_update_language.dart'; import 'package:revanced_manager/ui/widgets/shared/custom_material_button.dart'; -import 'package:share_extend/share_extend.dart'; +import 'package:share_plus/share_plus.dart'; import 'package:stacked/stacked.dart'; import 'package:stacked_services/stacked_services.dart'; @@ -159,10 +158,10 @@ class SettingsViewModel extends BaseViewModel { if (outFile.existsSync()) { final String dateTime = DateTime.now().toString().replaceAll(' ', '_').split('.').first; - await CRFileSaver.saveFileWithDialog( - SaveFileDialogParams( + await FlutterFileDialog.saveFile( + params: SaveFileDialogParams( sourceFilePath: outFile.path, - destinationFileName: 'selected_patches_$dateTime.json', + fileName: 'selected_patches_$dateTime.json', ), ); _toast.showBottom('settingsView.exportedPatches'); @@ -179,12 +178,13 @@ class SettingsViewModel extends BaseViewModel { Future importPatches(BuildContext context) async { if (isPatchesChangeEnabled()) { try { - final FilePickerResult? result = await FilePicker.platform.pickFiles( - type: FileType.custom, - allowedExtensions: ['json'], + final String? result = await FlutterFileDialog.pickFile( + params: const OpenFileDialogParams( + fileExtensionsFilter: ['json'], + ), ); - if (result != null && result.files.single.path != null) { - final File inFile = File(result.files.single.path!); + if (result != null) { + final File inFile = File(result); inFile.copySync(_managerAPI.storedPatchesFile); inFile.delete(); if (_patcherViewModel.selectedApp != null) { @@ -209,10 +209,10 @@ class SettingsViewModel extends BaseViewModel { if (outFile.existsSync()) { final String dateTime = DateTime.now().toString().replaceAll(' ', '_').split('.').first; - await CRFileSaver.saveFileWithDialog( - SaveFileDialogParams( + await FlutterFileDialog.saveFile( + params: SaveFileDialogParams( sourceFilePath: outFile.path, - destinationFileName: 'keystore_$dateTime.keystore', + fileName: 'keystore_$dateTime.keystore', ), ); _toast.showBottom('settingsView.exportedKeystore'); @@ -228,9 +228,9 @@ class SettingsViewModel extends BaseViewModel { Future importKeystore() async { try { - final FilePickerResult? result = await FilePicker.platform.pickFiles(); - if (result != null && result.files.single.path != null) { - final File inFile = File(result.files.single.path!); + final String? result = await FlutterFileDialog.pickFile(); + if (result != null) { + final File inFile = File(result); inFile.copySync(_managerAPI.keystoreFile); _toast.showBottom('settingsView.importedKeystore'); @@ -276,6 +276,6 @@ class SettingsViewModel extends BaseViewModel { File('${logDir.path}/revanced-manager_logcat_$dateTime.log'); final String logs = await Logcat.execute(); logcat.writeAsStringSync(logs); - ShareExtend.share(logcat.path, 'file'); + await Share.shareXFiles([XFile(logcat.path)]); } } diff --git a/lib/ui/widgets/patchesSelectorView/patch_options_fields.dart b/lib/ui/widgets/patchesSelectorView/patch_options_fields.dart index 5b48dbcf..ae026cb7 100644 --- a/lib/ui/widgets/patchesSelectorView/patch_options_fields.dart +++ b/lib/ui/widgets/patchesSelectorView/patch_options_fields.dart @@ -1,6 +1,6 @@ -import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_file_dialog/flutter_file_dialog.dart'; import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:revanced_manager/models/patch.dart'; import 'package:revanced_manager/ui/widgets/shared/custom_card.dart'; @@ -512,17 +512,16 @@ class _TextFieldForPatchOptionState extends State { onSelected: (String selection) async { switch (selection) { case 'patchOptionsView.selectFilePath': - final result = await FilePicker.platform.pickFiles(); - if (result != null && result.files.single.path != null) { - controller.text = result.files.single.path.toString(); + final String? result = await FlutterFileDialog.pickFile(); + if (result != null) { + controller.text = result; widget.onChanged(controller.text); } break; case 'patchOptionsView.selectFolder': - final result = - await FilePicker.platform.getDirectoryPath(); + final DirectoryLocation? result = await FlutterFileDialog.pickDirectory(); if (result != null) { - controller.text = result; + controller.text = result.toString(); widget.onChanged(controller.text); } break; diff --git a/pubspec.yaml b/pubspec.yaml index 4acf9060..3c39c3fb 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -12,71 +12,75 @@ environment: dependencies: animations: ^2.0.7 collection: ^1.17.0 - cross_connectivity: ^3.0.5 - cr_file_saver: - git: - url: https://github.com/dhruvanbhalara/cr_file_saver - ref: "fix/incorrect_file_name" device_apps: - git: - url: https://github.com/ponces/flutter_plugin_device_apps + git: # switch back to ponces fork once https://github.com/ponces/flutter_plugin_device_apps/pull/1 is merged + url: https://github.com/BenjaminHalko/flutter_plugin_device_apps ref: revanced-manager - device_info_plus: ^8.1.0 + device_info_plus: ^9.1.0 dynamic_color: ^1.6.3 dio: ^5.0.0 dynamic_themes: ^1.1.0 expandable: ^5.0.1 - file_picker: - git: - url: https://github.com/alexmercerind/flutter_file_picker - ref: master flex_color_scheme: ^7.0.1 flutter: sdk: flutter - flutter_background: ^1.2.0 + flutter_background: + git: # remove once https://github.com/JulianAssmann/flutter_background/pull/79 is merged + url: https://github.com/BenjaminHalko/flutter_background + ref: specify-namespace flutter_cache_manager: ^3.3.0 - flutter_i18n: ^0.33.0 - flutter_local_notifications: ^13.0.0 + flutter_i18n: ^0.34.0 + flutter_local_notifications: ^16.1.0 flutter_localizations: sdk: flutter flutter_svg: ^2.0.4 - fluttertoast: ^8.2.1 - font_awesome_flutter: ^10.6.0 - get_it: 7.2.0 - google_fonts: ^4.0.3 - http: ^0.13.5 + fluttertoast: + git: # remove once the next fluttertoast version is release (> 8.2.2) + url: https://github.com/ponnamkarthik/FlutterToast + ref: f4e7b4e1afc8c760eb5bac80f6a2e299906d83ca + font_awesome_flutter: ^10.4.0 + get_it: ^7.6.4 + google_fonts: ^6.1.0 + http: ^1.1.0 injectable: ^2.1.1 intl: ^0.18.0 json_annotation: ^4.8.0 logcat: git: - url: https://github.com/SuaMusica/logcat - ref: feature/nullSafe - package_info_plus: ^3.0.3 + url: https://github.com/BenjaminHalko/logcat + ref: master + package_info_plus: ^4.2.0 path_provider: ^2.0.14 - permission_handler: ^10.2.0 + permission_handler: ^11.0.1 pull_to_refresh: ^2.0.0 root: git: - url: https://github.com/EvadeMaster/root - ref: 82803aa40f63cddff81c3e4d27ce8ce3e7c83f60 - share_extend: ^2.0.0 + url: https://github.com/validcube/root + ref: 68e5678a535a2a3344828a14a39017fa74b9098c shared_preferences: ^2.1.0 skeletons: ^0.0.3 stacked: ^3.2.0 stacked_generator: ^1.1.0 stacked_services: ^1.0.0 - stacked_themes: ^0.3.10 timeago: ^3.3.0 timezone: ^0.9.0 url_launcher: ^6.1.10 - wakelock: ^0.6.2 flutter_dotenv: ^5.0.2 flutter_markdown: ^0.6.14 dio_cache_interceptor: ^3.4.0 - install_plugin: ^2.1.0 - screenshot_callback: ^3.0.1 + install_plugin: + git: # remove once https://github.com/hui-z/flutter_install_plugin/pull/67 is merged + url: https://github.com/BenjaminHalko/flutter_install_plugin + ref: master + screenshot_callback: + git: # remove once https://github.com/flutter-moum/flutter_screenshot_callback/pull/81 is merged + url: https://github.com/BenjaminHalko/flutter_screenshot_callback + ref: master synchronized: ^3.1.0 + connectivity_plus: ^5.0.1 + flutter_file_dialog: ^3.0.2 + wakelock_plus: ^1.1.3 + share_plus: ^7.2.1 dev_dependencies: json_serializable: ^6.6.1 @@ -85,7 +89,7 @@ dev_dependencies: flutter_lints: ^2.0.1 flutter_test: sdk: flutter - injectable_generator: ^2.1.5 + injectable_generator: ^2.1.5