diff --git a/lib/pages/chat_list/stories_header.dart b/lib/pages/chat_list/stories_header.dart index 73b54fb3..3855363e 100644 --- a/lib/pages/chat_list/stories_header.dart +++ b/lib/pages/chat_list/stories_header.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:adaptive_dialog/adaptive_dialog.dart'; +import 'package:collection/collection.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:future_loading_dialog/future_loading_dialog.dart'; import 'package:matrix/matrix.dart'; @@ -107,11 +108,12 @@ class StoriesHeader extends StatelessWidget { if (client.storiesRooms.isEmpty) { return Container(); } - final stories = client.storiesRooms - ..sort((a, b) => - a.getState(EventTypes.RoomCreate)?.senderId == client.userID - ? -1 - : 1); + final ownStoryRoom = client.storiesRooms + .firstWhereOrNull((r) => r.creatorId == client.userID); + final stories = [ + if (ownStoryRoom != null) ownStoryRoom, + ...client.storiesRooms..remove(ownStoryRoom), + ]; return SizedBox( height: 106, child: ListView.builder( @@ -125,16 +127,16 @@ class StoriesHeader extends StatelessWidget { child: FutureBuilder( future: room.getCreatorProfile(), builder: (context, snapshot) { - final userId = - room.getState(EventTypes.RoomCreate)!.senderId; - final displayname = - snapshot.data?.displayName ?? userId.localpart!; + final userId = room.creatorId; + final displayname = snapshot.data?.displayName ?? + userId?.localpart ?? + 'Unknown'; final avatarUrl = snapshot.data?.avatarUrl; return _StoryButton( profile: Profile( displayName: displayname, avatarUrl: avatarUrl, - userId: userId, + userId: userId ?? 'Unknown', ), showEditFab: userId == client.userID, unread: room.membership == Membership.invite || @@ -284,3 +286,7 @@ class _StoryButton extends StatelessWidget { ); } } + +extension on Room { + String? get creatorId => getState(EventTypes.RoomCreate)?.senderId; +} diff --git a/lib/pages/story/story_view.dart b/lib/pages/story/story_view.dart index 88d5f397..93b8c77b 100644 --- a/lib/pages/story/story_view.dart +++ b/lib/pages/story/story_view.dart @@ -225,34 +225,34 @@ class StoryView extends StatelessWidget { ); }, ), - AnimatedContainer( - duration: const Duration(milliseconds: 200), - padding: const EdgeInsets.all(16.0), - decoration: BoxDecoration( - gradient: event.messageType == MessageTypes.Text - ? LinearGradient( - colors: [ - backgroundColorDark, - backgroundColor, - ], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ) - : null, - ), - alignment: Alignment( - controller.storyThemeData.alignmentX.toDouble() / 100, - controller.storyThemeData.alignmentY.toDouble() / 100, - ), - child: SafeArea( - child: GestureDetector( - onTapDown: controller.hold, - onTapUp: controller.unhold, - onTapCancel: controller.unhold, - onVerticalDragStart: controller.hold, - onVerticalDragEnd: controller.unhold, - onHorizontalDragStart: controller.hold, - onHorizontalDragEnd: controller.unhold, + GestureDetector( + onTapDown: controller.hold, + onTapUp: controller.unhold, + onTapCancel: controller.unhold, + onVerticalDragStart: controller.hold, + onVerticalDragEnd: controller.unhold, + onHorizontalDragStart: controller.hold, + onHorizontalDragEnd: controller.unhold, + child: AnimatedContainer( + duration: const Duration(milliseconds: 200), + padding: const EdgeInsets.all(16.0), + decoration: BoxDecoration( + gradient: event.messageType == MessageTypes.Text + ? LinearGradient( + colors: [ + backgroundColorDark, + backgroundColor, + ], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ) + : null, + ), + alignment: Alignment( + controller.storyThemeData.alignmentX.toDouble() / 100, + controller.storyThemeData.alignmentY.toDouble() / 100, + ), + child: SafeArea( child: LinkText( text: controller.loadingMode ? L10n.of(context)!.loadingPleaseWait