1
0
mirror of https://github.com/flutter/samples.git synced 2026-09-05 17:10:37 +00:00

Release 3.47 (#2879)

Minor updates for release 3.47

## Pre-launch Checklist

- [x] I read the [Flutter Style Guide] _recently_, and have followed its
advice.
- [x] I signed the [CLA].
- [x] I read the [Contributors Guide].
- [x] I have added sample code updates to the [changelog].
- [x] I updated/added relevant documentation (doc comments with `///`).


If you need help, consider asking for advice on the #hackers-devrel
channel on [Discord].

<!-- Links -->
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Style-guide-for-Flutter-repo.md
[CLA]: https://cla.developers.google.com/
[Discord]:
https://github.com/flutter/flutter/blob/master/docs/contributing/Chat.md
[Contributors Guide]:
https://github.com/flutter/samples/blob/main/CONTRIBUTING.md
[changelog]: ../CHANGELOG.md

---------

Co-authored-by: Parker Lougheed <parlough@gmail.com>
This commit is contained in:
Eric Windmill
2026-08-12 12:21:23 -07:00
committed by GitHub
parent e0136e5ebb
commit 0c5ca75d29
96 changed files with 1711 additions and 723 deletions

View File

@@ -1,28 +1 @@
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at https://dart.dev/lints.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
include: ../analysis_options.yaml

View File

@@ -31,9 +31,9 @@ class GalleryHome extends StatelessWidget {
),
],
),
tabBuilder: (BuildContext context, int index) {
tabBuilder: (context, index) {
return CupertinoTabView(
builder: (BuildContext context) {
builder: (context) {
return switch (index) {
0 => const WidgetsPage(),
1 => SettingsPage(

View File

@@ -54,7 +54,7 @@ class _SettingsPageState extends State<SettingsPage> {
title: const Text('Dark Mode'),
trailing: CupertinoSwitch(
value: isDarkMode,
onChanged: (bool isActive) {
onChanged: (isActive) {
setState(() {
isDarkMode = isActive;
widget.onThemeChange(isActive);
@@ -70,7 +70,7 @@ class _SettingsPageState extends State<SettingsPage> {
value: _textSize,
min: 0.5,
max: 1.5,
onChanged: (double value) {
onChanged: (value) {
setState(() {
_textSize = value;
});
@@ -103,7 +103,7 @@ class _SettingsPageState extends State<SettingsPage> {
onTap: () {
showCupertinoDialog<void>(
context: context,
builder: (BuildContext context) => CupertinoAlertDialog(
builder: (context) => CupertinoAlertDialog(
title: const Text('Reset Settings'),
content: const Text(
'Are you sure you want to reset all settings?',

View File

@@ -13,7 +13,7 @@ class ActionSheetPage extends StatelessWidget {
onPressed: () {
showCupertinoModalPopup<void>(
context: context,
builder: (BuildContext context) => CupertinoActionSheet(
builder: (context) => CupertinoActionSheet(
title: const Text('Title'),
message: const Text('Message'),
actions: <CupertinoActionSheetAction>[

View File

@@ -13,7 +13,7 @@ class AlertDialogPage extends StatelessWidget {
onPressed: () {
showCupertinoDialog<void>(
context: context,
builder: (BuildContext context) => CupertinoAlertDialog(
builder: (context) => CupertinoAlertDialog(
title: const Text('Alert'),
content: const Text('This is a sample alert dialog.'),
actions: <CupertinoDialogAction>[

View File

@@ -17,7 +17,7 @@ class _CheckboxPageState extends State<CheckboxPage> {
child: Center(
child: CupertinoCheckbox(
value: _value,
onChanged: (bool? value) {
onChanged: (value) {
setState(() {
_value = value!;
});

View File

@@ -10,7 +10,7 @@ class DatePickerPage extends StatelessWidget {
child: Center(
child: SizedBox(
height: 200,
child: CupertinoDatePicker(onDateTimeChanged: (DateTime newDate) {}),
child: CupertinoDatePicker(onDateTimeChanged: (newDate) {}),
),
),
);

View File

@@ -12,7 +12,7 @@ class PickerPage extends StatelessWidget {
height: 200,
child: CupertinoPicker(
itemExtent: 32,
onSelectedItemChanged: (int index) {},
onSelectedItemChanged: (index) {},
children: const <Widget>[Text('One'), Text('Two'), Text('Three')],
),
),

View File

@@ -15,7 +15,7 @@ class PopupSurfacePage extends StatelessWidget {
onPressed: () {
showCupertinoModalPopup<void>(
context: context,
builder: (BuildContext context) {
builder: (context) {
return CupertinoPopupSurface(
child: Container(
color: CupertinoColors.white,

View File

@@ -17,7 +17,7 @@ class _RadioPageState extends State<RadioPage> {
child: Center(
child: RadioGroup(
groupValue: _selectedValue,
onChanged: (int? value) {
onChanged: (value) {
setState(() {
_selectedValue = value!;
});

View File

@@ -13,10 +13,10 @@ class ScrollbarPage extends StatelessWidget {
child: ListView.separated(
controller: controller,
itemCount: 100,
itemBuilder: (BuildContext context, int index) {
itemBuilder: (context, index) {
return CupertinoListTile(title: Text('Item $index'));
},
separatorBuilder: (BuildContext context, int index) {
separatorBuilder: (context, index) {
return Container(height: 1, color: CupertinoColors.opaqueSeparator);
},
),

View File

@@ -23,7 +23,7 @@ class _SegmentedControlPageState extends State<SegmentedControlPage> {
1: Text('Two'),
2: Text('Three'),
},
onValueChanged: (int val) {
onValueChanged: (val) {
setState(() {
_selectedIndex = val;
});

View File

@@ -13,20 +13,21 @@ class SheetPage extends StatelessWidget {
onPressed: () {
Navigator.of(context).push(
CupertinoSheetRoute<void>(
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')),
);
},
scrollableBuilder:
(context, controller) {
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')),
);
},
),
);
},

View File

@@ -17,7 +17,7 @@ class _SliderPageState extends State<SliderPage> {
child: Center(
child: CupertinoSlider(
value: _value,
onChanged: (double value) {
onChanged: (value) {
setState(() {
_value = value;
});

View File

@@ -25,7 +25,7 @@ class _SlidingSegmentedControlPageState
1: Text('Two'),
2: Text('Three'),
},
onValueChanged: (int? value) {
onValueChanged: (value) {
setState(() {
_groupValue = value;
});

View File

@@ -17,7 +17,7 @@ class _SwitchPageState extends State<SwitchPage> {
child: Center(
child: CupertinoSwitch(
value: _value,
onChanged: (bool value) {
onChanged: (value) {
setState(() {
_value = value;
});

View File

@@ -11,7 +11,7 @@ class TimePickerPage extends StatelessWidget {
child: SizedBox(
height: 200,
child: CupertinoTimerPicker(
onTimerDurationChanged: (Duration newDuration) {},
onTimerDurationChanged: (newDuration) {},
),
),
),

View File

@@ -54,7 +54,7 @@ class CustomCupertinoListTile extends StatelessWidget {
onTap: () {
Navigator.of(context).push(
CupertinoPageRoute<void>(
builder: (BuildContext context) {
builder: (context) {
return WidgetDetailPage(title: title);
},
),