From ccf5cb798daa1a2e22b0d9b0875ac5776c3b80db Mon Sep 17 00:00:00 2001 From: ggurdin <46800240+ggurdin@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:56:45 -0400 Subject: [PATCH] fix: adjust spacing in invitation page (#4496) --- .../pangea_invitation_selection_view.dart | 213 +++++++++--------- 1 file changed, 106 insertions(+), 107 deletions(-) diff --git a/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart b/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart index d1cdfc95a..b6cc3ccd4 100644 --- a/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart +++ b/lib/pangea/chat_settings/pages/pangea_invitation_selection_view.dart @@ -86,9 +86,12 @@ class PangeaInvitationSelectionView extends StatelessWidget { body: MaxWidthBody( maxWidth: 800.0, withScrolling: false, + showBorder: false, + padding: const EdgeInsets.all(0), child: Padding( - padding: const EdgeInsets.all(20.0), + padding: const EdgeInsets.all(16.0), child: Column( + spacing: 12.0, children: [ TextField( controller: controller.controller, @@ -122,7 +125,6 @@ class PangeaInvitationSelectionView extends StatelessWidget { ), onChanged: controller.searchUserWithCoolDown, ), - const SizedBox(height: 12.0), Align( alignment: Alignment.centerLeft, child: SingleChildScrollView( @@ -149,119 +151,114 @@ class PangeaInvitationSelectionView extends StatelessWidget { ), ), Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 40.0), - child: StreamBuilder( - stream: room.client.onRoomState.stream - .where((update) => update.roomId == room.id) - .rateLimit(const Duration(seconds: 1)), - builder: (context, snapshot) { - final participants = - room.getParticipants().map((user) => user.id).toSet(); - return controller.filter == InvitationFilter.public - ? ListView.builder( - itemCount: controller.foundProfiles.length, - itemBuilder: (BuildContext context, int i) => - _InviteContactListTile( - profile: controller.foundProfiles[i], - isMember: participants.contains( - controller.foundProfiles[i].userId, - ), - onTap: () => controller.inviteAction( - controller.foundProfiles[i].userId, - ), - controller: controller, + child: StreamBuilder( + stream: room.client.onRoomState.stream + .where((update) => update.roomId == room.id) + .rateLimit(const Duration(seconds: 1)), + builder: (context, snapshot) { + final participants = + room.getParticipants().map((user) => user.id).toSet(); + return controller.filter == InvitationFilter.public + ? ListView.builder( + itemCount: controller.foundProfiles.length, + itemBuilder: (BuildContext context, int i) => + _InviteContactListTile( + profile: controller.foundProfiles[i], + isMember: participants.contains( + controller.foundProfiles[i].userId, ), - ) - : ListView.builder( - itemCount: contacts.length + 2, - itemBuilder: (BuildContext context, int i) { - if (i == 0) { - return controller.filter == - InvitationFilter.space && - controller.spaceParent != null - ? ListTile( - leading: ClipPath( - clipper: MapClipper(), - child: Avatar( - mxContent: controller - .spaceParent!.avatar, - name: controller.spaceParent! - .getLocalizedDisplayname(), - borderRadius: - BorderRadius.circular( - AppConfig.borderRadius / 4, - ), - ), - ), - title: Text( - controller.spaceParent! + onTap: () => controller.inviteAction( + controller.foundProfiles[i].userId, + ), + controller: controller, + ), + ) + : ListView.builder( + itemCount: contacts.length + 2, + itemBuilder: (BuildContext context, int i) { + if (i == 0) { + return controller.filter == + InvitationFilter.space && + controller.spaceParent != null + ? ListTile( + leading: ClipPath( + clipper: MapClipper(), + child: Avatar( + mxContent: + controller.spaceParent!.avatar, + name: controller.spaceParent! .getLocalizedDisplayname(), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - subtitle: Text( - L10n.of(context).countParticipants( - controller.spaceParent!.summary - .mJoinedMemberCount ?? - 1, + borderRadius: BorderRadius.circular( + AppConfig.borderRadius / 4, ), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), - trailing: TextButton.icon( - onPressed: - controller.inviteAllInSpace, - label: Text( - L10n.of(context).inviteAllInSpace, - ), - icon: const Icon(Icons.add), - ), - ) - : const SizedBox(); - } - - i--; - - if (i == contacts.length) { - return Padding( - padding: const EdgeInsets.all(16.0), - child: SizedBox( - width: 450, - child: CachedNetworkImage( - imageUrl: - "${AppConfig.assetsBaseURL}/${RoomSettingsConstants.referFriendAsset}", - errorWidget: (context, url, error) => - const SizedBox(), - placeholder: (context, url) => - const Center( - child: CircularProgressIndicator - .adaptive(), ), + title: Text( + controller.spaceParent! + .getLocalizedDisplayname(), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + subtitle: Text( + L10n.of(context).countParticipants( + controller.spaceParent!.summary + .mJoinedMemberCount ?? + 1, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + trailing: TextButton.icon( + onPressed: + controller.inviteAllInSpace, + label: Text( + L10n.of(context).inviteAllInSpace, + ), + icon: const Icon(Icons.add), + ), + ) + : const SizedBox(); + } + + i--; + + if (i == contacts.length) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: SizedBox( + width: 450, + child: CachedNetworkImage( + imageUrl: + "${AppConfig.assetsBaseURL}/${RoomSettingsConstants.referFriendAsset}", + errorWidget: (context, url, error) => + const SizedBox(), + placeholder: (context, url) => + const Center( + child: CircularProgressIndicator + .adaptive(), ), ), - ); - } - return _InviteContactListTile( - user: contacts[i], - profile: Profile( - avatarUrl: contacts[i].avatarUrl, - displayName: contacts[i].displayName ?? - contacts[i].id.localpart ?? - L10n.of(context).user, - userId: contacts[i].id, ), - isMember: - participants.contains(contacts[i].id), - onTap: () => controller.inviteAction( - contacts[i].id, - ), - controller: controller, ); - }, - ); - }, - ), + } + return _InviteContactListTile( + user: contacts[i], + profile: Profile( + avatarUrl: contacts[i].avatarUrl, + displayName: contacts[i].displayName ?? + contacts[i].id.localpart ?? + L10n.of(context).user, + userId: contacts[i].id, + ), + isMember: participants.contains(contacts[i].id), + onTap: () => controller.inviteAction( + contacts[i].id, + ), + controller: controller, + ); + }, + ); + }, ), ), Row( @@ -312,7 +309,9 @@ class PangeaInvitationSelectionView extends StatelessWidget { "$initialUrl/#/join_with_link?${SpaceConstants.classCode}=${room.classCode}"; } - await Clipboard.setData(ClipboardData(text: toCopy)); + await Clipboard.setData( + ClipboardData(text: toCopy), + ); ScaffoldMessenger.of( context, ).showSnackBar(