From 3d06006ca450f9e03ed6425405fda3718e75c389 Mon Sep 17 00:00:00 2001 From: krille-chan Date: Sun, 26 Nov 2023 14:05:36 +0100 Subject: [PATCH] fix: Only load first pinned event --- lib/pages/chat/pinned_events.dart | 45 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/lib/pages/chat/pinned_events.dart b/lib/pages/chat/pinned_events.dart index e7c90c6e..669ca737 100644 --- a/lib/pages/chat/pinned_events.dart +++ b/lib/pages/chat/pinned_events.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_linkify/flutter_linkify.dart'; +import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/app_config.dart'; @@ -17,10 +18,18 @@ class PinnedEvents extends StatelessWidget { const PinnedEvents(this.controller, {super.key}); - Future _displayPinnedEventsDialog( - BuildContext context, - List events, - ) async { + Future _displayPinnedEventsDialog(BuildContext context) async { + final eventsResult = await showFutureLoadingDialog( + context: context, + future: () => Future.wait( + controller.room.pinnedEventIds.map( + (eventId) => controller.room.getEventById(eventId), + ), + ), + ); + final events = eventsResult.result; + if (events == null) return; + final eventId = events.length == 1 ? events.single?.eventId : await showConfirmationDialog( @@ -51,23 +60,14 @@ class PinnedEvents extends StatelessWidget { if (pinnedEventIds.isEmpty) { return const SizedBox.shrink(); } - final completers = pinnedEventIds.map>((e) { - final completer = Completer(); - controller.room - .getEventById(e) - .then((value) => completer.complete(value)); - return completer; - }); - return FutureBuilder>( - future: Future.wait(completers.map((e) => e.future).toList()), - builder: (context, snapshot) { - final pinnedEvents = snapshot.data; - final event = (pinnedEvents != null && pinnedEvents.isNotEmpty) - ? snapshot.data?.last - : null; - if (event == null || pinnedEvents == null) { - return Container(); + return FutureBuilder( + future: controller.room.getEventById(pinnedEventIds.last), + builder: (context, snapshot) { + final event = snapshot.data; + + if (event == null) { + return const SizedBox.shrink(); } final fontSize = AppConfig.messageFontSize * AppConfig.fontSizeFactor; @@ -80,10 +80,7 @@ class PinnedEvents extends StatelessWidget { ), ), child: InkWell( - onTap: () => _displayPinnedEventsDialog( - context, - pinnedEvents, - ), + onTap: () => _displayPinnedEventsDialog(context), child: Row( children: [ IconButton(