Merge branch 'master' into feature/create-post-redesign
This commit is contained in:
commit
df85b6271e
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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<CommunityStore>(builder: (context, store) {
|
||||
return ListTile(
|
||||
|
|
|
@ -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<void> refresh(Jwt? token) {
|
||||
return _$refreshAsyncAction.run(() => super.refresh(token));
|
||||
}
|
||||
|
||||
final _$subscribeAsyncAction = AsyncAction('_CommunityStore.subscribe');
|
||||
late final _$subscribeAsyncAction =
|
||||
AsyncAction('_CommunityStore.subscribe', context: context);
|
||||
|
||||
@override
|
||||
Future<void> subscribe(Jwt token) {
|
||||
|
|
|
@ -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<CommentView> 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<void> refresh([Jwt? token]) {
|
||||
return _$refreshAsyncAction.run(() => super.refresh(token));
|
||||
}
|
||||
|
||||
final _$blockCommunityAsyncAction =
|
||||
AsyncAction('_FullPostStore.blockCommunity');
|
||||
late final _$blockCommunityAsyncAction =
|
||||
AsyncAction('_FullPostStore.blockCommunity', context: context);
|
||||
|
||||
@override
|
||||
Future<void> 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) {
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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<void> 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<void> fetchCommunites(Jwt? token, {bool refresh = false}) {
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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")),
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
|
@ -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<void> fetchPage() {
|
||||
return _$fetchPageAsyncAction.run(() => super.fetchPage());
|
||||
}
|
||||
|
||||
final _$_ModlogPageStoreActionController =
|
||||
ActionController(name: '_ModlogPageStore');
|
||||
late final _$_ModlogPageStoreActionController =
|
||||
ActionController(name: '_ModlogPageStore', context: context);
|
||||
|
||||
@override
|
||||
void previousPage() {
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
|
|
|
@ -32,7 +32,8 @@ mixin _$BlocksStore on _BlocksStore, Store {
|
|||
Computed<bool>(() => super.isUsable, name: '_BlocksStore.isUsable'))
|
||||
.value;
|
||||
|
||||
final _$_blockedUsersAtom = Atom(name: '_BlocksStore._blockedUsers');
|
||||
late final _$_blockedUsersAtom =
|
||||
Atom(name: '_BlocksStore._blockedUsers', context: context);
|
||||
|
||||
@override
|
||||
ObservableList<UserBlockStore>? 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<CommunityBlockStore>? 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<void> 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<void> 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<void> refresh() {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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';
|
||||
|
|
|
@ -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<void> 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) {
|
||||
|
|
|
@ -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<void> linkLauncher({
|
|||
final instances = context.read<AccountsStore>().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<void> linkLauncher({
|
|||
|
||||
// FALLBACK TO REGULAR LINK STUFF
|
||||
|
||||
return openInBrowser(url);
|
||||
await launchLink(link: url, context: context);
|
||||
}
|
||||
|
||||
Future<void> openInBrowser(String url) async {
|
||||
if (await ul.canLaunch(url)) {
|
||||
await ul.launch(url);
|
||||
final _logger = Logger('launchLink');
|
||||
|
||||
/// Returns whether launching was successful.
|
||||
Future<bool> 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,36 +12,7 @@ part of 'async_store.dart';
|
|||
T _$identity<T>(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<T> initial<T>() {
|
||||
return AsyncStateInitial<T>();
|
||||
}
|
||||
|
||||
AsyncStateData<T> data<T>(T data, [String? errorTerm]) {
|
||||
return AsyncStateData<T>(
|
||||
data,
|
||||
errorTerm,
|
||||
);
|
||||
}
|
||||
|
||||
AsyncStateLoading<T> loading<T>() {
|
||||
return AsyncStateLoading<T>();
|
||||
}
|
||||
|
||||
AsyncStateError<T> error<T>(String errorTerm) {
|
||||
return AsyncStateError<T>(
|
||||
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<T> {
|
||||
|
@ -148,7 +119,7 @@ class _$AsyncStateInitial<T>
|
|||
@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<T>
|
|||
}
|
||||
|
||||
abstract class AsyncStateData<T> implements AsyncState<T> {
|
||||
const factory AsyncStateData(T data, [String? errorTerm]) =
|
||||
const factory AsyncStateData(final T data, [final String? errorTerm]) =
|
||||
_$AsyncStateData<T>;
|
||||
|
||||
T get data;
|
||||
String? get errorTerm;
|
||||
T get data => throw _privateConstructorUsedError;
|
||||
String? get errorTerm => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
$AsyncStateDataCopyWith<T, AsyncStateData<T>> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
@ -442,7 +413,7 @@ class _$AsyncStateLoading<T>
|
|||
@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<T>
|
|||
}
|
||||
|
||||
abstract class AsyncStateError<T> implements AsyncState<T> {
|
||||
const factory AsyncStateError(String errorTerm) = _$AsyncStateError<T>;
|
||||
const factory AsyncStateError(final String errorTerm) = _$AsyncStateError<T>;
|
||||
|
||||
String get errorTerm;
|
||||
String get errorTerm => throw _privateConstructorUsedError;
|
||||
@JsonKey(ignore: true)
|
||||
$AsyncStateErrorCopyWith<T, AsyncStateError<T>> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
|
|
@ -23,7 +23,8 @@ mixin _$AsyncStore<T> on _AsyncStore<T>, Store {
|
|||
name: '_AsyncStore.errorTerm'))
|
||||
.value;
|
||||
|
||||
final _$asyncStateAtom = Atom(name: '_AsyncStore.asyncState');
|
||||
late final _$asyncStateAtom =
|
||||
Atom(name: '_AsyncStore.asyncState', context: context);
|
||||
|
||||
@override
|
||||
AsyncState<T> get asyncState {
|
||||
|
@ -38,14 +39,16 @@ mixin _$AsyncStore<T> on _AsyncStore<T>, Store {
|
|||
});
|
||||
}
|
||||
|
||||
final _$runAsyncAction = AsyncAction('_AsyncStore.run');
|
||||
late final _$runAsyncAction =
|
||||
AsyncAction('_AsyncStore.run', context: context);
|
||||
|
||||
@override
|
||||
Future<T?> run(AsyncValueGetter<T> 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<T?> runLemmy(String instanceHost, LemmyApiQuery<T> query,
|
||||
|
@ -54,7 +57,8 @@ mixin _$AsyncStore<T> on _AsyncStore<T>, 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) {
|
||||
|
|
|
@ -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'),
|
||||
),
|
||||
],
|
||||
|
|
|
@ -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();
|
||||
},
|
||||
|
|
|
@ -28,7 +28,8 @@ mixin _$CommentStore on _CommentStore, Store {
|
|||
Computed<bool>(() => 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<void> 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<void> delete(Jwt token) {
|
||||
return _$deleteAsyncAction.run(() => super.delete(token));
|
||||
}
|
||||
|
||||
final _$saveAsyncAction = AsyncAction('_CommentStore.save');
|
||||
late final _$saveAsyncAction =
|
||||
AsyncAction('_CommentStore.save', context: context);
|
||||
|
||||
@override
|
||||
Future<void> save(Jwt token) {
|
||||
return _$saveAsyncAction.run(() => super.save(token));
|
||||
}
|
||||
|
||||
final _$blockAsyncAction = AsyncAction('_CommentStore.block');
|
||||
late final _$blockAsyncAction =
|
||||
AsyncAction('_CommentStore.block', context: context);
|
||||
|
||||
@override
|
||||
Future<void> block(Jwt token) {
|
||||
return _$blockAsyncAction.run(() => super.block(token));
|
||||
}
|
||||
|
||||
final _$markAsReadAsyncAction = AsyncAction('_CommentStore.markAsRead');
|
||||
late final _$markAsReadAsyncAction =
|
||||
AsyncAction('_CommentStore.markAsRead', context: context);
|
||||
|
||||
@override
|
||||
Future<void> markAsRead(Jwt token) {
|
||||
return _$markAsReadAsyncAction.run(() => super.markAsRead(token));
|
||||
}
|
||||
|
||||
final _$_voteAsyncAction = AsyncAction('_CommentStore._vote');
|
||||
late final _$_voteAsyncAction =
|
||||
AsyncAction('_CommentStore._vote', context: context);
|
||||
|
||||
@override
|
||||
Future<void> _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<void> upVote(Jwt token) {
|
||||
return _$upVoteAsyncAction.run(() => super.upVote(token));
|
||||
}
|
||||
|
||||
final _$downVoteAsyncAction = AsyncAction('_CommentStore.downVote');
|
||||
late final _$downVoteAsyncAction =
|
||||
AsyncAction('_CommentStore.downVote', context: context);
|
||||
|
||||
@override
|
||||
Future<void> 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() {
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -23,7 +23,8 @@ mixin _$PostStore on _PostStore, Store {
|
|||
Computed<bool>(() => 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<void> save(Jwt token) {
|
||||
return _$saveAsyncAction.run(() => super.save(token));
|
||||
}
|
||||
|
||||
final _$reportAsyncAction = AsyncAction('_PostStore.report');
|
||||
late final _$reportAsyncAction =
|
||||
AsyncAction('_PostStore.report', context: context);
|
||||
|
||||
@override
|
||||
Future<void> 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<void> blockUser(Jwt token) {
|
||||
return _$blockUserAsyncAction.run(() => super.blockUser(token));
|
||||
}
|
||||
|
||||
final _$_voteAsyncAction = AsyncAction('_PostStore._vote');
|
||||
late final _$_voteAsyncAction =
|
||||
AsyncAction('_PostStore._vote', context: context);
|
||||
|
||||
@override
|
||||
Future<void> _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) {
|
||||
|
|
143
pubspec.lock
143
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:
|
||||
|
|
14
pubspec.yaml
14
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
|
||||
|
|
Loading…
Reference in New Issue