add profile popovers

This commit is contained in:
Henry Hiles 2026-04-01 16:29:19 -04:00
commit 0b9ddbfbc8
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
11 changed files with 302 additions and 149 deletions

View file

@ -1,8 +1,9 @@
import "package:flutter/widgets.dart";
import "package:flutter/material.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/author_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/helpers/extensions/show_user_popover.dart";
import "package:nexus/widgets/avatar_or_hash.dart";
class MessageAvatar extends ConsumerWidget {
@ -14,10 +15,16 @@ class MessageAvatar extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) => ref
.watch(AuthorController.provider(message))
.betterWhen(
data: (membership) => AvatarOrHash(
membership.avatarUrl,
membership.displayName,
height: height,
data: (membership) => InkWell(
onTapDown: (details) => context.showUserPopover(
membership,
globalPosition: details.globalPosition,
),
child: AvatarOrHash(
membership.avatarUrl,
membership.displayName,
height: height,
),
),
loading: () =>
AvatarOrHash(null, message.authorId.substring(1), height: height),

View file

@ -1,8 +1,9 @@
import "package:flutter/widgets.dart";
import "package:flutter/material.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/controllers/author_controller.dart";
import "package:nexus/helpers/extensions/better_when.dart";
import "package:nexus/helpers/extensions/show_user_popover.dart";
class MessageDisplayname extends ConsumerWidget {
final Message message;
@ -13,10 +14,16 @@ class MessageDisplayname extends ConsumerWidget {
Widget build(BuildContext context, WidgetRef ref) => ref
.watch(AuthorController.provider(message))
.betterWhen(
data: (membership) => Text(
"${membership.displayName}${message.metadata?["pmp"] == null ? "" : " (via ${message.authorId})"}",
style: style,
overflow: TextOverflow.ellipsis,
data: (membership) => InkWell(
onTapDown: (details) => context.showUserPopover(
membership,
globalPosition: details.globalPosition,
),
child: Text(
"${membership.displayName}${message.metadata?["pmp"] == null ? "" : " (via ${message.authorId})"}",
style: style,
overflow: TextOverflow.ellipsis,
),
),
loading: () => Text(""),
);