47 lines
1.5 KiB
Dart
47 lines
1.5 KiB
Dart
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<Membership> {
|
|
final Message message;
|
|
AuthorController(this.message);
|
|
|
|
@override
|
|
Future<Membership> 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, Membership, Message>(
|
|
AuthorController.new,
|
|
);
|
|
}
|