Fix oversized mobile Manage channel sheet (#1774)

Signed-off-by: Wes <wesbillman@users.noreply.github.com>
Co-authored-by: Pinky <44b8e82baa6e0e254e0208d68f335c283c94e7b78dd1fa10d5a49d3f13dd0435@sprout-oss.stage.blox.sqprod.co>
This commit is contained in:
Wes
2026-07-12 10:19:09 -07:00
committed by GitHub
co-authored by Pinky
parent e07e02c0eb
commit 81b55c9f3e
2 changed files with 43 additions and 2 deletions
@@ -215,6 +215,10 @@ class ChannelDetailPage extends HookConsumerWidget {
context: context,
isScrollControlled: true,
showDragHandle: true,
constraints: BoxConstraints(
maxWidth: 640,
maxHeight: MediaQuery.sizeOf(context).height * 0.9,
),
builder: (_) => ManageChannelSheet(channel: resolvedChannel),
);
if (shouldClose == true && context.mounted) {
@@ -117,6 +117,7 @@ Widget _buildTestable({
ChannelActions Function(Ref ref)? createChannelActions,
ReadStateNotifier? readStateNotifier,
_FakeMessagesNotifier? messagesNotifier,
String? canvasContent,
}) {
final resolvedChannel = channel ?? _testChannel;
final fakeChannelsNotifier =
@@ -138,8 +139,8 @@ Widget _buildTestable({
(ref) async => ChannelDetails.fromChannel(resolvedChannel),
),
channelCanvasProvider(_channelId).overrideWith(
(ref) async => const ChannelCanvas(
content: null,
(ref) async => ChannelCanvas(
content: canvasContent,
updatedAt: null,
authorPubkey: null,
),
@@ -371,6 +372,42 @@ void main() {
expect(find.text('Message #general'), findsOneWidget);
});
testWidgets('keeps manage sheet dismissible with a long canvas', (
tester,
) async {
tester.view.physicalSize = const Size(400, 800);
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
await tester.pumpWidget(
_buildTestable(
messages: const [],
canvasContent: List.generate(
80,
(index) => 'Canvas line $index',
).join('\n'),
),
);
await tester.pumpAndSettle();
await tester.tap(find.byTooltip('Manage channel'));
await tester.pumpAndSettle();
final sheet = find.byType(BottomSheet);
expect(sheet, findsOneWidget);
expect(tester.getSize(sheet).height, lessThanOrEqualTo(720));
final sheetTop = tester.getTopLeft(sheet).dy;
await tester.dragFrom(
Offset(tester.view.physicalSize.width / 2, sheetTop + 12),
const Offset(0, 800),
);
await tester.pumpAndSettle();
expect(sheet, findsNothing);
});
testWidgets('shows empty state when no messages', (tester) async {
await tester.pumpWidget(_buildTestable(messages: []));
await tester.pumpAndSettle();