diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 736aaf3..5209951 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,85 +1,37 @@ PODS: - - DKImagePickerController/Core (4.3.2): - - DKImagePickerController/ImageDataManager - - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.2) - - DKImagePickerController/PhotoGallery (4.3.2): - - DKImagePickerController/Core - - DKPhotoGallery - - DKImagePickerController/Resource (4.3.2) - - DKPhotoGallery (0.0.17): - - DKPhotoGallery/Core (= 0.0.17) - - DKPhotoGallery/Model (= 0.0.17) - - DKPhotoGallery/Preview (= 0.0.17) - - DKPhotoGallery/Resource (= 0.0.17) - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Core (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Preview - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Model (0.0.17): - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Preview (0.0.17): - - DKPhotoGallery/Model - - DKPhotoGallery/Resource - - SDWebImage - - SwiftyGif - - DKPhotoGallery/Resource (0.0.17): - - SDWebImage - - SwiftyGif - - file_picker (0.0.1): - - DKImagePickerController/PhotoGallery - - Flutter - Flutter (1.0.0) - flutter_keyboard_visibility (0.0.1): - Flutter - - image_picker (0.0.1): + - image_picker_ios (0.0.1): - Flutter - package_info_plus (0.4.5): - Flutter - path_provider_ios (0.0.1): - Flutter - - SDWebImage (5.12.2): - - SDWebImage/Core (= 5.12.2) - - SDWebImage/Core (5.12.2) - share_plus (0.0.1): - Flutter - shared_preferences_ios (0.0.1): - Flutter - - SwiftyGif (5.4.2) - url_launcher_ios (0.0.1): - Flutter DEPENDENCIES: - - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) - flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`) - - image_picker (from `.symlinks/plugins/image_picker/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) -SPEC REPOS: - trunk: - - DKImagePickerController - - DKPhotoGallery - - SDWebImage - - SwiftyGif - EXTERNAL SOURCES: - file_picker: - :path: ".symlinks/plugins/file_picker/ios" Flutter: :path: Flutter flutter_keyboard_visibility: :path: ".symlinks/plugins/flutter_keyboard_visibility/ios" - image_picker: - :path: ".symlinks/plugins/image_picker/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_ios: @@ -92,20 +44,15 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - DKImagePickerController: b5eb7f7a388e4643264105d648d01f727110fc3d - DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 - file_picker: 3e6c3790de664ccf9b882732d9db5eaf6b8d4eb1 Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069 - image_picker: 9aa50e1d8cdacdbed739e925b7eea16d014367e6 + image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e - path_provider_ios: 7d7ce634493af4477d156294792024ec3485acd5 - SDWebImage: 240e5c12b592fb1268c1d03b8c90d90e8c2ffe82 + path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: aef470a42dc4675a1cdd50e3158b42e3d1232b32 - SwiftyGif: dec758a9dd3d278e5a855dbf279bf062c923c387 - url_launcher_ios: 02f1989d4e14e998335b02b67a7590fa34f971af + shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad + url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c -COCOAPODS: 1.11.2 +COCOAPODS: 1.11.3 diff --git a/lib/pages/communities_tab.dart b/lib/pages/communities_tab.dart index f3b9782..3aca777 100644 --- a/lib/pages/communities_tab.dart +++ b/lib/pages/communities_tab.dart @@ -1,5 +1,6 @@ import 'dart:async'; +import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:fuzzy/fuzzy.dart'; @@ -112,8 +113,11 @@ class CommunitiesTab extends HookWidget { final instances = instancesRefreshable.snapshot.data!; final communities = communitiesRefreshable.snapshot.data! - ..forEach((e) => - e.sort((a, b) => a.community.name.compareTo(b.community.name))); + .map( + (e) => + e.sorted((a, b) => a.community.name.compareTo(b.community.name)), + ) + .toList(); final filterIcon = () { if (filterController.text.isEmpty) { diff --git a/lib/pages/community/community_more_menu.dart b/lib/pages/community/community_more_menu.dart index a9b464e..eb241b3 100644 --- a/lib/pages/community/community_more_menu.dart +++ b/lib/pages/community/community_more_menu.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../../hooks/logged_in_action.dart'; +import '../../url_launcher.dart'; import '../../util/extensions/api.dart'; import '../../util/mobx_provider.dart'; import '../../util/observer_consumers.dart'; @@ -28,10 +28,10 @@ class CommunityMoreMenu extends HookWidget { ListTile( leading: const Icon(Icons.open_in_browser), title: const Text('Open in browser'), - onTap: () async => await ul.canLaunch(communityView.community.actorId) - ? ul.launch(communityView.community.actorId) - : ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text("can't open in browser"))), + onTap: () => launchLink( + link: communityView.community.actorId, + context: context, + ), ), ObserverBuilder(builder: (context, store) { return ListTile( diff --git a/lib/pages/community/community_store.g.dart b/lib/pages/community/community_store.g.dart index 586bf1d..bba012e 100644 --- a/lib/pages/community/community_store.g.dart +++ b/lib/pages/community/community_store.g.dart @@ -9,14 +9,16 @@ part of 'community_store.dart'; // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$CommunityStore on _CommunityStore, Store { - final _$refreshAsyncAction = AsyncAction('_CommunityStore.refresh'); + late final _$refreshAsyncAction = + AsyncAction('_CommunityStore.refresh', context: context); @override Future refresh(Jwt? token) { return _$refreshAsyncAction.run(() => super.refresh(token)); } - final _$subscribeAsyncAction = AsyncAction('_CommunityStore.subscribe'); + late final _$subscribeAsyncAction = + AsyncAction('_CommunityStore.subscribe', context: context); @override Future subscribe(Jwt token) { diff --git a/lib/pages/full_post/full_post_store.g.dart b/lib/pages/full_post/full_post_store.g.dart index 67eed9a..ed533af 100644 --- a/lib/pages/full_post/full_post_store.g.dart +++ b/lib/pages/full_post/full_post_store.g.dart @@ -38,7 +38,8 @@ mixin _$FullPostStore on _FullPostStore, Store { name: '_FullPostStore.comments')) .value; - final _$fullPostViewAtom = Atom(name: '_FullPostStore.fullPostView'); + late final _$fullPostViewAtom = + Atom(name: '_FullPostStore.fullPostView', context: context); @override FullPostView? get fullPostView { @@ -53,7 +54,8 @@ mixin _$FullPostStore on _FullPostStore, Store { }); } - final _$newCommentsAtom = Atom(name: '_FullPostStore.newComments'); + late final _$newCommentsAtom = + Atom(name: '_FullPostStore.newComments', context: context); @override ObservableList get newComments { @@ -68,7 +70,8 @@ mixin _$FullPostStore on _FullPostStore, Store { }); } - final _$sortingAtom = Atom(name: '_FullPostStore.sorting'); + late final _$sortingAtom = + Atom(name: '_FullPostStore.sorting', context: context); @override CommentSortType get sorting { @@ -83,7 +86,8 @@ mixin _$FullPostStore on _FullPostStore, Store { }); } - final _$postStoreAtom = Atom(name: '_FullPostStore.postStore'); + late final _$postStoreAtom = + Atom(name: '_FullPostStore.postStore', context: context); @override PostStore? get postStore { @@ -98,23 +102,24 @@ mixin _$FullPostStore on _FullPostStore, Store { }); } - final _$refreshAsyncAction = AsyncAction('_FullPostStore.refresh'); + late final _$refreshAsyncAction = + AsyncAction('_FullPostStore.refresh', context: context); @override Future refresh([Jwt? token]) { return _$refreshAsyncAction.run(() => super.refresh(token)); } - final _$blockCommunityAsyncAction = - AsyncAction('_FullPostStore.blockCommunity'); + late final _$blockCommunityAsyncAction = + AsyncAction('_FullPostStore.blockCommunity', context: context); @override Future blockCommunity(Jwt token) { return _$blockCommunityAsyncAction.run(() => super.blockCommunity(token)); } - final _$_FullPostStoreActionController = - ActionController(name: '_FullPostStore'); + late final _$_FullPostStoreActionController = + ActionController(name: '_FullPostStore', context: context); @override void updateSorting(CommentSortType sort) { diff --git a/lib/pages/instance/instance_more_menu.dart b/lib/pages/instance/instance_more_menu.dart index c1bb877..eee6fda 100644 --- a/lib/pages/instance/instance_more_menu.dart +++ b/lib/pages/instance/instance_more_menu.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../../l10n/l10n.dart'; import '../../stores/accounts_store.dart'; +import '../../url_launcher.dart'; import '../../util/observer_consumers.dart'; import '../../widgets/bottom_modal.dart'; import '../../widgets/info_table_popup.dart'; @@ -37,17 +37,7 @@ class InstanceMoreMenu extends StatelessWidget { ListTile( leading: const Icon(Icons.open_in_browser), title: Text(L10n.of(context).open_in_browser), - onTap: () async { - if (await ul.canLaunch(instanceUrl)) { - await ul.launch(instanceUrl); - } else { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(L10n.of(context).cannot_open_in_browser), - ), - ); - } - }, + onTap: () => launchLink(link: instanceUrl, context: context), ), ListTile( leading: const Icon(Icons.info_outline), diff --git a/lib/pages/instance/instance_store.g.dart b/lib/pages/instance/instance_store.g.dart index 83d7c1d..7dcadb0 100644 --- a/lib/pages/instance/instance_store.g.dart +++ b/lib/pages/instance/instance_store.g.dart @@ -9,15 +9,16 @@ part of 'instance_store.dart'; // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$InstanceStore on _InstanceStore, Store { - final _$fetchAsyncAction = AsyncAction('_InstanceStore.fetch'); + late final _$fetchAsyncAction = + AsyncAction('_InstanceStore.fetch', context: context); @override Future fetch(Jwt? token, {bool refresh = false}) { return _$fetchAsyncAction.run(() => super.fetch(token, refresh: refresh)); } - final _$fetchCommunitesAsyncAction = - AsyncAction('_InstanceStore.fetchCommunites'); + late final _$fetchCommunitesAsyncAction = + AsyncAction('_InstanceStore.fetchCommunites', context: context); @override Future fetchCommunites(Jwt? token, {bool refresh = false}) { diff --git a/lib/pages/log_console/log_console_page_store.g.dart b/lib/pages/log_console/log_console_page_store.g.dart index c7fc5e7..c146648 100644 --- a/lib/pages/log_console/log_console_page_store.g.dart +++ b/lib/pages/log_console/log_console_page_store.g.dart @@ -9,8 +9,8 @@ part of 'log_console_page_store.dart'; // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$LogConsolePageStore on _LogConsolePageStore, Store { - final _$_LogConsolePageStoreActionController = - ActionController(name: '_LogConsolePageStore'); + late final _$_LogConsolePageStoreActionController = + ActionController(name: '_LogConsolePageStore', context: context); @override void addLog(LogRecord logRecord) { diff --git a/lib/pages/manage_account.dart b/lib/pages/manage_account.dart index 6cd017d..60871eb 100644 --- a/lib/pages/manage_account.dart +++ b/lib/pages/manage_account.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:lemmy_api_client/pictrs.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../hooks/delayed_loading.dart'; import '../hooks/stores.dart'; import '../l10n/l10n.dart'; +import '../url_launcher.dart'; import '../util/files.dart'; import '../util/icons.dart'; import '../util/pictrs.dart'; @@ -47,13 +47,12 @@ class ManageAccountPage extends HookWidget { final userProfileUrl = await userFuture.then((e) => e.person.actorId); - if (await ul.canLaunch(userProfileUrl)) { - await ul.launch(userProfileUrl); + final didLaunch = await launchLink( + link: userProfileUrl, + context: context, + ); + if (didLaunch) { Navigator.of(context).pop(); - } else { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text("can't open in browser")), - ); } }, ), diff --git a/lib/pages/modlog/modlog_page_store.g.dart b/lib/pages/modlog/modlog_page_store.g.dart index bbd6216..9643bb8 100644 --- a/lib/pages/modlog/modlog_page_store.g.dart +++ b/lib/pages/modlog/modlog_page_store.g.dart @@ -24,7 +24,7 @@ mixin _$ModlogPageStore on _ModlogPageStore, Store { name: '_ModlogPageStore.hasNextPage')) .value; - final _$pageAtom = Atom(name: '_ModlogPageStore.page'); + late final _$pageAtom = Atom(name: '_ModlogPageStore.page', context: context); @override int get page { @@ -39,15 +39,16 @@ mixin _$ModlogPageStore on _ModlogPageStore, Store { }); } - final _$fetchPageAsyncAction = AsyncAction('_ModlogPageStore.fetchPage'); + late final _$fetchPageAsyncAction = + AsyncAction('_ModlogPageStore.fetchPage', context: context); @override Future fetchPage() { return _$fetchPageAsyncAction.run(() => super.fetchPage()); } - final _$_ModlogPageStoreActionController = - ActionController(name: '_ModlogPageStore'); + late final _$_ModlogPageStoreActionController = + ActionController(name: '_ModlogPageStore', context: context); @override void previousPage() { diff --git a/lib/pages/settings/add_account_page.dart b/lib/pages/settings/add_account_page.dart index aeccfd7..636fadc 100644 --- a/lib/pages/settings/add_account_page.dart +++ b/lib/pages/settings/add_account_page.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:lemmy_api_client/v3.dart'; import 'package:provider/provider.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../../hooks/delayed_loading.dart'; import '../../hooks/stores.dart'; import '../../l10n/l10n.dart'; import '../../stores/accounts_store.dart'; import '../../stores/config_store.dart'; +import '../../url_launcher.dart'; import '../../widgets/cached_network_image.dart'; import '../../widgets/fullscreenable_image.dart'; import '../../widgets/radio_picker.dart'; @@ -173,8 +173,11 @@ class AddAccountPage extends HookWidget { ), TextButton( onPressed: () { - // TODO: extract to LemmyUrls or something - ul.launch('https://${selectedInstance.value}/login'); + launchLink( + // TODO: extract to LemmyUrls or something + link: 'https://${selectedInstance.value}/login', + context: context, + ); }, child: const Text('Register'), ), diff --git a/lib/pages/settings/blocks/blocks_store.g.dart b/lib/pages/settings/blocks/blocks_store.g.dart index b344023..dd380c0 100644 --- a/lib/pages/settings/blocks/blocks_store.g.dart +++ b/lib/pages/settings/blocks/blocks_store.g.dart @@ -32,7 +32,8 @@ mixin _$BlocksStore on _BlocksStore, Store { Computed(() => super.isUsable, name: '_BlocksStore.isUsable')) .value; - final _$_blockedUsersAtom = Atom(name: '_BlocksStore._blockedUsers'); + late final _$_blockedUsersAtom = + Atom(name: '_BlocksStore._blockedUsers', context: context); @override ObservableList? get _blockedUsers { @@ -47,8 +48,8 @@ mixin _$BlocksStore on _BlocksStore, Store { }); } - final _$_blockedCommunitiesAtom = - Atom(name: '_BlocksStore._blockedCommunities'); + late final _$_blockedCommunitiesAtom = + Atom(name: '_BlocksStore._blockedCommunities', context: context); @override ObservableList? get _blockedCommunities { @@ -63,15 +64,16 @@ mixin _$BlocksStore on _BlocksStore, Store { }); } - final _$blockUserAsyncAction = AsyncAction('_BlocksStore.blockUser'); + late final _$blockUserAsyncAction = + AsyncAction('_BlocksStore.blockUser', context: context); @override Future blockUser(Jwt token, int id) { return _$blockUserAsyncAction.run(() => super.blockUser(token, id)); } - final _$blockCommunityAsyncAction = - AsyncAction('_BlocksStore.blockCommunity'); + late final _$blockCommunityAsyncAction = + AsyncAction('_BlocksStore.blockCommunity', context: context); @override Future blockCommunity(Jwt token, int id) { @@ -79,7 +81,8 @@ mixin _$BlocksStore on _BlocksStore, Store { .run(() => super.blockCommunity(token, id)); } - final _$refreshAsyncAction = AsyncAction('_BlocksStore.refresh'); + late final _$refreshAsyncAction = + AsyncAction('_BlocksStore.refresh', context: context); @override Future refresh() { diff --git a/lib/pages/settings/blocks/community_block_store.g.dart b/lib/pages/settings/blocks/community_block_store.g.dart index add31db..da6b641 100644 --- a/lib/pages/settings/blocks/community_block_store.g.dart +++ b/lib/pages/settings/blocks/community_block_store.g.dart @@ -9,7 +9,8 @@ part of 'community_block_store.dart'; // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$CommunityBlockStore on _CommunityBlockStore, Store { - final _$blockedAtom = Atom(name: '_CommunityBlockStore.blocked'); + late final _$blockedAtom = + Atom(name: '_CommunityBlockStore.blocked', context: context); @override bool get blocked { diff --git a/lib/pages/settings/blocks/user_block_store.g.dart b/lib/pages/settings/blocks/user_block_store.g.dart index 3e54606..c7a9ed6 100644 --- a/lib/pages/settings/blocks/user_block_store.g.dart +++ b/lib/pages/settings/blocks/user_block_store.g.dart @@ -9,7 +9,8 @@ part of 'user_block_store.dart'; // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$UserBlockStore on _UserBlockStore, Store { - final _$blockedAtom = Atom(name: '_UserBlockStore.blocked'); + late final _$blockedAtom = + Atom(name: '_UserBlockStore.blocked', context: context); @override bool get blocked { diff --git a/lib/resources/links.dart b/lib/resources/links.dart index 9ee9233..ed26356 100644 --- a/lib/resources/links.dart +++ b/lib/resources/links.dart @@ -1 +1,3 @@ -const lemmurRepositoryLink = 'https://github.com/LemmurOrg/lemmur'; +const lemmurRepositoryUrl = 'https://github.com/LemmurOrg/lemmur'; +const patreonUrl = 'https://patreon.com/lemmur'; +const buyMeACoffeeUrl = 'https://buymeacoff.ee/lemmur'; diff --git a/lib/stores/config_store.g.dart b/lib/stores/config_store.g.dart index cfd865b..dde6b99 100644 --- a/lib/stores/config_store.g.dart +++ b/lib/stores/config_store.g.dart @@ -41,7 +41,7 @@ const _$ThemeModeEnumMap = { // ignore_for_file: non_constant_identifier_names, unnecessary_brace_in_string_interps, unnecessary_lambdas, prefer_expression_function_bodies, lines_longer_than_80_chars, avoid_as, avoid_annotating_with_dynamic mixin _$ConfigStore on _ConfigStore, Store { - final _$themeAtom = Atom(name: '_ConfigStore.theme'); + late final _$themeAtom = Atom(name: '_ConfigStore.theme', context: context); @override ThemeMode get theme { @@ -56,7 +56,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$amoledDarkModeAtom = Atom(name: '_ConfigStore.amoledDarkMode'); + late final _$amoledDarkModeAtom = + Atom(name: '_ConfigStore.amoledDarkMode', context: context); @override bool get amoledDarkMode { @@ -71,7 +72,7 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$localeAtom = Atom(name: '_ConfigStore.locale'); + late final _$localeAtom = Atom(name: '_ConfigStore.locale', context: context); @override Locale get locale { @@ -86,7 +87,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$showAvatarsAtom = Atom(name: '_ConfigStore.showAvatars'); + late final _$showAvatarsAtom = + Atom(name: '_ConfigStore.showAvatars', context: context); @override bool get showAvatars { @@ -101,7 +103,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$showScoresAtom = Atom(name: '_ConfigStore.showScores'); + late final _$showScoresAtom = + Atom(name: '_ConfigStore.showScores', context: context); @override bool get showScores { @@ -116,7 +119,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$defaultSortTypeAtom = Atom(name: '_ConfigStore.defaultSortType'); + late final _$defaultSortTypeAtom = + Atom(name: '_ConfigStore.defaultSortType', context: context); @override SortType get defaultSortType { @@ -131,8 +135,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$defaultListingTypeAtom = - Atom(name: '_ConfigStore.defaultListingType'); + late final _$defaultListingTypeAtom = + Atom(name: '_ConfigStore.defaultListingType', context: context); @override PostListingType get defaultListingType { @@ -147,8 +151,8 @@ mixin _$ConfigStore on _ConfigStore, Store { }); } - final _$importLemmyUserSettingsAsyncAction = - AsyncAction('_ConfigStore.importLemmyUserSettings'); + late final _$importLemmyUserSettingsAsyncAction = + AsyncAction('_ConfigStore.importLemmyUserSettings', context: context); @override Future importLemmyUserSettings(Jwt token) { @@ -156,7 +160,8 @@ mixin _$ConfigStore on _ConfigStore, Store { .run(() => super.importLemmyUserSettings(token)); } - final _$_ConfigStoreActionController = ActionController(name: '_ConfigStore'); + late final _$_ConfigStoreActionController = + ActionController(name: '_ConfigStore', context: context); @override void copyLemmyUserSettings(LocalUserSettings localUserSettings) { diff --git a/lib/url_launcher.dart b/lib/url_launcher.dart index 8882b78..be3c268 100644 --- a/lib/url_launcher.dart +++ b/lib/url_launcher.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:logging/logging.dart'; import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart' as ul; +import 'l10n/l10n.dart'; import 'pages/community/community.dart'; import 'pages/instance/instance.dart'; import 'pages/media_view.dart'; @@ -23,7 +25,10 @@ Future linkLauncher({ final instances = context.read().instances; final chonks = url.split('/'); - if (chonks.length == 1) return openInBrowser(url); + if (chonks.length == 1) { + await launchLink(link: url, context: context); + return; + } // CHECK IF LINK TO USER if (url.startsWith('/u/')) { @@ -97,14 +102,25 @@ Future linkLauncher({ // FALLBACK TO REGULAR LINK STUFF - return openInBrowser(url); + await launchLink(link: url, context: context); } -Future openInBrowser(String url) async { - if (await ul.canLaunch(url)) { - await ul.launch(url); +final _logger = Logger('launchLink'); + +/// Returns whether launching was successful. +Future launchLink({ + required String link, + required BuildContext context, +}) async { + final uri = Uri.tryParse(link); + if (uri != null && await ul.canLaunchUrl(uri)) { + await ul.launchUrl(uri); + return true; } else { - throw Exception(); - // TODO: handle opening links to stuff in app + _logger.warning('Failed to launch a link: $link'); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text(L10n.of(context).cannot_open_in_browser)), + ); + return false; } } diff --git a/lib/util/async_store.freezed.dart b/lib/util/async_store.freezed.dart index 788ceaa..4df2195 100644 --- a/lib/util/async_store.freezed.dart +++ b/lib/util/async_store.freezed.dart @@ -12,36 +12,7 @@ part of 'async_store.dart'; T _$identity(T value) => value; final _privateConstructorUsedError = UnsupportedError( - 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more informations: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); - -/// @nodoc -class _$AsyncStateTearOff { - const _$AsyncStateTearOff(); - - AsyncStateInitial initial() { - return AsyncStateInitial(); - } - - AsyncStateData data(T data, [String? errorTerm]) { - return AsyncStateData( - data, - errorTerm, - ); - } - - AsyncStateLoading loading() { - return AsyncStateLoading(); - } - - AsyncStateError error(String errorTerm) { - return AsyncStateError( - errorTerm, - ); - } -} - -/// @nodoc -const $AsyncState = _$AsyncStateTearOff(); + 'It seems like you constructed your class using `MyClass._()`. This constructor is only meant to be used by freezed and you are not supposed to need it nor use it.\nPlease check the documentation here for more information: https://github.com/rrousselGit/freezed#custom-getters-and-methods'); /// @nodoc mixin _$AsyncState { @@ -148,7 +119,7 @@ class _$AsyncStateInitial @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); - properties..add(DiagnosticsProperty('type', 'AsyncState<$T>.initial')); + properties.add(DiagnosticsProperty('type', 'AsyncState<$T>.initial')); } @override @@ -398,11 +369,11 @@ class _$AsyncStateData } abstract class AsyncStateData implements AsyncState { - const factory AsyncStateData(T data, [String? errorTerm]) = + const factory AsyncStateData(final T data, [final String? errorTerm]) = _$AsyncStateData; - T get data; - String? get errorTerm; + T get data => throw _privateConstructorUsedError; + String? get errorTerm => throw _privateConstructorUsedError; @JsonKey(ignore: true) $AsyncStateDataCopyWith> get copyWith => throw _privateConstructorUsedError; @@ -442,7 +413,7 @@ class _$AsyncStateLoading @override void debugFillProperties(DiagnosticPropertiesBuilder properties) { super.debugFillProperties(properties); - properties..add(DiagnosticsProperty('type', 'AsyncState<$T>.loading')); + properties.add(DiagnosticsProperty('type', 'AsyncState<$T>.loading')); } @override @@ -681,9 +652,9 @@ class _$AsyncStateError } abstract class AsyncStateError implements AsyncState { - const factory AsyncStateError(String errorTerm) = _$AsyncStateError; + const factory AsyncStateError(final String errorTerm) = _$AsyncStateError; - String get errorTerm; + String get errorTerm => throw _privateConstructorUsedError; @JsonKey(ignore: true) $AsyncStateErrorCopyWith> get copyWith => throw _privateConstructorUsedError; diff --git a/lib/util/async_store.g.dart b/lib/util/async_store.g.dart index b99b9a5..185e317 100644 --- a/lib/util/async_store.g.dart +++ b/lib/util/async_store.g.dart @@ -23,7 +23,8 @@ mixin _$AsyncStore on _AsyncStore, Store { name: '_AsyncStore.errorTerm')) .value; - final _$asyncStateAtom = Atom(name: '_AsyncStore.asyncState'); + late final _$asyncStateAtom = + Atom(name: '_AsyncStore.asyncState', context: context); @override AsyncState get asyncState { @@ -38,14 +39,16 @@ mixin _$AsyncStore on _AsyncStore, Store { }); } - final _$runAsyncAction = AsyncAction('_AsyncStore.run'); + late final _$runAsyncAction = + AsyncAction('_AsyncStore.run', context: context); @override Future run(AsyncValueGetter callback, {bool refresh = false}) { return _$runAsyncAction.run(() => super.run(callback, refresh: refresh)); } - final _$runLemmyAsyncAction = AsyncAction('_AsyncStore.runLemmy'); + late final _$runLemmyAsyncAction = + AsyncAction('_AsyncStore.runLemmy', context: context); @override Future runLemmy(String instanceHost, LemmyApiQuery query, @@ -54,7 +57,8 @@ mixin _$AsyncStore on _AsyncStore, Store { .run(() => super.runLemmy(instanceHost, query, refresh: refresh)); } - final _$_AsyncStoreActionController = ActionController(name: '_AsyncStore'); + late final _$_AsyncStoreActionController = + ActionController(name: '_AsyncStore', context: context); @override void setData(T data) { diff --git a/lib/widgets/about_tile.dart b/lib/widgets/about_tile.dart index 1ca37c4..021a6c0 100644 --- a/lib/widgets/about_tile.dart +++ b/lib/widgets/about_tile.dart @@ -43,7 +43,8 @@ class AboutTile extends HookWidget { TextButton.icon( icon: const Icon(Icons.code), label: const Text('source code'), - onPressed: () => openInBrowser(lemmurRepositoryLink), + onPressed: () => + launchLink(link: lemmurRepositoryUrl, context: context), ), TextButton.icon( icon: const Icon(Icons.monetization_on), @@ -56,13 +57,17 @@ class AboutTile extends HookWidget { mainAxisSize: MainAxisSize.min, children: [ TextButton( - onPressed: () => - openInBrowser('https://patreon.com/lemmur'), + onPressed: () => launchLink( + link: patreonUrl, + context: context, + ), child: const Text('Patreon'), ), TextButton( - onPressed: () => - openInBrowser('https://buymeacoff.ee/lemmur'), + onPressed: () => launchLink( + link: buyMeACoffeeUrl, + context: context, + ), child: const Text('Buy Me a Coffee'), ), ], diff --git a/lib/widgets/comment/comment_more_menu_button.dart b/lib/widgets/comment/comment_more_menu_button.dart index ab0fc7b..9d51139 100644 --- a/lib/widgets/comment/comment_more_menu_button.dart +++ b/lib/widgets/comment/comment_more_menu_button.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:lemmy_api_client/v3.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../../hooks/logged_in_action.dart'; import '../../l10n/l10n.dart'; +import '../../url_launcher.dart'; import '../../util/extensions/api.dart'; import '../../util/icons.dart'; import '../../util/observer_consumers.dart'; @@ -83,13 +83,7 @@ class _CommentMoreMenuPopup extends HookWidget { leading: const Icon(Icons.open_in_browser), title: const Text('Open in browser'), onTap: () async { - if (await ul.canLaunch(comment.link)) { - await ul.launch(comment.link); - } else { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text("can't open in browser")), - ); - } + await launchLink(link: comment.link, context: context); Navigator.of(context).pop(); }, diff --git a/lib/widgets/comment/comment_store.g.dart b/lib/widgets/comment/comment_store.g.dart index ecaf626..fbb3087 100644 --- a/lib/widgets/comment/comment_store.g.dart +++ b/lib/widgets/comment/comment_store.g.dart @@ -28,7 +28,8 @@ mixin _$CommentStore on _CommentStore, Store { Computed(() => super.isOP, name: '_CommentStore.isOP')) .value; - final _$commentAtom = Atom(name: '_CommentStore.comment'); + late final _$commentAtom = + Atom(name: '_CommentStore.comment', context: context); @override CommentView get comment { @@ -43,7 +44,8 @@ mixin _$CommentStore on _CommentStore, Store { }); } - final _$selectableAtom = Atom(name: '_CommentStore.selectable'); + late final _$selectableAtom = + Atom(name: '_CommentStore.selectable', context: context); @override bool get selectable { @@ -58,7 +60,8 @@ mixin _$CommentStore on _CommentStore, Store { }); } - final _$collapsedAtom = Atom(name: '_CommentStore.collapsed'); + late final _$collapsedAtom = + Atom(name: '_CommentStore.collapsed', context: context); @override bool get collapsed { @@ -73,7 +76,8 @@ mixin _$CommentStore on _CommentStore, Store { }); } - final _$showRawAtom = Atom(name: '_CommentStore.showRaw'); + late final _$showRawAtom = + Atom(name: '_CommentStore.showRaw', context: context); @override bool get showRaw { @@ -88,64 +92,72 @@ mixin _$CommentStore on _CommentStore, Store { }); } - final _$reportAsyncAction = AsyncAction('_CommentStore.report'); + late final _$reportAsyncAction = + AsyncAction('_CommentStore.report', context: context); @override Future report(Jwt token, String reason) { return _$reportAsyncAction.run(() => super.report(token, reason)); } - final _$deleteAsyncAction = AsyncAction('_CommentStore.delete'); + late final _$deleteAsyncAction = + AsyncAction('_CommentStore.delete', context: context); @override Future delete(Jwt token) { return _$deleteAsyncAction.run(() => super.delete(token)); } - final _$saveAsyncAction = AsyncAction('_CommentStore.save'); + late final _$saveAsyncAction = + AsyncAction('_CommentStore.save', context: context); @override Future save(Jwt token) { return _$saveAsyncAction.run(() => super.save(token)); } - final _$blockAsyncAction = AsyncAction('_CommentStore.block'); + late final _$blockAsyncAction = + AsyncAction('_CommentStore.block', context: context); @override Future block(Jwt token) { return _$blockAsyncAction.run(() => super.block(token)); } - final _$markAsReadAsyncAction = AsyncAction('_CommentStore.markAsRead'); + late final _$markAsReadAsyncAction = + AsyncAction('_CommentStore.markAsRead', context: context); @override Future markAsRead(Jwt token) { return _$markAsReadAsyncAction.run(() => super.markAsRead(token)); } - final _$_voteAsyncAction = AsyncAction('_CommentStore._vote'); + late final _$_voteAsyncAction = + AsyncAction('_CommentStore._vote', context: context); @override Future _vote(VoteType voteType, Jwt token) { return _$_voteAsyncAction.run(() => super._vote(voteType, token)); } - final _$upVoteAsyncAction = AsyncAction('_CommentStore.upVote'); + late final _$upVoteAsyncAction = + AsyncAction('_CommentStore.upVote', context: context); @override Future upVote(Jwt token) { return _$upVoteAsyncAction.run(() => super.upVote(token)); } - final _$downVoteAsyncAction = AsyncAction('_CommentStore.downVote'); + late final _$downVoteAsyncAction = + AsyncAction('_CommentStore.downVote', context: context); @override Future downVote(Jwt token) { return _$downVoteAsyncAction.run(() => super.downVote(token)); } - final _$_CommentStoreActionController = - ActionController(name: '_CommentStore'); + late final _$_CommentStoreActionController = + ActionController(name: '_CommentStore', context: context); @override void toggleShowRaw() { diff --git a/lib/widgets/post/post_more_menu.dart b/lib/widgets/post/post_more_menu.dart index 1743f3d..1638a22 100644 --- a/lib/widgets/post/post_more_menu.dart +++ b/lib/widgets/post/post_more_menu.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; -import 'package:url_launcher/url_launcher.dart' as ul; import '../../hooks/logged_in_action.dart'; import '../../pages/create_post/create_post.dart'; import '../../pages/full_post/full_post_store.dart'; import '../../stores/accounts_store.dart'; +import '../../url_launcher.dart'; import '../../util/icons.dart'; import '../../util/observer_consumers.dart'; import '../bottom_modal.dart'; @@ -72,10 +72,7 @@ class PostMoreMenu extends HookWidget { ListTile( leading: const Icon(Icons.open_in_browser), title: const Text('Open in browser'), - onTap: () async => await ul.canLaunch(post.post.apId) - ? ul.launch(post.post.apId) - : ScaffoldMessenger.of(context).showSnackBar( - const SnackBar(content: Text("can't open in browser"))), + onTap: () => launchLink(link: post.post.apId, context: context), ), if (isMine) ListTile( diff --git a/lib/widgets/post/post_store.g.dart b/lib/widgets/post/post_store.g.dart index 583c01e..e12197f 100644 --- a/lib/widgets/post/post_store.g.dart +++ b/lib/widgets/post/post_store.g.dart @@ -23,7 +23,8 @@ mixin _$PostStore on _PostStore, Store { Computed(() => super.hasMedia, name: '_PostStore.hasMedia')) .value; - final _$postViewAtom = Atom(name: '_PostStore.postView'); + late final _$postViewAtom = + Atom(name: '_PostStore.postView', context: context); @override PostView get postView { @@ -38,35 +39,40 @@ mixin _$PostStore on _PostStore, Store { }); } - final _$saveAsyncAction = AsyncAction('_PostStore.save'); + late final _$saveAsyncAction = + AsyncAction('_PostStore.save', context: context); @override Future save(Jwt token) { return _$saveAsyncAction.run(() => super.save(token)); } - final _$reportAsyncAction = AsyncAction('_PostStore.report'); + late final _$reportAsyncAction = + AsyncAction('_PostStore.report', context: context); @override Future report(Jwt token, String reason) { return _$reportAsyncAction.run(() => super.report(token, reason)); } - final _$blockUserAsyncAction = AsyncAction('_PostStore.blockUser'); + late final _$blockUserAsyncAction = + AsyncAction('_PostStore.blockUser', context: context); @override Future blockUser(Jwt token) { return _$blockUserAsyncAction.run(() => super.blockUser(token)); } - final _$_voteAsyncAction = AsyncAction('_PostStore._vote'); + late final _$_voteAsyncAction = + AsyncAction('_PostStore._vote', context: context); @override Future _vote(Jwt token, VoteType voteType) { return _$_voteAsyncAction.run(() => super._vote(token, voteType)); } - final _$_PostStoreActionController = ActionController(name: '_PostStore'); + late final _$_PostStoreActionController = + ActionController(name: '_PostStore', context: context); @override void updatePostView(PostView postView) { diff --git a/pubspec.lock b/pubspec.lock index 984edbc..c83feb4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -21,7 +21,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.1.11" + version: "3.3.0" args: dependency: transitive description: @@ -49,7 +49,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "2.3.0" build_config: dependency: transitive description: @@ -63,7 +63,7 @@ packages: name: build_daemon url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.1.0" build_resolvers: dependency: transitive description: @@ -77,7 +77,7 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.7" + version: "2.1.10" build_runner_core: dependency: transitive description: @@ -98,7 +98,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.4" + version: "8.2.3" characters: dependency: transitive description: @@ -168,7 +168,7 @@ packages: name: crypto url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" dart_style: dependency: transitive description: @@ -182,14 +182,14 @@ packages: name: extended_image url: "https://pub.dartlang.org" source: hosted - version: "6.0.1" + version: "6.0.3" extended_image_library: dependency: transitive description: name: extended_image_library url: "https://pub.dartlang.org" source: hosted - version: "3.1.2" + version: "3.1.4" fake_async: dependency: transitive description: @@ -236,14 +236,14 @@ packages: name: flutter_hooks url: "https://pub.dartlang.org" source: hosted - version: "0.18.2" + version: "0.18.3" flutter_keyboard_visibility: dependency: transitive description: name: flutter_keyboard_visibility url: "https://pub.dartlang.org" source: hosted - version: "5.1.1" + version: "5.2.0" flutter_keyboard_visibility_platform_interface: dependency: transitive description: @@ -276,14 +276,14 @@ packages: name: flutter_markdown url: "https://pub.dartlang.org" source: hosted - version: "0.6.9" + version: "0.6.10" flutter_mobx: dependency: "direct main" description: name: flutter_mobx url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.5" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -297,7 +297,7 @@ packages: name: flutter_speed_dial url: "https://pub.dartlang.org" source: hosted - version: "5.0.0+1" + version: "6.0.0" flutter_test: dependency: "direct dev" description: flutter @@ -309,7 +309,7 @@ packages: name: flutter_typeahead url: "https://pub.dartlang.org" source: hosted - version: "3.2.4" + version: "3.2.5" flutter_web_plugins: dependency: transitive description: flutter @@ -321,14 +321,14 @@ packages: name: freezed url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "2.0.2" freezed_annotation: dependency: "direct main" description: name: freezed_annotation url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "2.0.1" frontend_server_client: dependency: transitive description: @@ -377,7 +377,7 @@ packages: name: http_multi_server url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.2.0" http_parser: dependency: transitive description: @@ -391,28 +391,42 @@ packages: name: image url: "https://pub.dartlang.org" source: hosted - version: "3.1.1" + version: "3.1.3" image_picker: dependency: "direct main" description: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.8.4+6" + version: "0.8.5" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.4+11" image_picker_for_web: dependency: transitive description: name: image_picker_for_web url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.1.6" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + url: "https://pub.dartlang.org" + source: hosted + version: "0.8.5" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.4.3" + version: "2.4.4" intl: dependency: "direct main" description: @@ -440,21 +454,21 @@ packages: name: json_annotation url: "https://pub.dartlang.org" source: hosted - version: "4.4.0" + version: "4.5.0" json_serializable: dependency: "direct dev" description: name: json_serializable url: "https://pub.dartlang.org" source: hosted - version: "6.1.4" + version: "6.2.0" keyboard_dismisser: dependency: "direct main" description: name: keyboard_dismisser url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" latinize: dependency: transitive description: @@ -468,7 +482,7 @@ packages: name: lemmy_api_client url: "https://pub.dartlang.org" source: hosted - version: "0.19.0" + version: "0.20.0" logging: dependency: "direct main" description: @@ -482,7 +496,7 @@ packages: name: markdown url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "5.0.0" matcher: dependency: transitive description: @@ -524,21 +538,21 @@ packages: name: mobx url: "https://pub.dartlang.org" source: hosted - version: "2.0.6+1" + version: "2.0.7" mobx_codegen: dependency: "direct dev" description: name: mobx_codegen url: "https://pub.dartlang.org" source: hosted - version: "2.0.5+2" + version: "2.0.6" modal_bottom_sheet: dependency: "direct main" description: name: modal_bottom_sheet url: "https://pub.dartlang.org" source: hosted - version: "2.0.0" + version: "2.0.1" nested: dependency: "direct main" description: @@ -559,14 +573,14 @@ packages: name: package_info_plus url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux url: "https://pub.dartlang.org" source: hosted - version: "1.0.3" + version: "1.0.5" package_info_plus_macos: dependency: transitive description: @@ -587,14 +601,14 @@ packages: name: package_info_plus_web url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "1.0.5" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows url: "https://pub.dartlang.org" source: hosted - version: "1.0.4" + version: "1.0.5" path: dependency: transitive description: @@ -608,21 +622,21 @@ packages: name: path_provider url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.9" path_provider_android: dependency: transitive description: name: path_provider_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.11" + version: "2.0.13" path_provider_ios: dependency: transitive description: name: path_provider_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.7" + version: "2.0.8" path_provider_linux: dependency: transitive description: @@ -651,13 +665,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.5" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" petitparser: dependency: transitive description: @@ -713,7 +720,7 @@ packages: name: pub_semver url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.1.1" pubspec_parse: dependency: transitive description: @@ -727,42 +734,42 @@ packages: name: share_plus url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "4.0.4" share_plus_linux: dependency: transitive description: name: share_plus_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "3.0.0" share_plus_macos: dependency: transitive description: name: share_plus_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.0" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "3.0.2" share_plus_web: dependency: transitive description: name: share_plus_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "3.0.0" share_plus_windows: dependency: transitive description: name: share_plus_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "3.0.0" shared_preferences: dependency: "direct main" description: @@ -776,28 +783,28 @@ packages: name: shared_preferences_android url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.0.11" shared_preferences_ios: dependency: transitive description: name: shared_preferences_ios url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.1.0" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.1.0" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "2.0.3" shared_preferences_platform_interface: dependency: transitive description: @@ -818,14 +825,14 @@ packages: name: shared_preferences_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.1.0" shelf: dependency: transitive description: name: shelf url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.3.0" shelf_web_socket: dependency: transitive description: @@ -844,14 +851,14 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.2" source_helper: dependency: transitive description: name: source_helper url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.2" source_span: dependency: transitive description: @@ -907,7 +914,7 @@ packages: name: timeago url: "https://pub.dartlang.org" source: hosted - version: "3.2.1" + version: "3.2.2" timing: dependency: transitive description: @@ -928,35 +935,35 @@ packages: name: url_launcher url: "https://pub.dartlang.org" source: hosted - version: "6.0.18" + version: "6.1.0" url_launcher_android: dependency: transitive description: name: url_launcher_android url: "https://pub.dartlang.org" source: hosted - version: "6.0.14" + version: "6.0.16" url_launcher_ios: dependency: transitive description: name: url_launcher_ios url: "https://pub.dartlang.org" source: hosted - version: "6.0.14" + version: "6.0.15" url_launcher_linux: dependency: transitive description: name: url_launcher_linux url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "3.0.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos url: "https://pub.dartlang.org" source: hosted - version: "2.0.3" + version: "3.0.0" url_launcher_platform_interface: dependency: transitive description: @@ -970,14 +977,14 @@ packages: name: url_launcher_web url: "https://pub.dartlang.org" source: hosted - version: "2.0.8" + version: "2.0.9" url_launcher_windows: dependency: transitive description: name: url_launcher_windows url: "https://pub.dartlang.org" source: hosted - version: "2.0.2" + version: "3.0.0" vector_math: dependency: transitive description: @@ -1005,14 +1012,14 @@ packages: name: web_socket_channel url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" win32: dependency: transitive description: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "2.3.10" + version: "2.5.2" xdg_directories: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8aba46e..2eed916 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -23,15 +23,15 @@ environment: dependencies: # widgets - flutter_speed_dial: ^5.0.0 + flutter_speed_dial: ^6.0.0 photo_view: ^0.13.0 - markdown: ^4.0.0 + markdown: ^5.0.0 flutter_markdown: ^0.6.1 flutter_typeahead: ^3.2.1 modal_bottom_sheet: ^2.0.0 # native - share_plus: ^3.0.4 + share_plus: ^4.0.4 url_launcher: ^6.0.3 shared_preferences: ^2.0.5 package_info_plus: ^1.0.6 @@ -47,12 +47,12 @@ dependencies: # utils timeago: ^3.0.2 fuzzy: ^0.4.0-nullsafety.0 - lemmy_api_client: ^0.19.0 + lemmy_api_client: ^0.20.0 intl: ^0.17.0 matrix4_transform: ^2.0.0 - json_annotation: ^4.4.0 + json_annotation: ^4.5.0 keyboard_dismisser: ^2.0.0 - freezed_annotation: ^1.0.0 + freezed_annotation: ^2.0.1 logging: ^1.0.1 nested: ^1.0.0 @@ -70,7 +70,7 @@ dev_dependencies: json_serializable: ^6.0.0 build_runner: ^2.1.2 mobx_codegen: ^2.0.2 - freezed: ^1.0.0 + freezed: ^2.0.2 flutter_icons: android: true