diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index f92387c..0000000 --- a/.drone.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -kind: pipeline -type: docker -name: build - -trigger: - event: - include: - - push - - pull_request - -steps: - - name: build - image: ghcr.io/cirruslabs/flutter:3.10.2 - commands: - - flutter doctor - - flutter pub get - - flutter pub outdated - - flutter packages pub run build_runner build --delete-conflicting-outputs - - flutter analyze --no-pub --no-current-package lib/ - - flutter build apk --debug diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml new file mode 100644 index 0000000..06640da --- /dev/null +++ b/.forgejo/workflows/build.yaml @@ -0,0 +1,21 @@ +on: [ push ] +jobs: + build: + runs-on: docker + container: + image: ghcr.io/cirruslabs/flutter:3.16.1 + steps: + - name: Prepare requirements + run: | + apt-get update + apt-get install -y nodejs npm git + rm -rf /var/lib/apt/lists/* + - uses: actions/checkout@v3 + - name: Build + run: | + flutter doctor + flutter pub get + flutter pub outdated + flutter packages pub run build_runner build --delete-conflicting-outputs + flutter analyze --no-pub --no-current-package lib/ + flutter build apk --debug diff --git a/CHANGELOG.md b/CHANGELOG.md index 30567e3..af24538 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # CHANGELOG +## 1.6.2+20 +* Updated internal dependencies +* Moved progress indicator of _Show Configuration_ into the underlying button +* Bumped Android minSdk to `30` (Android 11) +* Bumped Android targetSdk to `34` (Android 14) +* Fixed permission service not handling Android SDK 33 correctly +* Fixed permission service not being started during application start + ## 1.6.1+19 * Updated internal dependencies diff --git a/README.md b/README.md index 3cbaebe..d9d643a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ A mobile flutter app for [FileBin](https://git.server-speed.net/users/flo/filebin/). -Available on the [Play Store](https://play.google.com/store/apps/details?id=de.varakh.fbmobile). +Available on the [Play Store](https://play.google.com/store/apps/details?id=de.varakh.fbmobile) and +[IzzyOnDroid](https://apt.izzysoft.de/fdroid/index/apk/de.varakh.fbmobile/). The main git repository is hosted at **[https://git.myservermanager.com/varakh/fbmobile](https://git.myservermanager.com/varakh/fbmobile)**. Other repositories are mirrors and pull requests, issues, and planning are managed there. @@ -94,7 +95,7 @@ profiles. They're stored in a separate git repository and are encrypted. You need access to the git repository in which those private files reside. -#### Usage +#### Usage / doing the actual release Go into the platform directory you want to build for, e.g. `ios/` or `android/` and then look into the `Fastlane` file which lanes are present. Run a lane via `fastlane `, e.g. use the @@ -104,13 +105,37 @@ following to build for Android `fastlane android build`. ##### Android -Use `fastlane android beta` to build and upload a new beta version to the Play Store. +It's recommended you set up `fastlane` via `bundler` (you need this to be installed on your machine). + +Go into the `android/` sub-directory of the project + +```shell +bundle config set --local path 'vendor/bundle' +bundle install + +# update fastlane when needed +bundle update fastlane + +# build only +bundle exec fastlane android build + +# deploy (push BETA to app store) +bundle exec fastlane android beta + +# deploy (push to app store) +bundle exec fastlane android deploy + +# deploy (build signed fdroid large bundle [no target and abi split]) +bundle exec fastlane android build_production_fdroid +``` ##### iOS For iOS you need to execute `fastlane ios build` before uploading to testflight with `fastlane ios beta`. +Probably do the same Ruby/fastlane setup as mentioned under the _Android_ section. + ### Release manually (not recommended) See the following links on how to setup: diff --git a/android/.gitignore b/android/.gitignore index bc2100d..611a492 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -5,3 +5,5 @@ gradle-wrapper.jar /gradlew.bat /local.properties GeneratedPluginRegistrant.java +.bundle +vendor/ diff --git a/android/app/build.gradle b/android/app/build.gradle index 070d44a..8d20657 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,7 +31,7 @@ if (keystorePropertiesFile.exists()) { } android { - compileSdkVersion 33 + compileSdkVersion 34 lintOptions { disable 'InvalidPackage' @@ -39,8 +39,8 @@ android { defaultConfig { applicationId "de.varakh.fbmobile" - minSdkVersion 19 - targetSdkVersion 33 + minSdkVersion 30 + targetSdkVersion 34 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index 5399da6..9a1fc0d 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -4,7 +4,10 @@ to allow setting breakpoints, to provide hot reload, etc. --> - + + + + diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2c6fc11..427ec05 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -30,7 +30,10 @@ - + + + + diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml index 5399da6..9a1fc0d 100644 --- a/android/app/src/profile/AndroidManifest.xml +++ b/android/app/src/profile/AndroidManifest.xml @@ -4,7 +4,10 @@ to allow setting breakpoints, to provide hot reload, etc. --> - + + + + diff --git a/android/fastlane/Fastfile b/android/fastlane/Fastfile index ee793ac..9138a00 100644 --- a/android/fastlane/Fastfile +++ b/android/fastlane/Fastfile @@ -11,6 +11,11 @@ platform :android do sh("#{ENV['PWD']}/fastlane/buildAndroidProduction.sh") end + desc "Build Production fdroid" + lane :build_production_fdroid do + sh("#{ENV['PWD']}/fastlane/buildAndroidProductionFdroid.sh") + end + desc "Build" lane :build do sh("#{ENV['PWD']}/fastlane/buildAndroid.sh") diff --git a/android/fastlane/README.md b/android/fastlane/README.md index ee3138f..5b28be7 100644 --- a/android/fastlane/README.md +++ b/android/fastlane/README.md @@ -31,6 +31,14 @@ Build Debug Build Production +### android build_production_fdroid + +```sh +[bundle exec] fastlane android build_production_fdroid +``` + +Build Production fdroid + ### android build ```sh diff --git a/android/fastlane/buildAndroidProductionFdroid.sh b/android/fastlane/buildAndroidProductionFdroid.sh new file mode 100755 index 0000000..b2e2be2 --- /dev/null +++ b/android/fastlane/buildAndroidProductionFdroid.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env sh + +cd ../../; +flutter clean && \ +flutter pub get && +flutter packages pub run build_runner build --delete-conflicting-outputs; + +flutter build apk --release; diff --git a/assets/i18n/en.json b/assets/i18n/en.json index 1d5cea4..bbfd3a8 100644 --- a/assets/i18n/en.json +++ b/assets/i18n/en.json @@ -126,14 +126,6 @@ "description": "Could not open '{link}'. Please ensure that you have an application installed which handles opening such link types." } }, - "permission_service": { - "dialog": { - "title": "Storage permission", - "description": "Storage permission should be granted to the app so that it can work properly. Do you want to grant permission or ignore this message permanently in the future?", - "grant": "Grant", - "ignore": "Ignore" - } - }, "dialog": { "confirm": "OK", "cancel": "Cancel" diff --git a/lib/core/error/rest_service_exception.dart b/lib/core/error/rest_service_exception.dart index 3f1bd35..4189d4d 100644 --- a/lib/core/error/rest_service_exception.dart +++ b/lib/core/error/rest_service_exception.dart @@ -5,8 +5,8 @@ class RestServiceException extends ServiceException { final int statusCode; final dynamic responseBody; - RestServiceException(this.statusCode, {this.responseBody, String? message}) - : super(code: ErrorCode.restError, message: message); + RestServiceException(this.statusCode, {this.responseBody, super.message = null}) + : super(code: ErrorCode.restError); @override String toString() { diff --git a/lib/core/manager/dialog_manager.dart b/lib/core/manager/dialog_manager.dart index 5eb75d0..94b9217 100644 --- a/lib/core/manager/dialog_manager.dart +++ b/lib/core/manager/dialog_manager.dart @@ -8,7 +8,7 @@ import '../services/dialog_service.dart'; class DialogManager extends StatefulWidget { final Widget? child; - const DialogManager({Key? key, this.child}) : super(key: key); + const DialogManager({super.key, this.child}); @override _DialogManagerState createState() => _DialogManagerState(); diff --git a/lib/core/manager/lifecycle_manager.dart b/lib/core/manager/lifecycle_manager.dart index 09840ed..8113e1a 100644 --- a/lib/core/manager/lifecycle_manager.dart +++ b/lib/core/manager/lifecycle_manager.dart @@ -11,7 +11,7 @@ import '../util/logger.dart'; class LifeCycleManager extends StatefulWidget { final Widget? child; - const LifeCycleManager({Key? key, this.child}) : super(key: key); + const LifeCycleManager({super.key, this.child}); @override _LifeCycleManagerState createState() => _LifeCycleManagerState(); diff --git a/lib/core/services/permission_service.dart b/lib/core/services/permission_service.dart index 4c5dcdc..ad091f8 100644 --- a/lib/core/services/permission_service.dart +++ b/lib/core/services/permission_service.dart @@ -1,108 +1,100 @@ import 'dart:async'; +import 'dart:io' show Platform; -import 'package:flutter_translate/flutter_translate.dart'; +import 'package:device_info_plus/device_info_plus.dart'; import 'package:logger/logger.dart'; import 'package:permission_handler/permission_handler.dart'; import '../../constants.dart'; -import '../../core/datamodels/dialog_response.dart'; -import '../../core/services/dialog_service.dart'; import '../../core/services/stoppable_service.dart'; import '../../core/util/logger.dart'; -import '../../locator.dart'; -import 'storage_service.dart'; class PermissionService extends StoppableService { final Logger _logger = getLogger(); - final DialogService _dialogService = locator(); - final StorageService _storageService = locator(); Timer? _serviceCheckTimer; - PermissionStatus? _permissionStatus; - - bool _permanentlyIgnored = false; bool _devicePermissionDialogActive = false; - bool _ownPermissionDialogActive = false; - PermissionService() { - _devicePermissionDialogActive = true; + bool _deviceInformationInitialized = false; + bool _useStoragePermission = true; - Permission.storage.request().then((status) { - _permissionStatus = status; - if (PermissionStatus.permanentlyDenied == status) { - _permanentlyIgnored = true; - } - }).whenComplete(() { - _logger.d('Initial device request permission finished'); - _devicePermissionDialogActive = false; - }); - } + PermissionService(); Future checkEnabledAndPermission() async { - if (_permanentlyIgnored) { - await _storageService.storeStoragePermissionDialogIgnored(); - _permanentlyIgnored = false; - _logger.d('Set permanently ignored permission request'); - stop(); - } - if (_devicePermissionDialogActive) { _logger.d('Device permission dialog active, skipping'); return; } - if (_ownPermissionDialogActive) { - _logger.d('Own permission dialog already active, skipping'); - return; + bool allGranted = false; + bool anyPermanentlyDenied = false; + + // Since Android compileSdk >= 33, "storage" is deprecated + // Instead, request access to all of + // - Permission.photos + // - Permission.videos + // - Permission.audio + // + // For iOS and Android < 33, keep using "storage" + if (_useStoragePermission) { + PermissionStatus storagePermission = await Permission.storage.status; + allGranted = PermissionStatus.granted == storagePermission; + anyPermanentlyDenied = + PermissionStatus.permanentlyDenied == storagePermission; + } else { + PermissionStatus photosPermission = await Permission.photos.status; + PermissionStatus videosPermission = await Permission.videos.status; + PermissionStatus audioPermission = await Permission.audio.status; + + allGranted = PermissionStatus.granted == photosPermission && + PermissionStatus.granted == videosPermission && + PermissionStatus.granted == audioPermission; + anyPermanentlyDenied = + PermissionStatus.permanentlyDenied == photosPermission || + PermissionStatus.permanentlyDenied == videosPermission || + PermissionStatus.permanentlyDenied == audioPermission; } - var ignoredDialog = - await _storageService.hasStoragePermissionDialogIgnored(); - - if (ignoredDialog) { - _logger.d('Permanently ignored permission request, skipping'); + // show warning to user to manually handle, don't enforce it over and over again + if (anyPermanentlyDenied) { + _logger.w( + "At least one required permission has been denied permanently, stopping service"); stop(); return; } - _permissionStatus = await Permission.storage.status; - if (_permissionStatus != PermissionStatus.granted) { - if (_permissionStatus == PermissionStatus.permanentlyDenied) { - await _storageService.storeStoragePermissionDialogIgnored(); - return; - } + // all good, stop the permission service + if (allGranted) { + _logger.d("All permissions have been granted, stopping service"); + stop(); + return; + } - _ownPermissionDialogActive = true; - DialogResponse response = await _dialogService.showConfirmationDialog( - title: translate('permission_service.dialog.title'), - description: translate('permission_service.dialog.description'), - buttonTitleAccept: translate('permission_service.dialog.grant'), - buttonTitleDeny: translate('permission_service.dialog.ignore')); + // not all have been granted, show OS dialog + _logger.d( + "Not all permissions have been granted yet, initializing permission dialog"); + _devicePermissionDialogActive = true; - if (!response.confirmed!) { - await _storageService.storeStoragePermissionDialogIgnored(); - } else { - _devicePermissionDialogActive = true; - Permission.storage.request().then((status) async { - if (PermissionStatus.permanentlyDenied == status) { - await _storageService.storeStoragePermissionDialogIgnored(); - } - }).whenComplete(() { - _logger.d('Device request permission finished'); - _devicePermissionDialogActive = false; - }); - } - - _ownPermissionDialogActive = false; + if (_useStoragePermission) { + await [Permission.storage].request().whenComplete(() { + _logger.d('Device request permission finished'); + _devicePermissionDialogActive = false; + }); } else { - await _storageService.storeStoragePermissionDialogIgnored(); + await [Permission.photos, Permission.videos, Permission.audio] + .request() + .whenComplete(() { + _logger.d('Device request permission finished'); + _devicePermissionDialogActive = false; + }); } } @override Future start() async { super.start(); + await _determineDeviceInfo(); await checkEnabledAndPermission(); _serviceCheckTimer = Timer.periodic( @@ -124,6 +116,29 @@ class PermissionService extends StoppableService { _logger.d('PermissionService stopped'); } + Future _determineDeviceInfo() async { + if (_deviceInformationInitialized) { + _logger.d('Device information already initialized, skipping'); + return; + } + + DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin(); + if (Platform.isAndroid) { + final androidInfo = await deviceInfoPlugin.androidInfo; + if (androidInfo.version.sdkInt >= 33) { + _useStoragePermission = false; + } + } + + if (_useStoragePermission) { + _logger.d('Device requires [storage] permission'); + } else { + _logger.d('Device requires [photos,videos,audio] permission'); + } + + _deviceInformationInitialized = true; + } + void _removeServiceCheckTimer() { if (_serviceCheckTimer != null) { _serviceCheckTimer!.cancel(); diff --git a/lib/core/services/storage_service.dart b/lib/core/services/storage_service.dart index 95f08c4..ba3ce5c 100644 --- a/lib/core/services/storage_service.dart +++ b/lib/core/services/storage_service.dart @@ -7,8 +7,6 @@ import '../models/session.dart'; class StorageService { static const _sessionKey = 'session'; static const _lastUrlKey = 'last_url'; - static const _storagePermissionDialogIgnoredKey = - 'storage_permission_ignored'; Future storeLastUrl(String url) { return _store(_lastUrlKey, url); @@ -39,14 +37,6 @@ class StorageService { return _remove(_sessionKey); } - Future storeStoragePermissionDialogIgnored() { - return _store(_storagePermissionDialogIgnoredKey, true.toString()); - } - - Future hasStoragePermissionDialogIgnored() { - return _exists(_storagePermissionDialogIgnoredKey); - } - Future _exists(String key) async { final SharedPreferences prefs = await SharedPreferences.getInstance(); return prefs.containsKey(key); diff --git a/lib/core/viewmodels/history_model.dart b/lib/core/viewmodels/history_model.dart index e506db3..07c3f21 100644 --- a/lib/core/viewmodels/history_model.dart +++ b/lib/core/viewmodels/history_model.dart @@ -108,7 +108,7 @@ class HistoryModel extends BaseModel { } else { errorMessage = translate('app.unknown_error'); setStateView(ViewState.idle); - _logger.e('An unknown error occurred', e); + _logger.e('An unknown error occurred', error: e); rethrow; } } @@ -156,7 +156,7 @@ class HistoryModel extends BaseModel { } else { errorMessage = translate('app.unknown_error'); setStateView(ViewState.idle); - _logger.e('An unknown error occurred', e); + _logger.e('An unknown error occurred', error: e); rethrow; } } diff --git a/lib/core/viewmodels/login_model.dart b/lib/core/viewmodels/login_model.dart index 8d62d08..002fd94 100644 --- a/lib/core/viewmodels/login_model.dart +++ b/lib/core/viewmodels/login_model.dart @@ -163,7 +163,7 @@ class LoginModel extends BaseModel { errorMessage = translate('app.unknown_error'); _sessionService.logout(); setStateView(ViewState.idle); - _logger.e('An unknown error occurred', e); + _logger.e('An unknown error occurred', error: e); rethrow; } diff --git a/lib/core/viewmodels/profile_model.dart b/lib/core/viewmodels/profile_model.dart index 3d5362c..ae83939 100644 --- a/lib/core/viewmodels/profile_model.dart +++ b/lib/core/viewmodels/profile_model.dart @@ -77,7 +77,7 @@ class ProfileModel extends BaseModel { setStateBoolValue(_configurationButtonLoading, false); _sessionService.logout(); setStateBoolValue(_configurationButtonLoading, false); - _logger.e('An unknown error occurred', e); + _logger.e('An unknown error occurred', error: e); rethrow; } } diff --git a/lib/core/viewmodels/startup_model.dart b/lib/core/viewmodels/startup_model.dart index 767e1cb..afc8eac 100644 --- a/lib/core/viewmodels/startup_model.dart +++ b/lib/core/viewmodels/startup_model.dart @@ -1,3 +1,4 @@ +import 'package:fbmobile/core/services/permission_service.dart'; import 'package:flutter_translate/flutter_translate.dart'; import '../../locator.dart'; @@ -9,16 +10,18 @@ import 'base_model.dart'; class StartUpViewModel extends BaseModel { final SessionService _sessionService = locator(); + final PermissionService _permissionService = locator(); final NavigationService _navigationService = locator(); Future handleStartUpLogic() async { setStateView(ViewState.busy); setStateMessage(translate('startup.init')); - await Future.delayed(const Duration(milliseconds: 150)); + await Future.delayed(const Duration(milliseconds: 100)); setStateMessage(translate('startup.start_services')); await _sessionService.start(); - await Future.delayed(const Duration(milliseconds: 150)); + await _permissionService.start(); + await Future.delayed(const Duration(milliseconds: 100)); _navigationService.navigateAndReplaceTo(HomeView.routeName); diff --git a/lib/core/viewmodels/upload_model.dart b/lib/core/viewmodels/upload_model.dart index 71e43ed..ae09293 100644 --- a/lib/core/viewmodels/upload_model.dart +++ b/lib/core/viewmodels/upload_model.dart @@ -152,9 +152,9 @@ class UploadModel extends BaseModel { )) ?.files; } on PlatformException catch (e) { - _logger.e('Unsupported operation', e); + _logger.e('Unsupported operation', error: e); } catch (ex) { - _logger.e('An unknown error occurred', ex); + _logger.e('An unknown error occurred', error: ex); } loadingPath = false; @@ -238,7 +238,7 @@ class UploadModel extends BaseModel { errorMessage = translate('app.unknown_error'); setStateMessage(null); setStateView(ViewState.idle); - _logger.e('An unknown error occurred', e); + _logger.e('An unknown error occurred', error: e); rethrow; } } diff --git a/lib/ui/views/profile_view.dart b/lib/ui/views/profile_view.dart index 6af69b0..de14b41 100644 --- a/lib/ui/views/profile_view.dart +++ b/lib/ui/views/profile_view.dart @@ -53,24 +53,26 @@ class ProfileView extends StatelessWidget { UIHelper.verticalSpaceMedium(), Padding( padding: const EdgeInsets.only(left: 25.0, right: 25.0), - child: model.configLoading - ? Center( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - const CircularProgressIndicator(), - Text(translate('profile.show_config_loading')), - ], - )) - : ElevatedButton.icon( - icon: const Icon(Icons.settings, color: blueColor), - label: Text( - translate('profile.show_config'), - ), - onPressed: () async { - await model.showConfig(url); - })), + child: ElevatedButton.icon( + icon: model.configLoading + ? Container( + width: 24, + height: 24, + padding: const EdgeInsets.all(2.0), + child: const CircularProgressIndicator( + color: blueColor, + strokeWidth: 3, + ), + ) + : const Icon(Icons.settings, color: blueColor), + label: Text( + model.configLoading + ? translate('profile.show_config_loading') + : translate('profile.show_config'), + ), + onPressed: () async { + await model.showConfig(url); + })), UIHelper.verticalSpaceMedium(), Padding( padding: const EdgeInsets.only(left: 25.0, right: 25.0), diff --git a/lib/ui/widgets/my_appbar.dart b/lib/ui/widgets/my_appbar.dart index 67cd92b..9bda695 100644 --- a/lib/ui/widgets/my_appbar.dart +++ b/lib/ui/widgets/my_appbar.dart @@ -7,12 +7,11 @@ class MyAppBar extends AppBar { static final List aboutDisabledWidgets = []; MyAppBar( - {Key? key, + {super.key, required Widget title, List? actionWidgets, bool enableAbout = true}) : super( - key: key, title: Row(children: [title]), actions: _renderIconButtons(actionWidgets, enableAbout)); diff --git a/pubspec.lock b/pubspec.lock index e924272..33d2962 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,26 +5,26 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a + sha256: eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051 url: "https://pub.dev" source: hosted - version: "61.0.0" + version: "64.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 + sha256: "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893" url: "https://pub.dev" source: hosted - version: "5.13.0" + version: "6.2.0" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.4.2" async: dependency: transitive description: @@ -45,10 +45,10 @@ packages: dependency: transitive description: name: build - sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.1" build_config: dependency: transitive description: @@ -61,34 +61,34 @@ packages: dependency: transitive description: name: build_daemon - sha256: "5f02d73eb2ba16483e693f80bee4f088563a820e47d1027d4cdfe62b5bb43e65" + sha256: "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "4.0.1" build_resolvers: dependency: transitive description: name: build_resolvers - sha256: db49b8609ef8c81cca2b310618c3017c00f03a92af44c04d310b907b2d692d95 + sha256: "64e12b0521812d1684b1917bc80945625391cb9bdd4312536b1d69dcb6133ed8" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.4.1" build_runner: dependency: "direct dev" description: name: build_runner - sha256: "220ae4553e50d7c21a17c051afc7b183d28a24a420502e842f303f8e4e6edced" + sha256: "67d591d602906ef9201caf93452495ad1812bea2074f04e25dbd7c133785821b" url: "https://pub.dev" source: hosted - version: "2.4.4" + version: "2.4.7" build_runner_core: dependency: transitive description: name: build_runner_core - sha256: "14febe0f5bac5ae474117a36099b4de6f1dbc52df6c5e55534b3da9591bf4292" + sha256: c9e32d21dd6626b5c163d48b037ce906bbe428bc23ab77bcd77bb21e593b6185 url: "https://pub.dev" source: hosted - version: "7.2.7" + version: "7.2.11" built_collection: dependency: transitive description: @@ -101,18 +101,18 @@ packages: dependency: transitive description: name: built_value - sha256: "31b7c748fd4b9adf8d25d72a4c4a59ef119f12876cf414f94f8af5131d5fa2b0" + sha256: "69acb7007eb2a31dc901512bfe0f7b767168be34cb734835d54c070bfa74c1b2" url: "https://pub.dev" source: hosted - version: "8.4.4" + version: "8.8.0" built_value_generator: dependency: "direct dev" description: name: built_value_generator - sha256: de8657db23599dfb104a66fca02a45a55bb62a3b27c4e637c91610783896263c + sha256: "78680d78a6cab222fc5725ffa21065a05bba951452ae84d08b3c0e150fd3f9f6" url: "https://pub.dev" source: hosted - version: "8.6.0" + version: "8.8.0" characters: dependency: transitive description: @@ -125,10 +125,10 @@ packages: dependency: transitive description: name: checked_yaml - sha256: "3d1505d91afa809d177efd4eed5bb0eb65805097a1463abdd2add076effae311" + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.0.3" clipboard: dependency: "direct main" description: @@ -149,18 +149,18 @@ packages: dependency: transitive description: name: code_builder - sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + sha256: b2151ce26a06171005b379ecff6e08d34c470180ffe16b8e14b6d52be292b55f url: "https://pub.dev" source: hosted - version: "4.4.0" + version: "4.8.0" collection: dependency: transitive description: name: collection - sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a url: "https://pub.dev" source: hosted - version: "1.17.1" + version: "1.18.0" convert: dependency: transitive description: @@ -173,42 +173,58 @@ packages: dependency: transitive description: name: cross_file - sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e url: "https://pub.dev" source: hosted - version: "0.3.3+4" + version: "0.3.3+8" crypto: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.0.3" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" dart_style: dependency: transitive description: name: dart_style - sha256: "6d691edde054969f0e0f26abb1b30834b5138b963793e56f69d3a9a4435e6352" + sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.3.4" + device_info_plus: + dependency: "direct main" + description: + name: device_info_plus + sha256: "0042cb3b2a76413ea5f8a2b40cec2a33e01d0c937e91f0f7c211fde4f7739ba6" + url: "https://pub.dev" + source: hosted + version: "9.1.1" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + url: "https://pub.dev" + source: hosted + version: "7.0.0" dynamic_color: dependency: "direct main" description: name: dynamic_color - sha256: "74dff1435a695887ca64899b8990004f8d1232b0e84bfc4faa1fdda7c6f57cc1" + sha256: "8b8bd1d798bd393e11eddeaa8ae95b12ff028bf7d5998fc5d003488cd5f4ce2f" url: "https://pub.dev" source: hosted - version: "1.6.5" + version: "1.6.8" expandable: dependency: "direct main" description: @@ -229,26 +245,26 @@ packages: dependency: transitive description: name: ffi - sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "2.1.0" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" url: "https://pub.dev" source: hosted - version: "6.1.4" + version: "7.0.0" file_picker: dependency: "direct main" description: name: file_picker - sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf" + sha256: "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6" url: "https://pub.dev" source: hosted - version: "5.3.1" + version: "6.1.1" fixnum: dependency: transitive description: @@ -274,10 +290,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c + sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.1" flutter_localizations: dependency: "direct main" description: flutter @@ -287,18 +303,18 @@ packages: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf + sha256: b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da url: "https://pub.dev" source: hosted - version: "2.0.9" + version: "2.0.17" flutter_sharing_intent: dependency: "direct main" description: name: flutter_sharing_intent - sha256: "491c879d4b18d83e953ff740f3a0dc247f87f4944f6601d351e0a70986d0db3a" + sha256: "6eb896e6523b735e8230eeb206fd3b9f220f11ce879c2400a90b443147036ff9" url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.1.0" flutter_test: dependency: "direct dev" description: flutter @@ -329,34 +345,34 @@ packages: dependency: "direct main" description: name: get_it - sha256: "529de303c739fca98cd7ece5fca500d8ff89649f1bb4b4e94fb20954abcd7468" + sha256: f79870884de16d689cf9a7d15eedf31ed61d750e813c538a6efb92660fea83c3 url: "https://pub.dev" source: hosted - version: "7.6.0" + version: "7.6.4" glob: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" graphs: dependency: transitive description: name: graphs - sha256: f9e130f3259f52d26f0cfc0e964513796dafed572fa52e45d2f8d6ca14db39b2 + sha256: aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19 url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" http: dependency: "direct main" description: name: http - sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + sha256: d4872660c46d929f6b8a9ef4e7a7eff7e49bbf0c4ec3f385ee32df5119175139 url: "https://pub.dev" source: hosted - version: "0.13.6" + version: "1.1.2" http_multi_server: dependency: transitive description: @@ -377,10 +393,10 @@ packages: dependency: "direct main" description: name: intl - sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 + sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d" url: "https://pub.dev" source: hosted - version: "0.18.0" + version: "0.18.1" io: dependency: transitive description: @@ -409,10 +425,10 @@ packages: dependency: "direct dev" description: name: json_serializable - sha256: "61a60716544392a82726dd0fa1dd6f5f1fd32aec66422b6e229e7b90d52325c4" + sha256: aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969 url: "https://pub.dev" source: hosted - version: "6.7.0" + version: "6.7.1" linkify: dependency: transitive description: @@ -425,50 +441,50 @@ packages: dependency: transitive description: name: lints - sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" + sha256: cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290 url: "https://pub.dev" source: hosted - version: "2.0.1" + version: "3.0.0" logger: dependency: "direct main" description: name: logger - sha256: db2ff852ed77090ba9f62d3611e4208a3d11dfa35991a81ae724c113fcb3e3f7 + sha256: "6bbb9d6f7056729537a4309bda2e74e18e5d9f14302489cc1e93f33b3fe32cac" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "2.0.2+1" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" matcher: dependency: transitive description: name: matcher - sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" url: "https://pub.dev" source: hosted - version: "0.12.15" + version: "0.12.16" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" url: "https://pub.dev" source: hosted - version: "0.2.0" + version: "0.5.0" meta: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" mime: dependency: transitive description: @@ -497,10 +513,10 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: "28386bbe89ab5a7919a47cea99cdd1128e5a6e0bbd7eaafe20440ead84a15de3" + sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "5.0.1" package_info_plus_platform_interface: dependency: transitive description: @@ -521,106 +537,114 @@ packages: dependency: transitive description: name: path_provider - sha256: "04890b994ee89bfa80bf3080bfec40d5a92c5c7a785ebb02c13084a099d2b6f9" + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.1.1" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 url: "https://pub.dev" source: hosted - version: "2.0.24" + version: "2.2.1" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 url: "https://pub.dev" source: hosted - version: "2.1.10" + version: "2.2.1" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.1" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" url: "https://pub.dev" source: hosted - version: "2.1.6" + version: "2.2.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8" + sha256: "860c6b871c94c78e202dc69546d4d8fd84bd59faeb36f8fb9888668a53ff4f78" url: "https://pub.dev" source: hosted - version: "10.2.0" + version: "11.1.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: "8028362b40c4a45298f1cbfccd227c8dd6caf0e27088a69f2ba2ab15464159e2" + sha256: "2f1bec180ee2f5665c22faada971a8f024761f632e93ddc23310487df52dcfa6" url: "https://pub.dev" source: hosted - version: "10.2.0" + version: "12.0.1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" + sha256: "1a816084338ada8d574b1cb48390e6e8b19305d5120fe3a37c98825bacc78306" url: "https://pub.dev" source: hosted - version: "9.0.7" + version: "9.2.0" + permission_handler_html: + dependency: transitive + description: + name: permission_handler_html + sha256: d96ff56a757b7f04fa825c469d296c5aebc55f743e87bd639fef91a466a24da8 + url: "https://pub.dev" + source: hosted + version: "0.1.0+1" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" + sha256: d87349312f7eaf6ce0adaf668daf700ac5b06af84338bd8b8574dfbd93ffe1a1 url: "https://pub.dev" source: hosted - version: "3.9.0" + version: "4.0.2" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b + sha256: "1e8640c1e39121128da6b816d236e714d2cf17fac5a105dd6acdd3403a628004" url: "https://pub.dev" source: hosted - version: "0.1.2" + version: "0.2.0" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" url: "https://pub.dev" source: hosted - version: "3.1.0" + version: "3.1.3" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + sha256: f4f88d4a900933e7267e2b353594774fc0d07fb072b47eedcd5b54e1ea3269f8 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.7" pool: dependency: transitive description: @@ -629,126 +653,118 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.1" - process: - dependency: transitive - description: - name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" - source: hosted - version: "4.2.4" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" url: "https://pub.dev" source: hosted - version: "6.0.5" + version: "6.1.1" pub_semver: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" pubspec_parse: dependency: transitive description: name: pubspec_parse - sha256: "75f6614d6dde2dc68948dffbaa4fe5dae32cd700eb9fb763fe11dfb45a3c4d0a" + sha256: c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.3" share_plus: dependency: "direct main" description: name: share_plus - sha256: "44fc0bc2d35a8fafa1b564e1c6888bdc4fbb2d0197e4a4c21bac0e66123be9cd" + sha256: f74fc3f1cbd99f39760182e176802f693fa0ec9625c045561cfad54681ea93dd url: "https://pub.dev" source: hosted - version: "7.0.1" + version: "7.2.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: "0c6e61471bd71b04a138b8b588fa388e66d8b005e6f2deda63371c5c505a0981" + sha256: df08bc3a07d01f5ea47b45d03ffcba1fa9cd5370fb44b3f38c70e42cced0f956 url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.3.1" shared_preferences: dependency: "direct main" description: name: shared_preferences - sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022" + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.2.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.1" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: e014107bb79d6d3297196f4f2d0db54b5d1f85b8ea8ff63b8e8b391a02700feb + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" url: "https://pub.dev" source: hosted - version: "2.2.2" + version: "2.3.4" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.2" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.2.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.2" shelf: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" sky_engine: dependency: transitive description: flutter @@ -758,58 +774,66 @@ packages: dependency: transitive description: name: source_gen - sha256: "373f96cf5a8744bc9816c1ff41cf5391bbdbe3d7a96fe98c622b6738a8a7bd33" + sha256: fc0da689e5302edb6177fdd964efcb7f58912f43c28c2047a808f5bfff643d16 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" source_helper: dependency: transitive description: name: source_helper - sha256: "3b67aade1d52416149c633ba1bb36df44d97c6b51830c2198e934e3fca87ca1f" + sha256: "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd" url: "https://pub.dev" source: hosted - version: "1.3.3" + version: "1.3.4" source_span: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" + sprintf: + dependency: transitive + description: + name: sprintf + sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" + url: "https://pub.dev" + source: hosted + version: "7.0.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" url: "https://pub.dev" source: hosted - version: "1.11.0" + version: "1.11.1" stacked: dependency: "direct main" description: name: stacked - sha256: "91a2bef6b56e509d247d9a658dd782db4a8394cda0596ed342667712e57d2616" + sha256: "9b314261e675b6d153caee14c3e8fc4590e8a8f3fdd0f418d545c5963372a46f" url: "https://pub.dev" source: hosted - version: "3.3.0" + version: "3.4.1+1" stacked_shared: dependency: transitive description: name: stacked_shared - sha256: "502f2b95d3857b0a0e7ebb77fef8c6ca8123c96fe67086ba3f6e66cbe695e703" + sha256: e6bc2921eb59b7c741c551fbb4060f22a543ea9c2d9351315fb58aa055b535f3 url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" stream_transform: dependency: transitive description: @@ -838,10 +862,10 @@ packages: dependency: transitive description: name: test_api - sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "0.6.1" timing: dependency: transitive description: @@ -854,90 +878,90 @@ packages: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" universal_io: dependency: transitive description: name: universal_io - sha256: "06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d" + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.2.2" url_launcher: dependency: "direct main" description: name: url_launcher - sha256: eb1e00ab44303d50dd487aab67ebc575456c146c6af44422f9c13889984c00f3 + sha256: b1c9e98774adf8820c96fbc7ae3601231d324a7d5ebd8babe27b6dfac91357ba url: "https://pub.dev" source: hosted - version: "6.1.11" + version: "6.2.1" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" + sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" url: "https://pub.dev" source: hosted - version: "6.0.25" + version: "6.2.0" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" + sha256: bba3373219b7abb6b5e0d071b0fe66dfbe005d07517a68e38d4fc3638f35c6d3 url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.2.1" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" url: "https://pub.dev" source: hosted - version: "3.0.5" + version: "3.1.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.1.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.2.0" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + sha256: "138bd45b3a456dcfafc46d1a146787424f8d2edfbf2809c9324361e58f851cf7" url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.2.1" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" + sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.1.0" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + sha256: df5a4d8f22ee4ccd77f8839ac7cb274ebc11ef9adcce8b92be14b797fe889921 url: "https://pub.dev" source: hosted - version: "3.0.7" + version: "4.2.1" validators: dependency: "direct main" description: @@ -958,42 +982,58 @@ packages: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.0" + web: + dependency: transitive + description: + name: web + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 + url: "https://pub.dev" + source: hosted + version: "0.3.0" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.0" win32: dependency: transitive description: name: win32 - sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" + sha256: b0f37db61ba2f2e9b7a78a1caece0052564d1bc70668156cf3a29d676fe4e574 url: "https://pub.dev" source: hosted - version: "4.1.4" + version: "5.1.1" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a" + url: "https://pub.dev" + source: hosted + version: "1.1.2" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: ee1505df1426458f7f60aac270645098d318a8b4766d85fde75f76f2e21807d1 + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" url: "https://pub.dev" source: hosted - version: "1.0.0" + version: "1.0.3" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" sdks: - dart: ">=3.0.0 <4.0.0" - flutter: ">=3.4.0-17.0.pre" + dart: ">=3.2.0 <4.0.0" + flutter: ">=3.16.0" diff --git a/pubspec.yaml b/pubspec.yaml index 32f0ded..47f959e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -11,46 +11,47 @@ description: A mobile client for FileBin. # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 1.6.1+19 +version: 1.6.2+20 environment: - sdk: '>=2.19.4 <3.0.0' + sdk: '>=3.2.0 <4.0.0' dependencies: flutter: sdk: flutter - cupertino_icons: 1.0.5 + cupertino_icons: 1.0.6 flutter_localizations: sdk: flutter flutter_translate: 4.0.4 - provider: 6.0.5 - stacked: 3.3.0 - get_it: 7.6.0 - logger: 1.3.0 - shared_preferences: 2.1.1 - http: 0.13.6 + provider: 6.1.1 + stacked: 3.4.1+1 + get_it: 7.6.4 + logger: 2.0.2+1 + shared_preferences: 2.2.2 + http: 1.1.2 validators: 3.0.0 flutter_linkify: 6.0.0 - url_launcher: 6.1.11 + url_launcher: 6.2.1 expandable: 5.0.1 - share_plus: 7.0.1 - file_picker: 5.3.1 + share_plus: 7.2.1 + file_picker: 6.1.1 clipboard: 0.1.3 - permission_handler: 10.2.0 - package_info_plus: 4.0.1 - json_annotation: ^4.8.1 - dynamic_color: 1.6.5 - intl: 0.18.0 + permission_handler: 11.1.0 + package_info_plus: 5.0.1 + json_annotation: 4.8.1 + dynamic_color: 1.6.8 + intl: 0.18.1 path: 1.8.3 - flutter_sharing_intent: 1.0.6 + flutter_sharing_intent: 1.1.0 + device_info_plus: 9.1.1 dev_dependencies: flutter_test: sdk: flutter - build_runner: 2.4.4 - built_value_generator: 8.6.0 - json_serializable: 6.7.0 - flutter_lints: 2.0.1 + build_runner: 2.4.7 + built_value_generator: 8.8.0 + json_serializable: 6.7.1 + flutter_lints: 3.0.1 # For information on the generic Dart part of this file, see the # following page: https://www.dartlang.org/tools/pub/pubspec diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..f027e32 --- /dev/null +++ b/renovate.json @@ -0,0 +1,30 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended", ":rebaseStalePrs", ":ignoreUnstable", "group:monorepos", "group:recommended" + ], + "prConcurrentLimit": 0, + "ignorePaths": [ + "android/**", + "ios/**" + ], + "ignoreDeps": [ + "intl" + ], + "packageRules": [ + { + "matchUpdateTypes": [ + "minor" + ], + "groupName": "all minor dependencies", + "groupSlug": "all-minor-deps" + }, + { + "matchUpdateTypes": [ + "patch" + ], + "groupName": "all patch dependencies", + "groupSlug": "all-patch-deps" + } + ] +}