From 7ef179906d55083048b30717a19044a38862d7cf Mon Sep 17 00:00:00 2001 From: Varakh Date: Thu, 23 Jun 2022 00:42:37 +0200 Subject: [PATCH] Increased target SDK to 33, Increased dart to 2.17.3, Indicate configuration loading in profile view --- CHANGELOG.md | 4 +- README.md | 7 +- android/app/build.gradle | 4 +- assets/i18n/en.json | 1 + lib/app.dart | 14 ++- lib/core/manager/lifecycle_manager.dart | 12 +-- lib/core/viewmodels/base_model.dart | 36 ++++++- lib/core/viewmodels/profile_model.dart | 34 +++--- lib/core/viewmodels/upload_model.dart | 30 ++---- lib/main.dart | 4 +- lib/ui/views/profile_view.dart | 29 ++++-- lib/ui/views/tabbar_authenticated.dart | 39 +++---- lib/ui/widgets/my_appbar.dart | 9 +- pubspec.lock | 131 +++++++++++++----------- pubspec.yaml | 24 ++--- 15 files changed, 196 insertions(+), 182 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9e52b..72c5c28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,9 @@ # CHANGELOG ## 1.4.3+16 - UNRELEASED -* ... +* Increased target SDK to `33` +* Increased dart to `>= 2.17.3` +* Indicate configuration loading in profile view ## 1.4.2+15 * Minor cleanup diff --git a/README.md b/README.md index bf4d0b8..519c36c 100644 --- a/README.md +++ b/README.md @@ -32,8 +32,11 @@ Start by installing dependencies and generating entities! ### Working versions for SDK ``` -Flutter version 2.10.5 -Dart version 2.16.2 +• Flutter version 3.0.2 +• Framework revision cd41fdd495 +• Engine revision f15f824b57 +• Dart version 2.17.3 +• DevTools version 2.12.2 ``` ## Dependencies diff --git a/android/app/build.gradle b/android/app/build.gradle index c2e9656..c9d495e 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,7 +31,7 @@ if (keystorePropertiesFile.exists()) { } android { - compileSdkVersion 31 + compileSdkVersion 33 lintOptions { disable 'InvalidPackage' @@ -40,7 +40,7 @@ android { defaultConfig { applicationId "de.varakh.fbmobile" minSdkVersion 16 - targetSdkVersion 31 + targetSdkVersion 33 versionCode flutterVersionCode.toInteger() versionName flutterVersionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/assets/i18n/en.json b/assets/i18n/en.json index 932425b..304ef77 100644 --- a/assets/i18n/en.json +++ b/assets/i18n/en.json @@ -105,6 +105,7 @@ "instance": "Instance", "connection": "{url}", "show_config": "Show configuration", + "show_config_loading": "Loading configuration...", "shown_config": { "title": "Configuration", "description": "Upload max size: {uploadMaxSize}\n\nMax files per request: {maxFilesPerRequest}\n\nMax inputs vars: {maxInputVars}\n\nRequest max size: {requestMaxSize}", diff --git a/lib/app.dart b/lib/app.dart index 20550ce..fc82abf 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -26,23 +26,21 @@ class MyApp extends StatelessWidget { state: LocalizationProvider.of(context).state, child: StreamProvider( initialData: null, - create: (context) => - locator().swipeEventController.stream, + create: (context) => locator().swipeEventController.stream, child: StreamProvider( initialData: null, - create: (context) => - locator().refreshEventController.stream, + create: (context) => locator().refreshEventController.stream, child: StreamProvider( initialData: Session.initial(), - create: (context) => - locator().sessionController.stream, + create: (context) => locator().sessionController.stream, child: LifeCycleManager( child: MaterialApp( + debugShowCheckedModeBanner: false, title: translate('app.title'), builder: (context, child) => Navigator( key: locator().dialogNavigationKey, - onGenerateRoute: (settings) => MaterialPageRoute( - builder: (context) => DialogManager(child: child)), + onGenerateRoute: (settings) => + MaterialPageRoute(builder: (context) => DialogManager(child: child)), ), theme: ThemeData( brightness: Brightness.light, diff --git a/lib/core/manager/lifecycle_manager.dart b/lib/core/manager/lifecycle_manager.dart index 1004beb..c28a95c 100644 --- a/lib/core/manager/lifecycle_manager.dart +++ b/lib/core/manager/lifecycle_manager.dart @@ -16,14 +16,10 @@ class LifeCycleManager extends StatefulWidget { _LifeCycleManagerState createState() => _LifeCycleManagerState(); } -class _LifeCycleManagerState extends State - with WidgetsBindingObserver { +class _LifeCycleManagerState extends State with WidgetsBindingObserver { final Logger logger = getLogger(); - List servicesToManage = [ - locator(), - locator() - ]; + List servicesToManage = [locator(), locator()]; @override Widget build(BuildContext context) { @@ -33,13 +29,13 @@ class _LifeCycleManagerState extends State @override void initState() { super.initState(); - WidgetsBinding.instance!.addObserver(this); + WidgetsBinding.instance.addObserver(this); } @override void dispose() { super.dispose(); - WidgetsBinding.instance!.removeObserver(this); + WidgetsBinding.instance.removeObserver(this); } @override diff --git a/lib/core/viewmodels/base_model.dart b/lib/core/viewmodels/base_model.dart index d36efc3..a8225ed 100644 --- a/lib/core/viewmodels/base_model.dart +++ b/lib/core/viewmodels/base_model.dart @@ -18,7 +18,37 @@ class BaseModel extends ChangeNotifier { String? get stateMessage => _stateMap[STATE_MESSAGE] as String?; - void setStateValue(String key, Object? stateValue) { + bool getStateValueAsBoolean(String key) { + if (_stateMap.containsKey(key) && _stateMap[key] is bool) { + return _stateMap[key] as bool; + } + + return false; + } + + String? getStateValueAsString(String key) { + if (_stateMap.containsKey(key) && _stateMap[key] is String) { + return _stateMap[key] as String; + } + + return null; + } + + int? getStateValueAsInt(String key) { + if (_stateMap.containsKey(key) && _stateMap[key] is int) { + return _stateMap[key] as int; + } + + return null; + } + + void setStateBoolValue(String key, bool stateValue) => _setStateValue(key, stateValue); + + void setStateIntValue(String key, int? stateValue) => _setStateValue(key, stateValue); + + void setStateStringValue(String key, String? stateValue) => _setStateValue(key, stateValue); + + void _setStateValue(String key, Object? stateValue) { if (_stateMap.containsKey(key)) { _stateMap.update(key, (value) => stateValue); } else { @@ -41,11 +71,11 @@ class BaseModel extends ChangeNotifier { } void setStateView(ViewState stateView) { - setStateValue(STATE_VIEW, stateView); + _setStateValue(STATE_VIEW, stateView); } void setStateMessage(String? stateMessage) { - setStateValue(STATE_MESSAGE, stateMessage); + _setStateValue(STATE_MESSAGE, stateMessage); } @override diff --git a/lib/core/viewmodels/profile_model.dart b/lib/core/viewmodels/profile_model.dart index 9fc1297..90708ab 100644 --- a/lib/core/viewmodels/profile_model.dart +++ b/lib/core/viewmodels/profile_model.dart @@ -6,7 +6,6 @@ import 'package:logger/logger.dart'; import '../../core/services/session_service.dart'; import '../../locator.dart'; import '../enums/error_code.dart'; -import '../enums/viewstate.dart'; import '../error/rest_service_exception.dart'; import '../error/service_exception.dart'; import '../models/rest/config.dart'; @@ -18,18 +17,21 @@ import '../util/logger.dart'; import 'base_model.dart'; class ProfileModel extends BaseModel { + static const _configurationButtonLoading = 'configurationButtonLoading'; + final SessionService _sessionService = locator(); final DialogService _dialogService = locator(); final LinkService _linkService = locator(); final FileService _fileService = locator(); final Logger _logger = getLogger(); + bool get configLoading => getStateValueAsBoolean(_configurationButtonLoading); + String? errorMessage; Future logout() async { var dialogResult = await _dialogService.showConfirmationDialog( - title: translate('logout.title'), - description: translate('logout.confirm')); + title: translate('logout.title'), description: translate('logout.confirm')); if (dialogResult.confirmed!) { await _sessionService.logout(); @@ -39,12 +41,11 @@ class ProfileModel extends BaseModel { Future revealApiKey(String? apiKey) async { await _dialogService.showDialog( title: translate('profile.revealed_api_key.title'), - description: translate('profile.revealed_api_key.description', - args: {'apiKey': apiKey})); + description: translate('profile.revealed_api_key.description', args: {'apiKey': apiKey})); } Future showConfig(String url) async { - setStateView(ViewState.Busy); + setStateBoolValue(_configurationButtonLoading, true); Config? config; try { config = await _fileService.getConfig(url); @@ -53,15 +54,13 @@ class ProfileModel extends BaseModel { if (e is RestServiceException) { if (e.statusCode == HttpStatus.unauthorized) { errorMessage = translate('login.errors.wrong_credentials'); - } else if (e.statusCode != HttpStatus.unauthorized && - e.statusCode == HttpStatus.forbidden) { + } else if (e.statusCode != HttpStatus.unauthorized && e.statusCode == HttpStatus.forbidden) { errorMessage = translate('login.errors.forbidden'); } else if (e.statusCode == HttpStatus.notFound) { errorMessage = translate('api.incompatible_error_not_found'); } if (e.statusCode == HttpStatus.badRequest) { - errorMessage = translate('api.bad_request', - args: {'reason': e.responseBody.message}); + errorMessage = translate('api.bad_request', args: {'reason': e.responseBody.message}); } else { errorMessage = translate('api.general_rest_error'); } @@ -71,32 +70,29 @@ class ProfileModel extends BaseModel { errorMessage = translate('api.socket_timeout'); } else { errorMessage = translate('app.unknown_error'); - setStateView(ViewState.Idle); + setStateBoolValue(_configurationButtonLoading, false); _sessionService.logout(); - setStateView(ViewState.Idle); + setStateBoolValue(_configurationButtonLoading, false); _logger.e('An unknown error occurred', e); throw e; } } - setStateView(ViewState.Idle); + setStateBoolValue(_configurationButtonLoading, false); if (config != null && errorMessage == null) { await _dialogService.showDialog( title: translate('profile.shown_config.title'), description: translate('profile.shown_config.description', args: { - 'uploadMaxSize': - FormatterUtil.formatBytes(config.uploadMaxSize as int, 2), + 'uploadMaxSize': FormatterUtil.formatBytes(config.uploadMaxSize as int, 2), 'maxFilesPerRequest': config.maxFilesPerRequest, 'maxInputVars': config.maxInputVars, - 'requestMaxSize': - FormatterUtil.formatBytes(config.requestMaxSize as int, 2) + 'requestMaxSize': FormatterUtil.formatBytes(config.requestMaxSize as int, 2) })); } else { await _dialogService.showDialog( title: translate('profile.shown_config.error.title'), - description: translate('profile.shown_config.error.description', - args: {'message': errorMessage})); + description: translate('profile.shown_config.error.description', args: {'message': errorMessage})); } } diff --git a/lib/core/viewmodels/upload_model.dart b/lib/core/viewmodels/upload_model.dart index 5f12980..67b7acd 100644 --- a/lib/core/viewmodels/upload_model.dart +++ b/lib/core/viewmodels/upload_model.dart @@ -51,12 +51,11 @@ class UploadModel extends BaseModel { void init() { _pasteTextController.addListener(() { pasteTextTouched = pasteTextController.text.isNotEmpty; - setStateValue("PASTE_TEXT_TOUCHED", pasteTextTouched); + setStateBoolValue("PASTE_TEXT_TOUCHED", pasteTextTouched); }); // For sharing images coming from outside the app while the app is in the memory - _intentDataStreamSubscription = ReceiveSharingIntent.getMediaStream() - .listen((List value) { + _intentDataStreamSubscription = ReceiveSharingIntent.getMediaStream().listen((List value) { if (value.length > 0) { setStateView(ViewState.Busy); paths = value.map((sharedFile) { @@ -98,8 +97,7 @@ class UploadModel extends BaseModel { }); // For sharing or opening urls/text coming from outside the app while the app is in the memory - _intentDataStreamSubscription = - ReceiveSharingIntent.getTextStream().listen((String value) { + _intentDataStreamSubscription = ReceiveSharingIntent.getTextStream().listen((String value) { if (value.isNotEmpty) { setStateView(ViewState.Busy); pasteTextController.text = value; @@ -167,9 +165,7 @@ class UploadModel extends BaseModel { allowMultiple: true, withData: false, withReadStream: true, - allowedExtensions: (_extension?.isNotEmpty ?? false) - ? _extension?.replaceAll(' ', '').split(',') - : null, + allowedExtensions: (_extension?.isNotEmpty ?? false) ? _extension?.replaceAll(' ', '').split(',') : null, )) ?.files; } on PlatformException catch (e) { @@ -204,25 +200,21 @@ class UploadModel extends BaseModel { Map? additionalFiles; if (pasteTextController.text.isNotEmpty) { - additionalFiles = Map.from({ - 'paste-${(new DateTime.now().millisecondsSinceEpoch / 1000).round()}.txt': - pasteTextController.text - }); + additionalFiles = Map.from( + {'paste-${(new DateTime.now().millisecondsSinceEpoch / 1000).round()}.txt': pasteTextController.text}); } if (paths != null && paths!.length > 0) { files = paths!.map((e) => new File(e.path!)).toList(); } - UploadedResponse response = - await _fileService.uploadPaste(files, additionalFiles); + UploadedResponse response = await _fileService.uploadPaste(files, additionalFiles); response.data.ids.forEach((element) { uploadedPasteIds.putIfAbsent(element, () => false); }); if (createMulti && response.data.ids.length > 1) { - UploadedMultiResponse multiResponse = - await _fileService.uploadMultiPaste(response.data.ids); + UploadedMultiResponse multiResponse = await _fileService.uploadMultiPaste(response.data.ids); uploadedPasteIds.putIfAbsent(multiResponse.data.urlId, () => true); } @@ -242,11 +234,9 @@ class UploadModel extends BaseModel { e.responseBody is RestError && e.responseBody.message != null) { if (e.statusCode == HttpStatus.badRequest) { - errorMessage = translate('api.bad_request', - args: {'reason': e.responseBody.message}); + errorMessage = translate('api.bad_request', args: {'reason': e.responseBody.message}); } else { - errorMessage = translate('api.general_rest_error_payload', - args: {'message': e.responseBody.message}); + errorMessage = translate('api.general_rest_error_payload', args: {'message': e.responseBody.message}); } } else { errorMessage = translate('api.general_rest_error'); diff --git a/lib/main.dart b/lib/main.dart index 4d4cdb6..1db3d2c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -9,10 +9,10 @@ import 'locator.dart'; /// main entry point used to configure log level, locales, ... void main() async { setupLogger(Level.info); - // setupLogger(Level.debug); setupLocator(); - var delegate = await LocalizationDelegate.create(fallbackLocale: 'en', supportedLocales: ['en']); + var delegate = await LocalizationDelegate.create(fallbackLocale: 'en', supportedLocales: ['en', 'en_US']); + WidgetsFlutterBinding.ensureInitialized(); runApp(LocalizedApp(delegate, MyApp())); } diff --git a/lib/ui/views/profile_view.dart b/lib/ui/views/profile_view.dart index 27be973..22c2eee 100644 --- a/lib/ui/views/profile_view.dart +++ b/lib/ui/views/profile_view.dart @@ -53,15 +53,26 @@ class ProfileView extends StatelessWidget { UIHelper.verticalSpaceMedium(), Padding( padding: const EdgeInsets.only(left: 25.0, right: 25.0), - child: ElevatedButton.icon( - icon: Icon(Icons.settings, color: blueColor), - label: Text( - translate('profile.show_config'), - style: TextStyle(color: buttonForegroundColor), - ), - onPressed: () async { - await model.showConfig(url); - })), + child: model.configLoading + ? Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CircularProgressIndicator(), + Text(translate('profile.show_config_loading'), + style: TextStyle(color: buttonBackgroundColor)) + ], + )) + : ElevatedButton.icon( + icon: Icon(Icons.settings, color: blueColor), + label: Text( + translate('profile.show_config'), + style: TextStyle(color: buttonForegroundColor), + ), + onPressed: () async { + await model.showConfig(url); + })), UIHelper.verticalSpaceMedium(), Padding( padding: const EdgeInsets.only(left: 25.0, right: 25.0), diff --git a/lib/ui/views/tabbar_authenticated.dart b/lib/ui/views/tabbar_authenticated.dart index 9b08c01..2259dd9 100644 --- a/lib/ui/views/tabbar_authenticated.dart +++ b/lib/ui/views/tabbar_authenticated.dart @@ -19,8 +19,7 @@ class AuthenticatedTabBarView extends StatefulWidget { AuthenticatedTabBarState createState() => AuthenticatedTabBarState(); } -class AuthenticatedTabBarState extends State - with SingleTickerProviderStateMixin { +class AuthenticatedTabBarState extends State with SingleTickerProviderStateMixin { final Logger _logger = getLogger(); final SwipeService _swipeService = locator(); @@ -51,8 +50,7 @@ class AuthenticatedTabBarState extends State } }); - _swipeEventSubscription = - _swipeService.swipeEventController.stream.listen((SwipeEvent event) { + _swipeEventSubscription = _swipeService.swipeEventController.stream.listen((SwipeEvent event) { _logger.d('Received a swipe event for the authenticated tab bar: $event'); int targetIndex = _currentTabIndex; @@ -72,8 +70,7 @@ class AuthenticatedTabBarState extends State targetIndex = _tabPages.length - 1; } - _logger.d( - "Changing to tab '$targetIndex' because of a swipe event '$event'"); + _logger.d("Changing to tab '$targetIndex' because of a swipe event '$event'"); _tabController!.animateTo(targetIndex); }); } @@ -91,12 +88,9 @@ class AuthenticatedTabBarState extends State double yourWidth = width / 3; double yourHeight = 55; - Color colorTabItem0 = - _currentTabIndex == 0 ? blueColor : primaryAccentColor; - Color colorTabItem1 = - _currentTabIndex == 1 ? blueColor : primaryAccentColor; - Color colorTabItem2 = - _currentTabIndex == 2 ? blueColor : primaryAccentColor; + Color colorTabItem0 = _currentTabIndex == 0 ? blueColor : primaryAccentColor; + Color colorTabItem1 = _currentTabIndex == 1 ? blueColor : primaryAccentColor; + Color colorTabItem2 = _currentTabIndex == 2 ? blueColor : primaryAccentColor; List _tabsButton = [ Container( @@ -105,13 +99,10 @@ class AuthenticatedTabBarState extends State alignment: Alignment.center, child: Tab( icon: Icon( - _currentTabIndex == 0 - ? Icons.upload_outlined - : Icons.upload_rounded, + _currentTabIndex == 0 ? Icons.upload_outlined : Icons.upload_rounded, color: colorTabItem0, ), - child: Text(translate('tabs.upload'), - style: TextStyle(color: colorTabItem0)), + child: Text(translate('tabs.upload'), style: TextStyle(color: colorTabItem0)), ), ), Container( @@ -120,13 +111,10 @@ class AuthenticatedTabBarState extends State alignment: Alignment.center, child: Tab( icon: Icon( - _currentTabIndex == 1 - ? Icons.history_outlined - : Icons.history_rounded, + _currentTabIndex == 1 ? Icons.history_outlined : Icons.history_rounded, color: colorTabItem1, ), - child: Text(translate('tabs.history'), - style: TextStyle(color: colorTabItem1)), + child: Text(translate('tabs.history'), style: TextStyle(color: colorTabItem1)), ), ), Container( @@ -135,13 +123,10 @@ class AuthenticatedTabBarState extends State alignment: Alignment.center, child: Tab( icon: Icon( - _currentTabIndex == 2 - ? Icons.person_outlined - : Icons.person_rounded, + _currentTabIndex == 2 ? Icons.person_outlined : Icons.person_rounded, color: colorTabItem2, ), - child: Text(translate('tabs.profile'), - style: TextStyle(color: colorTabItem2)), + child: Text(translate('tabs.profile'), style: TextStyle(color: colorTabItem2)), ), ), ]; diff --git a/lib/ui/widgets/my_appbar.dart b/lib/ui/widgets/my_appbar.dart index 85cae97..9fc52f6 100644 --- a/lib/ui/widgets/my_appbar.dart +++ b/lib/ui/widgets/my_appbar.dart @@ -8,11 +8,7 @@ class MyAppBar extends AppBar { static final List aboutEnabledWidgets = [AboutIconButton()]; static final List aboutDisabledWidgets = []; - MyAppBar( - {Key? key, - required Widget title, - List? actionWidgets, - bool enableAbout = true}) + MyAppBar({Key? key, required Widget title, List? actionWidgets, bool enableAbout = true}) : super( key: key, title: Row(children: [title]), @@ -23,8 +19,7 @@ class MyAppBar extends AppBar { ), backgroundColor: primaryAccentColor); - static List _renderIconButtons( - List? actionWidgets, bool aboutEnabled) { + static List _renderIconButtons(List? actionWidgets, bool aboutEnabled) { if (actionWidgets == null) { actionWidgets = []; } diff --git a/pubspec.lock b/pubspec.lock index 68757b0..8e05154 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -7,21 +7,21 @@ packages: name: _fe_analyzer_shared url: "https://pub.dartlang.org" source: hosted - version: "39.0.0" + version: "40.0.0" analyzer: dependency: transitive description: name: analyzer url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.1.0" args: dependency: transitive description: name: args url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.3.1" async: dependency: transitive description: @@ -63,14 +63,14 @@ packages: name: build_resolvers url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.9" build_runner: dependency: "direct dev" description: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.10" + version: "2.1.11" build_runner_core: dependency: transitive description: @@ -91,14 +91,14 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.2.3" + version: "8.3.3" built_value_generator: dependency: "direct dev" description: name: built_value_generator url: "https://pub.dartlang.org" source: hosted - version: "8.2.3" + version: "8.3.3" characters: dependency: transitive description: @@ -147,14 +147,14 @@ packages: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.15.0" + version: "1.16.0" convert: dependency: transitive description: name: convert url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" crypto: dependency: transitive description: @@ -168,7 +168,7 @@ packages: name: cupertino_icons url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "1.0.5" dart_style: dependency: transitive description: @@ -189,14 +189,14 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.0" ffi: dependency: transitive description: name: ffi url: "https://pub.dartlang.org" source: hosted - version: "1.1.2" + version: "1.2.1" file: dependency: transitive description: @@ -210,14 +210,14 @@ packages: name: file_picker url: "https://pub.dartlang.org" source: hosted - version: "4.5.1" + version: "4.6.1" fixnum: dependency: transitive description: name: fixnum url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.1" flutter: dependency: "direct main" description: flutter @@ -241,7 +241,7 @@ packages: name: flutter_plugin_android_lifecycle url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.6" flutter_test: dependency: "direct dev" description: flutter @@ -253,7 +253,7 @@ packages: name: flutter_translate url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.1.0" flutter_web_plugins: dependency: transitive description: flutter @@ -265,7 +265,7 @@ packages: name: frontend_server_client url: "https://pub.dartlang.org" source: hosted - version: "2.1.2" + version: "2.1.3" get_it: dependency: "direct main" description: @@ -279,7 +279,7 @@ packages: name: glob url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" graphs: dependency: transitive description: @@ -300,14 +300,14 @@ packages: name: http_multi_server url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "3.2.1" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "4.0.0" + version: "4.0.1" intl: dependency: transitive description: @@ -328,7 +328,7 @@ packages: name: js url: "https://pub.dartlang.org" source: hosted - version: "0.6.3" + version: "0.6.4" json_annotation: dependency: "direct main" description: @@ -377,7 +377,7 @@ packages: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.3" + version: "0.1.4" meta: dependency: transitive description: @@ -405,7 +405,7 @@ packages: name: package_config url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.1.0" package_info_plus: dependency: "direct main" description: @@ -454,42 +454,42 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.8.1" path_provider_linux: dependency: transitive description: name: path_provider_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.1.7" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" path_provider_windows: dependency: transitive description: name: path_provider_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.7" permission_handler: dependency: "direct main" description: name: permission_handler url: "https://pub.dartlang.org" source: hosted - version: "9.2.0" + version: "10.0.0" permission_handler_android: dependency: transitive description: name: permission_handler_android url: "https://pub.dartlang.org" source: hosted - version: "9.0.2+1" + version: "10.0.0" permission_handler_apple: dependency: transitive description: @@ -531,7 +531,7 @@ packages: name: pool url: "https://pub.dartlang.org" source: hosted - version: "1.5.0" + version: "1.5.1" process: dependency: transitive description: @@ -545,7 +545,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "6.0.2" + version: "6.0.3" pub_semver: dependency: transitive description: @@ -566,7 +566,7 @@ packages: name: quiver url: "https://pub.dartlang.org" source: hosted - version: "3.0.1+1" + version: "3.1.0" receive_sharing_intent: dependency: "direct main" description: @@ -580,7 +580,7 @@ packages: name: share_plus url: "https://pub.dartlang.org" source: hosted - version: "4.0.4" + version: "4.0.9" share_plus_linux: dependency: transitive description: @@ -594,63 +594,63 @@ packages: name: share_plus_macos url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.0.3" share_plus_web: dependency: transitive description: name: share_plus_web url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" share_plus_windows: dependency: transitive description: name: share_plus_windows url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" shared_preferences: dependency: "direct main" description: name: shared_preferences url: "https://pub.dartlang.org" source: hosted - version: "2.0.13" + version: "2.0.15" shared_preferences_android: dependency: transitive description: name: shared_preferences_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.12" shared_preferences_ios: dependency: transitive description: name: shared_preferences_ios url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" shared_preferences_platform_interface: dependency: transitive description: @@ -664,28 +664,28 @@ packages: name: shared_preferences_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "2.0.4" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" shelf: dependency: transitive description: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket url: "https://pub.dartlang.org" source: hosted - version: "1.0.1" + version: "1.0.2" simple_gesture_detector: dependency: "direct main" description: @@ -718,7 +718,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -732,7 +732,14 @@ packages: name: stacked url: "https://pub.dartlang.org" source: hosted - version: "2.3.3" + version: "2.3.12" + stacked_core: + dependency: transitive + description: + name: stacked_core + url: "https://pub.dartlang.org" + source: hosted + version: "1.2.3" stream_channel: dependency: transitive description: @@ -767,7 +774,7 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.8" + version: "0.4.9" timing: dependency: transitive description: @@ -781,7 +788,7 @@ packages: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" universal_io: dependency: transitive description: @@ -795,56 +802,56 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "6.1.4" url_launcher_android: dependency: transitive description: name: url_launcher_android url: "https://pub.dartlang.org" source: hosted - version: "6.0.16" + version: "6.0.17" url_launcher_ios: dependency: transitive description: name: url_launcher_ios url: "https://pub.dartlang.org" source: hosted - version: "6.0.15" + version: "6.0.17" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.1.0" url_launcher_web: dependency: transitive description: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.12" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "3.0.0" + version: "3.0.1" validators: dependency: "direct main" description: @@ -858,7 +865,7 @@ packages: name: vector_math url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" watcher: dependency: transitive description: @@ -879,7 +886,7 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.5.2" + version: "2.6.1" xdg_directories: dependency: transitive description: @@ -893,7 +900,7 @@ packages: name: yaml url: "https://pub.dartlang.org" source: hosted - version: "3.1.0" + version: "3.1.1" sdks: - dart: ">=2.16.2 <3.0.0" + dart: ">=2.17.3 <3.0.0" flutter: ">=2.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index 675ffc9..cf68076 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,30 +14,30 @@ description: A mobile client for FileBin. version: 1.4.3+16 environment: - sdk: '>=2.16.2 <3.0.0' + sdk: '>=2.17.3 <3.0.0' dependencies: flutter: sdk: flutter - cupertino_icons: 1.0.4 + cupertino_icons: 1.0.5 flutter_localizations: sdk: flutter - flutter_translate: 3.0.1 - provider: 6.0.2 - stacked: 2.3.3 + flutter_translate: 3.1.0 # > 3.x breaks with WidgetBinding, wait for dependency update + provider: 6.0.3 + stacked: 2.3.12 get_it: 7.2.0 logger: 1.1.0 - shared_preferences: 2.0.13 + shared_preferences: 2.0.15 http: 0.13.4 validators: 3.0.0 flutter_linkify: 5.0.2 - url_launcher: 6.1.0 + url_launcher: 6.1.4 expandable: 5.0.1 - share_plus: 4.0.4 - file_picker: 4.5.1 + share_plus: 4.0.9 + file_picker: 4.6.1 clipboard: 0.1.3 receive_sharing_intent: 1.4.5 - permission_handler: 9.2.0 + permission_handler: 10.0.0 package_info_plus: 1.4.2 simple_gesture_detector: 0.2.0 json_annotation: 4.5.0 @@ -45,8 +45,8 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - build_runner: 2.1.10 - built_value_generator: ^8.2.3 + build_runner: 2.1.11 + built_value_generator: 8.3.3 json_serializable: 6.2.0 # For information on the generic Dart part of this file, see the