Compare commits

...
Author SHA1 Message Date
a46d93dfc5
filter shown recent emoji to valid emoji 2026-10-04 13:01:06 -04:00
294723fdfb
tweak reply sizing more 2026-10-04 11:22:14 -04:00
4 changed files with 28 additions and 8 deletions

View file

@ -10,6 +10,7 @@
"msgtype", "msgtype",
"muks", "muks",
"prefs", "prefs",
"recents",
"unban", "unban",
"unifiedpush", "unifiedpush",
"unredact", "unredact",

View file

@ -1,18 +1,31 @@
import "package:collection/collection.dart"; import "package:collection/collection.dart";
import "package:fast_immutable_collections/fast_immutable_collections.dart"; import "package:fast_immutable_collections/fast_immutable_collections.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:material_emoji_picker/material_emoji_picker.dart";
import "package:nexus/controllers/account_data.dart"; import "package:nexus/controllers/account_data.dart";
import "package:nexus/controllers/client.dart"; import "package:nexus/controllers/client.dart";
import "package:nexus/models/account_data.dart"; import "package:nexus/models/account_data.dart";
class RecentEmojiController extends Notifier<IList<RecentEmoji>> { class RecentEmojiController extends Notifier<IList<RecentEmoji>> {
@override @override
IList<RecentEmoji> build() => ref.watch( IList<RecentEmoji> build() {
final Set<String> emoji = ref
.watch(EmojiController.provider)
.requireValue
.map((element) => element.emojis)
.flattened
.map((e) => e.value)
.toSet();
final IList<RecentEmoji> recents = ref.watch(
AccountDataController.provider.select( AccountDataController.provider.select(
(value) => value.recentEmoji.recentEmoji, (value) => value.recentEmoji.recentEmoji,
), ),
); );
return .new(recents.where((recent) => emoji.contains(recent.emoji)));
}
Future<void> add(String emoji) => ref Future<void> add(String emoji) => ref
.watch(ClientController.provider.notifier) .watch(ClientController.provider.notifier)
.setAccountData( .setAccountData(

View file

@ -4,6 +4,7 @@ import "package:dynamic_color/dynamic_color.dart";
import "package:flutter/foundation.dart"; import "package:flutter/foundation.dart";
import "package:flutter/services.dart"; import "package:flutter/services.dart";
import "package:flutter_riverpod/flutter_riverpod.dart"; import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:material_emoji_picker/material_emoji_picker.dart";
import "package:media_kit/media_kit.dart"; import "package:media_kit/media_kit.dart";
import "package:nexus/controllers/client_state.dart"; import "package:nexus/controllers/client_state.dart";
import "package:nexus/controllers/gomuks_listener.dart"; import "package:nexus/controllers/gomuks_listener.dart";
@ -154,6 +155,7 @@ class const App({super.key}) extends StatelessWidget {
MemberListOpenedController.provider, MemberListOpenedController.provider,
KeyController.provider(KeyController.roomKey), KeyController.provider(KeyController.roomKey),
KeyController.provider(KeyController.spaceKey), KeyController.provider(KeyController.spaceKey),
EmojiController.provider,
]), ]),
), ),
)) { )) {

View file

@ -13,16 +13,20 @@ class const EventPreview(final Event event, {super.key})
padding: .symmetric(vertical: 4), padding: .symmetric(vertical: 4),
child: Row( child: Row(
mainAxisSize: .min, mainAxisSize: .min,
spacing: 10, spacing: 8,
children: [ children: [
if (event.content is MessageContent) MessageAvatar(event, height: 40), if (event.content is MessageContent) MessageAvatar(event, height: 36),
Flexible( Flexible(
child: Column( child: Column(
mainAxisAlignment: .center, mainAxisAlignment: .center,
crossAxisAlignment: .start, crossAxisAlignment: .start,
children: [ children: [
if (event.content is MessageContent) MessageDisplayname(event), if (event.content is MessageContent)
DefaultTextHeightBehavior(
textHeightBehavior: .new(),
child: MessageDisplayname(event),
),
EventRenderer( EventRenderer(
event.rowId, event.rowId,
roomId: event.roomId, roomId: event.roomId,