Repository: zulip/zulip-flutter (language: dart)

Issue:
Settings page should scroll
The settings page should be scrollable if the content doesn't all fit on the screen.

Currently there are only a few settings, so for most users this doesn't happen. But it can happen if the user has a very small screen (https://github.com/zulip/zulip-flutter/issues/1898#issuecomment-3386032763) or have their display zoomed in for accessibility. In the future it'll probably happen for more users, as we add more settings.




Discussion hints:
nan

Pull request: settings: Make page scrollable
| Before | After (Screenshot) |
| ------- | ------------------ |
| ![column_l](https://github.com/user-attachments/assets/5218af2f-3fe8-445a-8380-69694b0f7301) | ![listview_l](https://github.com/user-attachments/assets/21f84210-aeba-49cb-859d-1c7389e6bb84) |
| ![column_d](https://github.com/user-attachments/assets/d4722bf7-5ecd-419f-9013-2799a3022111) | ![listview_d](https://github.com/user-attachments/assets/d949e2bb-199e-470c-8361-a99187f3848b) |


<br>

### Video Recordings

### Before

https://github.com/user-attachments/assets/03716367-b5d9-4f83-84f4-3716abb59829

<br>

### After (Normal)

https://github.com/user-attachments/assets/92a05eab-6789-4811-bb95-271838c864f3

<br>

### After (Increased Text Size to unreasonably high in android settings to test edge case)

https://github.com/user-attachments/assets/c070507f-8a4f-4fcf-8f4f-5731bef5f9d3


Fixes #1904 



Test command: flutter test test/widgets/settings_test.dart --reporter expanded 2>&1

Fix patch:
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(),


Test patch:
diff --git a/test/widgets/settings_test.dart b/test/widgets/settings_test.dart
index e889fa0d3d..a56b93d7d9 100644
--- a/test/widgets/settings_test.dart
+++ b/test/widgets/settings_test.dart
@@ -64,6 +64,21 @@ void main() {
         hasCheckedState: true, isChecked: expectedIsChecked);
   }
 
+  testWidgets('SettingsPage 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);
+    check(lastElementFinder).findsOne();
+  });
+
   group('ThemeSetting', () {
     void checkThemeSetting(WidgetTester tester, {
       required ThemeSetting? expectedThemeSetting,