From aa448adeb78129e126ba3f875798979faedc6b8f Mon Sep 17 00:00:00 2001 From: krawieck Date: Sat, 2 Oct 2021 18:48:00 +0200 Subject: [PATCH] Code review changes * remove useless comment from post_status.dart * move fixed in changelog into a proper section * move refresh into a provider create in UserBlocksWrapper * use errorTerm in UserBlocks instead of hardcoded message * add missing trailing comma * add route method BlocksPage * remove useless lint ignore * use originPreferredName instead of referredName * make UserBlocksWrapper private * revise AsyncStoreListener --- CHANGELOG.md | 7 +++---- lib/pages/full_post/full_post.dart | 5 ++--- lib/pages/settings/blocks/blocks.dart | 29 +++++++++++++++------------ lib/pages/settings/settings.dart | 3 ++- lib/util/async_store_listener.dart | 13 ++++-------- lib/widgets/comment/comment.dart | 4 ++-- lib/widgets/post/post.dart | 4 ++-- lib/widgets/post/post_status.dart | 6 ------ 8 files changed, 31 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 34ff68a..9e9c44c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,10 @@ - Logging: local logs about some actions/errors. Can be accessed from **settings > about lemmur > logs** - Android theme-aware splash screen (thanks to [@mimi89999](https://github.com/mimi89999)) - Blocking of users and communities (from post and from comment) +- +### Fixed +- Fixed a bug where post would go out of sync with full version of the post ## v0.6.0 - 2021-09-06 ### Added @@ -13,10 +16,6 @@ - Support for Lemmy v0.12.0 - Show cake day on a user's profile and next to their name in a comment -### Fixed - -- Fixed a bug where post would go out of sync with full version of the post - ## v0.5.0 - 2021-04-29 ### Added diff --git a/lib/pages/full_post/full_post.dart b/lib/pages/full_post/full_post.dart index 5be933e..84ea5b9 100644 --- a/lib/pages/full_post/full_post.dart +++ b/lib/pages/full_post/full_post.dart @@ -58,9 +58,8 @@ class FullPostPage extends StatelessWidget { child: AsyncStoreListener( asyncStore: context.read().communityBlockingState, successMessageBuilder: (context, asyncStore) { - final name = - asyncStore.data.communityView.community.originPreferredName; - return '${asyncStore.data.blocked ? 'Blocked' : 'Unblocked'} $name'; + final name = asyncStore.communityView.community.originPreferredName; + return '${asyncStore.blocked ? 'Blocked' : 'Unblocked'} $name'; }, child: const _FullPostPage(), ), diff --git a/lib/pages/settings/blocks/blocks.dart b/lib/pages/settings/blocks/blocks.dart index 929d8f3..4567a98 100644 --- a/lib/pages/settings/blocks/blocks.dart +++ b/lib/pages/settings/blocks/blocks.dart @@ -38,7 +38,7 @@ class BlocksPage extends HookWidget { body: TabBarView( children: [ for (final instance in accStore.loggedInInstances) - UserBlocksWrapper( + _UserBlocksWrapper( instanceHost: instance, username: accStore.defaultUsernameFor(instance)!, ) @@ -47,13 +47,17 @@ class BlocksPage extends HookWidget { ), ); } + + static Route route() => + MaterialPageRoute(builder: (context) => const BlocksPage()); } -class UserBlocksWrapper extends StatelessWidget { +class _UserBlocksWrapper extends StatelessWidget { final String instanceHost; final String username; - const UserBlocksWrapper({required this.instanceHost, required this.username}); + const _UserBlocksWrapper( + {required this.instanceHost, required this.username}); @override Widget build(BuildContext context) { @@ -64,7 +68,7 @@ class UserBlocksWrapper extends StatelessWidget { .read() .userDataFor(instanceHost, username)! .jwt, - ), + )..refresh(), child: const _UserBlocks(), ); } @@ -75,8 +79,6 @@ class _UserBlocks extends HookWidget { @override Widget build(BuildContext context) { - useMemoized(() => context.read().refresh(), []); - return ObserverBuilder( builder: (context, store) { return RefreshIndicator( @@ -91,16 +93,19 @@ class _UserBlocks extends HookWidget { child: Center(child: CircularProgressIndicator.adaptive()), ) else if (store.blocksState.errorTerm != null) - const Padding( - padding: EdgeInsets.only(top: 64), - child: Center(child: Text('error UwU')), + Padding( + padding: const EdgeInsets.only(top: 64), + child: Center(child: Text(store.blocksState.errorTerm!)), ) else ...[ for (final user in store.blockedUsers) _BlockPersonTile(user, key: ValueKey(user)), if (store.blockedUsers.isEmpty) const ListTile( - title: Center(child: Text('No users blocked'))), + title: Center( + child: Text('No users blocked'), + ), + ), // TODO: add user search & block // ListTile( // leading: const Padding( @@ -166,7 +171,6 @@ class _BlockPersonTile extends HookWidget { ); } on SocketException { showSnackBar('Network error'); - // ignore: avoid_catches_without_on_clauses } on LemmyApiException catch (e) { showSnackBar(e.message); } catch (e) { @@ -178,7 +182,7 @@ class _BlockPersonTile extends HookWidget { return ListTile( leading: Avatar(url: person.avatar), - title: Text(person.preferredName), + title: Text(person.originPreferredName), trailing: IconButton( icon: pending.value ? const CircularProgressIndicator.adaptive() @@ -225,7 +229,6 @@ class _BlockCommunityTile extends HookWidget { showSnackBar('Network error'); } on LemmyApiException catch (e) { showSnackBar(e.message); - // ignore: avoid_catches_without_on_clauses } catch (e) { showSnackBar(e.toString()); } finally { diff --git a/lib/pages/settings/settings.dart b/lib/pages/settings/settings.dart index 8aa06a6..321bf9e 100644 --- a/lib/pages/settings/settings.dart +++ b/lib/pages/settings/settings.dart @@ -22,6 +22,7 @@ class SettingsPage extends HookWidget { @override Widget build(BuildContext context) { final hasAnyUsers = useAccountsStoreSelect((store) => !store.hasNoAccount); + return Scaffold( appBar: AppBar( title: Text(L10n.of(context)!.settings), @@ -47,7 +48,7 @@ class SettingsPage extends HookWidget { leading: const Icon(Icons.block), title: const Text('Blocks'), onTap: () { - goTo(context, (_) => const BlocksPage()); + Navigator.of(context).push(BlocksPage.route()); }, ), ListTile( diff --git a/lib/util/async_store_listener.dart b/lib/util/async_store_listener.dart index 1a924ac..2bc37a3 100644 --- a/lib/util/async_store_listener.dart +++ b/lib/util/async_store_listener.dart @@ -7,17 +7,15 @@ import 'observer_consumers.dart'; class AsyncStoreListener extends StatelessWidget { final AsyncStore asyncStore; - final String? successMessage; final String Function( BuildContext context, - AsyncStateData asyncStore, + T data, )? successMessageBuilder; final Widget child; const AsyncStoreListener({ Key? key, required this.asyncStore, - this.successMessage, this.successMessageBuilder, required this.child, }) : super(key: key); @@ -34,15 +32,12 @@ class AsyncStoreListener extends StatelessWidget { ..hideCurrentSnackBar() ..showSnackBar(SnackBar(content: Text(errorTerm.tr(context)))); } else if (store.asyncState is AsyncStateData && - (successMessage != null || successMessageBuilder != null)) { + (successMessageBuilder != null)) { ScaffoldMessenger.of(context) ..hideCurrentSnackBar() ..showSnackBar(SnackBar( - content: Text(successMessageBuilder?.call( - context, - store.asyncState as AsyncStateData, - ) ?? - successMessage!))); + content: Text(successMessageBuilder!( + context, (store.asyncState as AsyncStateData).data)))); } }, child: child, diff --git a/lib/widgets/comment/comment.dart b/lib/widgets/comment/comment.dart index 1d5730a..89a2cc6 100644 --- a/lib/widgets/comment/comment.dart +++ b/lib/widgets/comment/comment.dart @@ -93,8 +93,8 @@ class CommentWidget extends StatelessWidget { builder: (context, child) => AsyncStoreListener( asyncStore: context.read().blockingState, successMessageBuilder: (context, state) { - final name = state.data.personView.person.preferredName; - return state.data.blocked ? '$name blocked' : '$name unblocked'; + final name = state.personView.person.preferredName; + return state.blocked ? '$name blocked' : '$name unblocked'; }, child: AsyncStoreListener( asyncStore: context.read().votingState, diff --git a/lib/widgets/post/post.dart b/lib/widgets/post/post.dart index 3769d3e..5483bfc 100644 --- a/lib/widgets/post/post.dart +++ b/lib/widgets/post/post.dart @@ -40,8 +40,8 @@ class PostTile extends StatelessWidget { child: AsyncStoreListener( asyncStore: context.read().userBlockingState, successMessageBuilder: (context, state) { - final name = state.data.personView.person.preferredName; - return state.data.blocked ? '$name blocked' : '$name unblocked'; + final name = state.personView.person.preferredName; + return state.blocked ? '$name blocked' : '$name unblocked'; }, child: const _Post(), ), diff --git a/lib/widgets/post/post_status.dart b/lib/widgets/post/post_status.dart index db8064a..b3dcaf6 100644 --- a/lib/widgets/post/post_status.dart +++ b/lib/widgets/post/post_status.dart @@ -1,7 +1 @@ -// class PostStatus { -// final bool full; - -// const PostStatus({required this.full}); -// } - typedef IsFullPost = bool;