lazy load memberships

This commit is contained in:
Henry Hiles 2026-03-22 16:35:15 -04:00
commit 9054b6b357
No known key found for this signature in database
14 changed files with 231 additions and 197 deletions

View file

@ -22,6 +22,10 @@ class Html extends ConsumerWidget {
html,
textStyle: textStyle,
customWidgetBuilder: (element) {
if (element.attributes.keys.contains("data-mx-profile-fallback")) {
return SizedBox.shrink();
}
if (element.attributes.keys.contains("data-mx-spoiler")) {
return InlineCustomWidget(child: SpoilerText(text: element.text));
}

View file

@ -1,9 +1,9 @@
import "package:flutter/widgets.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/member_controller.dart";
import "package:nexus/controllers/author_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/models/configs/member_config.dart";
import "package:nexus/models/configs/author_config.dart";
import "package:nexus/models/room.dart";
import "package:nexus/widgets/avatar_or_hash.dart";
@ -16,9 +16,7 @@ class MessageAvatar extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) => ref
.watch(
MemberController.provider(
MemberConfig(room: room, userId: message.authorId),
),
AuthorController.provider(AuthorConfig(room: room, message: message)),
)
.betterWhen(
data: (membership) => AvatarOrHash(

View file

@ -1,9 +1,9 @@
import "package:flutter/widgets.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/member_controller.dart";
import "package:nexus/controllers/author_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/models/configs/member_config.dart";
import "package:nexus/models/configs/author_config.dart";
import "package:nexus/models/room.dart";
class MessageDisplayname extends ConsumerWidget {
@ -15,13 +15,11 @@ class MessageDisplayname extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) => ref
.watch(
MemberController.provider(
MemberConfig(room: room, userId: message.authorId),
),
AuthorController.provider(AuthorConfig(room: room, message: message)),
)
.betterWhen(
data: (membership) => Text(
membership.displayName,
"${membership.displayName} ${message.metadata?["pmp"] == null ? "" : "(via ${message.authorId})"}",
style: style,
overflow: TextOverflow.ellipsis,
),

View file

@ -67,7 +67,7 @@ class ReplyWidget extends ConsumerWidget {
mainAxisSize: MainAxisSize.min,
spacing: 8,
children: [
MessageAvatar(message, room),
MessageAvatar(replyMessage, room),
Flexible(
child: MessageDisplayname(
replyMessage,