From 0b83881a3dc673d955d1e391e84ec6e6ac3c1d3d Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 13 May 2025 14:04:35 +0100 Subject: [PATCH] fix: chat scroll (NDK bugs) --- lib/rx_filter.dart | 2 +- lib/utils.dart | 5 ++++- lib/widgets/chat.dart | 23 +++++++++++++++-------- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/lib/rx_filter.dart b/lib/rx_filter.dart index 78b4bca..f26f220 100644 --- a/lib/rx_filter.dart +++ b/lib/rx_filter.dart @@ -77,7 +77,7 @@ class _RxFilter extends State> { if ([0, 3].contains(ev.kind) || (ev.kind >= 10000 && ev.kind < 20000)) { return "${ev.kind}:${ev.pubKey}"; } else if (ev.kind >= 30000 && ev.kind < 40000) { - return "${ev.kind}:${ev.pubKey}:${ev.getDtag()!}"; + return "${ev.kind}:${ev.pubKey}:${ev.getDtag()}"; } else { return ev.id; } diff --git a/lib/utils.dart b/lib/utils.dart index 82e90ce..c871189 100644 --- a/lib/utils.dart +++ b/lib/utils.dart @@ -130,6 +130,9 @@ StreamInfo extractStreamInfo(Nip01Event ev) { matchTag(t, 'service', (v) => ret.service = v); if (t[0] == "relays") { ret.relays = t.slice(1); + if (ret.relays!.isEmpty) { + ret.relays = null; + } } } @@ -235,7 +238,7 @@ String formatSats(int n) { if (n >= 1000000) { return "${fmt.format(n / 1000000)}M"; } else if (n >= 1500) { - return "${fmt.format(n / 1000)}k"; + return "${fmt.format(n / 1000)}K"; } else { return fmt.format(n); } diff --git a/lib/widgets/chat.dart b/lib/widgets/chat.dart index 1408433..8d1c5b1 100644 --- a/lib/widgets/chat.dart +++ b/lib/widgets/chat.dart @@ -24,11 +24,8 @@ class ChatWidget extends StatelessWidget { var filters = [ Filter(kinds: [1311, 9735], limit: 200, aTags: [stream.aTag]), - Filter(kinds: [Nip51List.kMute], authors: muteLists), + //Filter(kinds: [Nip51List.kMute], authors: muteLists), // bugged ]; - if (stream.info.goal != null) { - filters.add(Filter(kinds: [9041], ids: [stream.info.goal!])); - } return RxFilter( relays: stream.info.relays, filters: filters, @@ -57,9 +54,6 @@ class ChatWidget extends StatelessWidget { .reversed .toList(); - final goal = filteredChat.firstWhereOrNull( - (e) => e.id == stream.info.goal, - ); final zaps = filteredChat .where((e) => e.kind == 9735) @@ -70,7 +64,8 @@ class ChatWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (zaps.isNotEmpty) _TopZappersWidget(events: zaps), - if (goal != null) _StreamGoalWidget(goal: goal), + if (stream.info.goal != null) + _StreamGoalWidget.id(stream.info.goal!), Expanded( child: ListView.builder( reverse: true, @@ -129,6 +124,18 @@ class _StreamGoalWidget extends StatelessWidget { const _StreamGoalWidget({required this.goal}); + static Widget id(String id) { + return RxFilter( + filters: [ + Filter(kinds: [9041], ids: [id]), + ], + builder: (ctx, state) { + final goal = state?.firstOrNull; + return goal != null ? _StreamGoalWidget(goal: goal) : SizedBox.shrink(); + }, + ); + } + @override Widget build(BuildContext context) { final max = int.parse(goal.getFirstTag("amount") ?? "1");