From 5c957adc5c3a0649db427c63e449c3cc3a82fdae Mon Sep 17 00:00:00 2001 From: Eric Windmill Date: Tue, 21 Oct 2025 09:22:02 -0700 Subject: [PATCH] adds new components to the gallery --- .gemini/settings.json | 8 ++-- .gemini/settings.json.orig | 11 +++++ cupertino_gallery/lib/widget_detail_page.dart | 9 ++++ .../lib/widgets/alert_dialog_page.dart | 11 +++-- .../lib/widgets/checkbox_page.dart | 31 +++++++++++++ .../lib/widgets/list_tile_page.dart | 2 +- cupertino_gallery/lib/widgets/radio_page.dart | 46 +++++++++++++++++++ .../lib/widgets/scrollbar_page.dart | 6 +-- cupertino_gallery/lib/widgets/sheet_page.dart | 39 ++++++++++++++++ cupertino_gallery/lib/widgets_page.dart | 3 ++ 10 files changed, 156 insertions(+), 10 deletions(-) create mode 100644 .gemini/settings.json.orig create mode 100644 cupertino_gallery/lib/widgets/checkbox_page.dart create mode 100644 cupertino_gallery/lib/widgets/radio_page.dart create mode 100644 cupertino_gallery/lib/widgets/sheet_page.dart diff --git a/.gemini/settings.json b/.gemini/settings.json index 715d896d9..ab9a0fc75 100644 --- a/.gemini/settings.json +++ b/.gemini/settings.json @@ -1,4 +1,7 @@ { + "context": { + "fileName": "/.prompts/llm.md" + }, "mcpServers": { "dart": { "command": "dart", @@ -6,6 +9,5 @@ "mcp-server" ] } - }, - "contextFileName": "/.prompts/llm.md" -} + } +} \ No newline at end of file diff --git a/.gemini/settings.json.orig b/.gemini/settings.json.orig new file mode 100644 index 000000000..715d896d9 --- /dev/null +++ b/.gemini/settings.json.orig @@ -0,0 +1,11 @@ +{ + "mcpServers": { + "dart": { + "command": "dart", + "args": [ + "mcp-server" + ] + } + }, + "contextFileName": "/.prompts/llm.md" +} diff --git a/cupertino_gallery/lib/widget_detail_page.dart b/cupertino_gallery/lib/widget_detail_page.dart index dca76577f..bd289c4f5 100644 --- a/cupertino_gallery/lib/widget_detail_page.dart +++ b/cupertino_gallery/lib/widget_detail_page.dart @@ -4,14 +4,17 @@ import 'widgets/action_sheet_page.dart'; import 'widgets/activity_indicator_page.dart'; import 'widgets/alert_dialog_page.dart'; import 'widgets/button_page.dart'; +import 'widgets/checkbox_page.dart'; import 'widgets/context_menu_page.dart'; import 'widgets/date_picker_page.dart'; import 'widgets/list_tile_page.dart'; import 'widgets/picker_page.dart'; import 'widgets/popup_surface_page.dart'; +import 'widgets/radio_page.dart'; import 'widgets/scrollbar_page.dart'; import 'widgets/search_text_field_page.dart'; import 'widgets/segmented_control_page.dart'; +import 'widgets/sheet_page.dart'; import 'widgets/slider_page.dart'; import 'widgets/sliding_segmented_control_page.dart'; import 'widgets/switch_page.dart'; @@ -35,6 +38,8 @@ class WidgetDetailPage extends StatelessWidget { return const AlertDialogPage(); case 'Button': return const ButtonPage(); + case 'Checkbox': + return const CheckboxPage(); case 'Context Menu': return const ContextMenuPage(); case 'Date Picker': @@ -45,12 +50,16 @@ class WidgetDetailPage extends StatelessWidget { return const PickerPage(); case 'Popup Surface': return const PopupSurfacePage(); + case 'Radio': + return const RadioPage(); case 'Scrollbar': return const ScrollbarPage(); case 'Search Text Field': return const SearchTextFieldPage(); case 'Segmented Control': return const SegmentedControlPage(); + case 'Sheet': + return const SheetPage(); case 'Slider': return const SliderPage(); case 'Sliding Segmented Control': diff --git a/cupertino_gallery/lib/widgets/alert_dialog_page.dart b/cupertino_gallery/lib/widgets/alert_dialog_page.dart index 423d9839d..416ba5160 100644 --- a/cupertino_gallery/lib/widgets/alert_dialog_page.dart +++ b/cupertino_gallery/lib/widgets/alert_dialog_page.dart @@ -6,9 +6,7 @@ class AlertDialogPage extends StatelessWidget { @override Widget build(BuildContext context) { return CupertinoPageScaffold( - navigationBar: const CupertinoNavigationBar( - middle: Text('Alert Dialog'), - ), + navigationBar: const CupertinoNavigationBar(middle: Text('Alert Dialog')), child: Center( child: CupertinoButton( child: const Text('Show Alert Dialog'), @@ -25,6 +23,13 @@ class AlertDialogPage extends StatelessWidget { Navigator.pop(context); }, ), + CupertinoDialogAction( + isDefaultAction: true, + child: const Text('NO'), + onPressed: () { + Navigator.pop(context); + }, + ), ], ), ); diff --git a/cupertino_gallery/lib/widgets/checkbox_page.dart b/cupertino_gallery/lib/widgets/checkbox_page.dart new file mode 100644 index 000000000..357cb0746 --- /dev/null +++ b/cupertino_gallery/lib/widgets/checkbox_page.dart @@ -0,0 +1,31 @@ +import 'package:flutter/cupertino.dart'; + +class CheckboxPage extends StatefulWidget { + const CheckboxPage({super.key}); + + @override + State createState() => _CheckboxPageState(); +} + +class _CheckboxPageState extends State { + bool _value = false; + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar( + middle: Text('Checkbox'), + ), + child: Center( + child: CupertinoCheckbox( + value: _value, + onChanged: (bool? value) { + setState(() { + _value = value!; + }); + }, + ), + ), + ); + } +} diff --git a/cupertino_gallery/lib/widgets/list_tile_page.dart b/cupertino_gallery/lib/widgets/list_tile_page.dart index 3e31202f7..4821c14fd 100644 --- a/cupertino_gallery/lib/widgets/list_tile_page.dart +++ b/cupertino_gallery/lib/widgets/list_tile_page.dart @@ -10,7 +10,7 @@ class ListTilePage extends StatelessWidget { child: Center( child: ListView( children: [ - CupertinoListSection( + CupertinoListSection.insetGrouped( children: [ CupertinoListTile( title: Text('Title'), diff --git a/cupertino_gallery/lib/widgets/radio_page.dart b/cupertino_gallery/lib/widgets/radio_page.dart new file mode 100644 index 000000000..f5e768472 --- /dev/null +++ b/cupertino_gallery/lib/widgets/radio_page.dart @@ -0,0 +1,46 @@ +import 'package:flutter/cupertino.dart'; + +class RadioPage extends StatefulWidget { + const RadioPage({super.key}); + + @override + State createState() => _RadioPageState(); +} + +class _RadioPageState extends State { + int _selectedValue = 0; + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar(middle: Text('Radio')), + child: Center( + child: RadioGroup( + groupValue: _selectedValue, + onChanged: (int? value) { + setState(() { + _selectedValue = value!; + }); + }, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + CupertinoListTile( + title: const Text('Option 1'), + leading: CupertinoRadio(value: 0), + ), + CupertinoListTile( + title: const Text('Option 2'), + leading: CupertinoRadio(value: 1), + ), + CupertinoListTile( + title: const Text('Option 3'), + leading: CupertinoRadio(value: 2), + ), + ], + ), + ), + ), + ); + } +} diff --git a/cupertino_gallery/lib/widgets/scrollbar_page.dart b/cupertino_gallery/lib/widgets/scrollbar_page.dart index f40543671..fdecb34cb 100644 --- a/cupertino_gallery/lib/widgets/scrollbar_page.dart +++ b/cupertino_gallery/lib/widgets/scrollbar_page.dart @@ -5,13 +5,13 @@ class ScrollbarPage extends StatelessWidget { @override Widget build(BuildContext context) { - final ScrollController _controller = ScrollController(); + final ScrollController controller = ScrollController(); return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar(middle: Text('Scrollbar')), child: CupertinoScrollbar( - controller: _controller, + controller: controller, child: ListView.separated( - controller: _controller, + controller: controller, itemCount: 100, itemBuilder: (BuildContext context, int index) { return CupertinoListTile(title: Text('Item $index')); diff --git a/cupertino_gallery/lib/widgets/sheet_page.dart b/cupertino_gallery/lib/widgets/sheet_page.dart new file mode 100644 index 000000000..1020135d6 --- /dev/null +++ b/cupertino_gallery/lib/widgets/sheet_page.dart @@ -0,0 +1,39 @@ +import 'package:flutter/cupertino.dart'; + +class SheetPage extends StatelessWidget { + const SheetPage({super.key}); + + @override + Widget build(BuildContext context) { + return CupertinoPageScaffold( + navigationBar: const CupertinoNavigationBar(middle: Text('Sheet')), + child: Center( + child: CupertinoButton.filled( + child: const Text('Show Sheet'), + onPressed: () { + Navigator.of(context).push( + CupertinoSheetRoute( + builder: (BuildContext context) { + return CupertinoPageScaffold( + navigationBar: CupertinoNavigationBar( + middle: const Text('Sheet'), + trailing: GestureDetector( + child: const Icon(CupertinoIcons.xmark), + onTap: () { + Navigator.of(context).pop(); + }, + ), + ), + child: const Center( + child: Text('This is a sheet'), + ), + ); + }, + ), + ); + }, + ), + ), + ); + } +} diff --git a/cupertino_gallery/lib/widgets_page.dart b/cupertino_gallery/lib/widgets_page.dart index 2cf0bae14..3c338299b 100644 --- a/cupertino_gallery/lib/widgets_page.dart +++ b/cupertino_gallery/lib/widgets_page.dart @@ -17,14 +17,17 @@ class WidgetsPage extends StatelessWidget { CustomCupertinoListTile(title: 'Activity Indicator'), CustomCupertinoListTile(title: 'Alert Dialog'), CustomCupertinoListTile(title: 'Button'), + CustomCupertinoListTile(title: 'Checkbox'), CustomCupertinoListTile(title: 'Context Menu'), CustomCupertinoListTile(title: 'Date Picker'), CustomCupertinoListTile(title: 'List Tile'), CustomCupertinoListTile(title: 'Picker'), CustomCupertinoListTile(title: 'Popup Surface'), + CustomCupertinoListTile(title: 'Radio'), CustomCupertinoListTile(title: 'Scrollbar'), CustomCupertinoListTile(title: 'Search Text Field'), CustomCupertinoListTile(title: 'Segmented Control'), + CustomCupertinoListTile(title: 'Sheet'), CustomCupertinoListTile(title: 'Slider'), CustomCupertinoListTile(title: 'Sliding Segmented Control'), CustomCupertinoListTile(title: 'Switch'),