diff --git a/lib/widgets/settings.dart b/lib/widgets/settings.dart index 5995cdcbfe..bad16c336b 100644 --- a/lib/widgets/settings.dart +++ b/lib/widgets/settings.dart @@ -20,7 +20,7 @@ class SettingsPage extends StatelessWidget { return Scaffold( appBar: ZulipAppBar( title: Text(zulipLocalizations.settingsPageTitle)), - body: Column(children: [ + body: ListView(children: [ const _ThemeSetting(), const _BrowserPreferenceSetting(), const _VisitFirstUnreadSetting(), diff --git a/test/widgets/settings_test.dart b/test/widgets/settings_test.dart index e889fa0d3d..81374597be 100644 --- a/test/widgets/settings_test.dart +++ b/test/widgets/settings_test.dart @@ -64,6 +64,24 @@ void main() { hasCheckedState: true, isChecked: expectedIsChecked); } + group('SettingsPage scroll behavior', () { + testWidgets('content is scrollable when taller than a screenful', (tester) async { + tester.view.physicalSize = const Size(200, 200); + tester.view.devicePixelRatio = 1.0; + addTearDown(tester.view.reset); + await prepare(tester); + + final lastElementFinder = GlobalSettingsStore.experimentalFeatureFlags.isNotEmpty + ? find.text("Experimental features") + : find.text("Mark messages as read on scroll"); + check(lastElementFinder).findsNothing(); + + await tester.scrollUntilVisible(lastElementFinder, 100, + scrollable: find.byType(Scrollable)); + check(lastElementFinder).findsOne(); + }); + }); + group('ThemeSetting', () { void checkThemeSetting(WidgetTester tester, { required ThemeSetting? expectedThemeSetting,