From d43bd76e6caa6b9a3e6a3cf6b385c07f3a1e8320 Mon Sep 17 00:00:00 2001 From: Eric Windmill Date: Wed, 6 Aug 2025 12:00:00 -0400 Subject: [PATCH] remove some elements and add settings page --- cupertino_gallery/lib/gallery_home.dart | 3 +- cupertino_gallery/lib/main.dart | 8 +- cupertino_gallery/lib/settings_page.dart | 108 ++++++++++++++++++ cupertino_gallery/lib/widget_detail_page.dart | 11 -- .../lib/widgets/segmented_control_page.dart | 2 +- cupertino_gallery/lib/widgets_page.dart | 3 - cupertino_gallery/test/widget_test.dart | 5 +- 7 files changed, 115 insertions(+), 25 deletions(-) create mode 100644 cupertino_gallery/lib/settings_page.dart diff --git a/cupertino_gallery/lib/gallery_home.dart b/cupertino_gallery/lib/gallery_home.dart index b84f0e1be..5558ffe9f 100644 --- a/cupertino_gallery/lib/gallery_home.dart +++ b/cupertino_gallery/lib/gallery_home.dart @@ -1,4 +1,5 @@ import 'package:flutter/cupertino.dart'; +import 'settings_page.dart'; import 'widgets_page.dart'; class GalleryHome extends StatelessWidget { @@ -24,7 +25,7 @@ class GalleryHome extends StatelessWidget { builder: (BuildContext context) { return switch (index) { 0 => const WidgetsPage(), - 1 => const Center(child: Text('Settings')), + 1 => const SettingsPage(), _ => const Center(child: Text('Widgets')), }; }, diff --git a/cupertino_gallery/lib/main.dart b/cupertino_gallery/lib/main.dart index 4af8a6cb5..2c1d98a22 100644 --- a/cupertino_gallery/lib/main.dart +++ b/cupertino_gallery/lib/main.dart @@ -3,7 +3,6 @@ // found in the LICENSE file. import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; import 'gallery_home.dart'; @@ -16,9 +15,6 @@ class CupertinoGalleryApp extends StatelessWidget { @override Widget build(BuildContext context) { - return const CupertinoApp( - title: 'Cupertino Gallery', - home: GalleryHome(), - ); + return const CupertinoApp(title: 'Cupertino Gallery', home: GalleryHome()); } -} \ No newline at end of file +} diff --git a/cupertino_gallery/lib/settings_page.dart b/cupertino_gallery/lib/settings_page.dart new file mode 100644 index 000000000..37f1a05f3 --- /dev/null +++ b/cupertino_gallery/lib/settings_page.dart @@ -0,0 +1,108 @@ +import 'package:flutter/cupertino.dart'; + +class SettingsPage extends StatefulWidget { + const SettingsPage({super.key}); + + @override + State createState() => _SettingsPageState(); +} + +class _SettingsPageState extends State { + bool _darkMode = false; + double _textSize = 1.0; + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar( + middle: Text('Settings'), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CupertinoListSection( + header: const Text('Appearance'), + children: [ + CupertinoListTile( + title: const Text('Dark Mode'), + trailing: CupertinoSwitch( + value: _darkMode, + onChanged: (bool value) { + setState(() { + _darkMode = value; + }); + }, + ), + ), + CupertinoListTile( + title: const Text('Text Size'), + trailing: Text('${(_textSize * 100).toStringAsFixed(0)}%'), + ), + CupertinoSlider( + value: _textSize, + onChanged: (double value) { + setState(() { + _textSize = value; + }); + }, + ), + ], + ), + CupertinoListSection( + header: const Text('General'), + children: [ + CupertinoListTile( + title: const Text('About'), + trailing: const Icon(CupertinoIcons.forward), + onTap: () {}, + ), + CupertinoListTile( + title: const Text('Privacy'), + trailing: const Icon(CupertinoIcons.forward), + onTap: () {}, + ), + CupertinoListTile( + title: const Text('Help'), + trailing: const Icon(CupertinoIcons.forward), + onTap: () {}, + ), + CupertinoListTile( + title: const Text('Reset Settings'), + trailing: const Icon(CupertinoIcons.forward), + onTap: () { + showCupertinoDialog( + context: context, + builder: (BuildContext context) => CupertinoAlertDialog( + title: const Text('Reset Settings'), + content: const Text( + 'Are you sure you want to reset all settings?'), + actions: [ + CupertinoDialogAction( + child: const Text('Cancel'), + onPressed: () { + Navigator.pop(context); + }, + ), + CupertinoDialogAction( + isDestructiveAction: true, + child: const Text('Reset'), + onPressed: () { + setState(() { + _darkMode = false; + _textSize = 1.0; + }); + Navigator.pop(context); + }, + ), + ], + ), + ); + }, + ), + ], + ), + ], + ), + ); + } +} diff --git a/cupertino_gallery/lib/widget_detail_page.dart b/cupertino_gallery/lib/widget_detail_page.dart index f622167ec..dca76577f 100644 --- a/cupertino_gallery/lib/widget_detail_page.dart +++ b/cupertino_gallery/lib/widget_detail_page.dart @@ -7,8 +7,6 @@ import 'widgets/button_page.dart'; import 'widgets/context_menu_page.dart'; import 'widgets/date_picker_page.dart'; import 'widgets/list_tile_page.dart'; -import 'widgets/navigation_bar_page.dart'; -import 'widgets/page_scaffold_page.dart'; import 'widgets/picker_page.dart'; import 'widgets/popup_surface_page.dart'; import 'widgets/scrollbar_page.dart'; @@ -17,9 +15,6 @@ import 'widgets/segmented_control_page.dart'; import 'widgets/slider_page.dart'; import 'widgets/sliding_segmented_control_page.dart'; import 'widgets/switch_page.dart'; -import 'widgets/tab_bar_page.dart'; -import 'widgets/tab_scaffold_page.dart'; -import 'widgets/tab_view_page.dart'; import 'widgets/text_field_page.dart'; import 'widgets/text_theme_page.dart'; import 'widgets/time_picker_page.dart'; @@ -62,12 +57,6 @@ class WidgetDetailPage extends StatelessWidget { return const SlidingSegmentedControlPage(); case 'Switch': return const SwitchPage(); - case 'Tab Bar': - return const TabBarPage(); - case 'Tab Scaffold': - return const TabScaffoldPage(); - case 'Tab View': - return const TabViewPage(); case 'Text Field': return const TextFieldPage(); case 'Text Theme': diff --git a/cupertino_gallery/lib/widgets/segmented_control_page.dart b/cupertino_gallery/lib/widgets/segmented_control_page.dart index 01f5111f6..614ca44b2 100644 --- a/cupertino_gallery/lib/widgets/segmented_control_page.dart +++ b/cupertino_gallery/lib/widgets/segmented_control_page.dart @@ -18,7 +18,7 @@ class _SegmentedControlPageState extends State { ), child: Center( child: CupertinoSegmentedControl( - children: const { + children: { 0: Text('One'), 1: Text('Two'), 2: Text('Three'), diff --git a/cupertino_gallery/lib/widgets_page.dart b/cupertino_gallery/lib/widgets_page.dart index 0564facab..2cf0bae14 100644 --- a/cupertino_gallery/lib/widgets_page.dart +++ b/cupertino_gallery/lib/widgets_page.dart @@ -28,9 +28,6 @@ class WidgetsPage extends StatelessWidget { CustomCupertinoListTile(title: 'Slider'), CustomCupertinoListTile(title: 'Sliding Segmented Control'), CustomCupertinoListTile(title: 'Switch'), - CustomCupertinoListTile(title: 'Tab Bar'), - CustomCupertinoListTile(title: 'Tab Scaffold'), - CustomCupertinoListTile(title: 'Tab View'), CustomCupertinoListTile(title: 'Text Field'), CustomCupertinoListTile(title: 'Text Theme'), CustomCupertinoListTile(title: 'Time Picker'), diff --git a/cupertino_gallery/test/widget_test.dart b/cupertino_gallery/test/widget_test.dart index ded021487..96889cd01 100644 --- a/cupertino_gallery/test/widget_test.dart +++ b/cupertino_gallery/test/widget_test.dart @@ -5,15 +5,14 @@ // gestures. You can also use WidgetTester to find child widgets in the widget // tree, read text, and verify that the values of widget properties are correct. +import 'package:cupertino_gallery/gallery_home.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'package:cupertino_gallery/main.dart'; - void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + await tester.pumpWidget(const GalleryHome()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);