diff --git a/lib/controllers/author.dart b/lib/controllers/author.dart index f9c9167..0b783f0 100644 --- a/lib/controllers/author.dart +++ b/lib/controllers/author.dart @@ -2,27 +2,30 @@ import "dart:async"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:nexus/controllers/user.dart"; +import "package:nexus/models/configs/author.dart"; import "package:nexus/models/content/membership.dart"; -import "package:nexus/models/event.dart"; -class AuthorController(final Event event) +class AuthorController(final AuthorConfig config) extends AsyncNotifier { @override Future build() async { final member = await ref.watch( - UserController.provider(.new(roomId: event.roomId, userId: event.sender)) - .future, + UserController.provider( + .new(roomId: config.roomId, userId: config.userId), + ).future, ); return .new( status: member.status, - avatarUrl: event.pmp?.avatarUrl ?? member.avatarUrl, - displayName: event.pmp?.displayName ?? member.displayName, + avatarUrl: config.avatarUrl ?? member.avatarUrl, + displayName: config.displayName ?? member.displayName, ); } static final provider = - AsyncNotifierProvider.family( - AuthorController.new, - ); + AsyncNotifierProvider.family< + AuthorController, + MembershipContent, + AuthorConfig + >(AuthorController.new); } diff --git a/lib/models/configs/author.dart b/lib/models/configs/author.dart new file mode 100644 index 0000000..a3a15e9 --- /dev/null +++ b/lib/models/configs/author.dart @@ -0,0 +1,19 @@ +import "package:freezed_annotation/freezed_annotation.dart"; +import "package:nexus/models/event.dart"; + +part "author.freezed.dart"; + +@freezed +class const AuthorConfig({ + required final String roomId, + required final String userId, + final Uri? avatarUrl, + final String? displayName, +}) with _$AuthorConfig { + factory AuthorConfig.fromEvent(Event event) => .new( + roomId: event.roomId, + userId: event.sender, + avatarUrl: event.pmp?.avatarUrl, + displayName: event.pmp?.displayName, + ); +} diff --git a/lib/widgets/lazy_loading/message_avatar.dart b/lib/widgets/lazy_loading/message_avatar.dart index 95f987f..80a1101 100644 --- a/lib/widgets/lazy_loading/message_avatar.dart +++ b/lib/widgets/lazy_loading/message_avatar.dart @@ -13,7 +13,7 @@ class const MessageAvatar( }) extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) => - switch (ref.watch(AuthorController.provider(event))) { + switch (ref.watch(AuthorController.provider(.fromEvent(event)))) { AsyncData(:final value) || AsyncLoading(:final value?) => InkWell( onTap: () => context.showUserPopover(event.sender, roomId: event.roomId), diff --git a/lib/widgets/lazy_loading/message_displayname.dart b/lib/widgets/lazy_loading/message_displayname.dart index d7c91bd..0f68ac5 100644 --- a/lib/widgets/lazy_loading/message_displayname.dart +++ b/lib/widgets/lazy_loading/message_displayname.dart @@ -18,7 +18,7 @@ class const MessageDisplayname( Widget build(BuildContext context, WidgetRef ref) { final color = ref.displaynameColor(event.roomId, event.sender); - return switch (ref.watch(AuthorController.provider(event))) { + return switch (ref.watch(AuthorController.provider(.fromEvent(event)))) { AsyncData(:final MembershipContent? value) || AsyncLoading(:final value) || AsyncError(:final value) => InkWell( diff --git a/lib/widgets/users/user_span.dart b/lib/widgets/users/user_span.dart index 60cab86..d8a305c 100644 --- a/lib/widgets/users/user_span.dart +++ b/lib/widgets/users/user_span.dart @@ -47,7 +47,7 @@ class UserSpan( return UserSpan( context, - ref.watch(AuthorController.provider(event)).value?.displayName ?? + ref.watch(AuthorController.provider(.fromEvent(event))).value?.displayName ?? event.sender.localpart, userId: event.sender, roomId: event.roomId,