import "dart:async"; import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:flutter_chat_core/flutter_chat_core.dart"; import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:nexus/controllers/client_state_controller.dart"; import "package:nexus/controllers/user_controller.dart"; import "package:nexus/helpers/extensions/get_localpart.dart"; import "package:nexus/models/membership.dart"; import "package:nexus/models/membership_status.dart"; class AuthorController extends AsyncNotifier { final Message message; AuthorController(this.message); @override Future build() async { final member = await ref.watch( UserController.provider(message.authorId).future, ); final pmp = message.metadata?["pmp"] == null ? null : Membership.fromContent( IMap(message.metadata?["pmp"]), message.authorId, ref.watch( ClientStateController.provider.select( (value) => value?.homeserverUrl, ), ) ?? "", ); return Membership( status: member?.status ?? MembershipStatus.leave, avatarUrl: pmp?.avatarUrl ?? member?.avatarUrl, displayName: pmp?.displayName ?? member?.displayName ?? message.authorId.localpart, userId: message.authorId, ); } static final provider = AsyncNotifierProvider.family( AuthorController.new, ); }