Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
7943ae55
Unverified
Commit
7943ae55
authored
Feb 15, 2022
by
Taha Tesser
Committed by
GitHub
Feb 15, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
CupertinoSegmentedControl: Add an interactive example (#98154)
parent
dfd42444
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
122 additions
and
38 deletions
+122
-38
cupertino_segmented_control.0.dart
...tino/segmented_control/cupertino_segmented_control.0.dart
+94
-0
cupertino_segmented_control.0_test.dart
...segmented_control/cupertino_segmented_control.0_test.dart
+19
-0
segmented_control.dart
packages/flutter/lib/src/cupertino/segmented_control.dart
+9
-38
No files found.
examples/api/lib/cupertino/segmented_control/cupertino_segmented_control.0.dart
0 → 100644
View file @
7943ae55
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flutter code sample for CupertinoSegmentedControl
import
'package:flutter/cupertino.dart'
;
enum
Sky
{
midnight
,
viridian
,
cerulean
}
Map
<
Sky
,
Color
>
skyColors
=
<
Sky
,
Color
>
{
Sky
.
midnight
:
const
Color
(
0xff191970
),
Sky
.
viridian
:
const
Color
(
0xff40826d
),
Sky
.
cerulean
:
const
Color
(
0xff007ba7
),
};
void
main
(
)
=>
runApp
(
const
MyApp
());
class
MyApp
extends
StatelessWidget
{
const
MyApp
({
Key
?
key
})
:
super
(
key:
key
);
static
const
String
_title
=
'CupertinoSegmentedControl Sample'
;
@override
Widget
build
(
BuildContext
context
)
{
return
const
CupertinoApp
(
title:
_title
,
home:
SegmentedControlSample
(),
);
}
}
class
SegmentedControlSample
extends
StatefulWidget
{
const
SegmentedControlSample
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
SegmentedControlSample
>
createState
()
=>
_SegmentedControlSampleState
();
}
class
_SegmentedControlSampleState
extends
State
<
SegmentedControlSample
>
{
Sky
_selectedSegment
=
Sky
.
midnight
;
@override
Widget
build
(
BuildContext
context
)
{
return
CupertinoPageScaffold
(
backgroundColor:
skyColors
[
_selectedSegment
],
navigationBar:
CupertinoNavigationBar
(
// This Cupertino segmented control has the enum "Sky" as the type.
middle:
CupertinoSegmentedControl
<
Sky
>(
selectedColor:
skyColors
[
_selectedSegment
],
// Provide horizontal padding around the children.
padding:
const
EdgeInsets
.
symmetric
(
horizontal:
12
),
// This represents a currently selected segmented control.
groupValue:
_selectedSegment
,
// Callback that sets the selected segmented control.
onValueChanged:
(
Sky
value
)
{
setState
(()
{
_selectedSegment
=
value
;
});
},
children:
const
<
Sky
,
Widget
>{
Sky
.
midnight
:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
20
),
child:
Text
(
'Midnight'
,
style:
TextStyle
(
color:
CupertinoColors
.
white
),
),
),
Sky
.
viridian
:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
20
),
child:
Text
(
'Viridian'
,
style:
TextStyle
(
color:
CupertinoColors
.
white
),
),
),
Sky
.
cerulean
:
Padding
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
20
),
child:
Text
(
'Cerulean'
,
style:
TextStyle
(
color:
CupertinoColors
.
white
),
),
),
},
),
),
child:
Center
(
child:
Text
(
'Selected Segment:
${_selectedSegment.name}
'
,
style:
const
TextStyle
(
color:
CupertinoColors
.
white
),
),
),
);
}
}
examples/api/test/cupertino/segmented_control/cupertino_segmented_control.0_test.dart
0 → 100644
View file @
7943ae55
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:flutter_api_samples/cupertino/segmented_control/cupertino_segmented_control.0.dart'
as
example
;
import
'package:flutter_test/flutter_test.dart'
;
void
main
(
)
{
testWidgets
(
'Can change a selected segmented control'
,
(
WidgetTester
tester
)
async
{
await
tester
.
pumpWidget
(
const
example
.
MyApp
(),
);
expect
(
find
.
text
(
'Selected Segment: midnight'
),
findsOneWidget
);
await
tester
.
tap
(
find
.
text
(
'Cerulean'
));
await
tester
.
pumpAndSettle
();
expect
(
find
.
text
(
'Selected Segment: cerulean'
),
findsOneWidget
);
});
}
packages/flutter/lib/src/cupertino/segmented_control.dart
View file @
7943ae55
...
...
@@ -58,6 +58,15 @@ const Duration _kFadeDuration = Duration(milliseconds: 165);
/// arguments can be used to override the segmented control's colors from
/// [CupertinoTheme] defaults.
///
/// {@tool dartpad}
/// This example shows a [CupertinoSegmentedControl] with an enum type.
///
/// The callback provided to [onValueChanged] should update the state of
/// the parent [StatefulWidget] using the [State.setState] method, so that
/// the parent gets rebuilt; for example:
///
/// ** See code in examples/api/lib/cupertino/segmented_control/cupertino_segmented_control.0.dart **
/// {@end-tool}
/// See also:
///
/// * [CupertinoSegmentedControl], a segmented control widget in the style used
...
...
@@ -118,44 +127,6 @@ class CupertinoSegmentedControl<T extends Object> extends StatefulWidget {
/// The segmented control passes the newly selected widget's associated key
/// to the callback but does not actually change state until the parent
/// widget rebuilds the segmented control with the new [groupValue].
///
/// The callback provided to [onValueChanged] should update the state of
/// the parent [StatefulWidget] using the [State.setState] method, so that
/// the parent gets rebuilt; for example:
///
/// {@tool snippet}
///
/// ```dart
/// class SegmentedControlExample extends StatefulWidget {
/// const SegmentedControlExample({Key? key}) : super(key: key);
///
/// @override
/// State createState() => SegmentedControlExampleState();
/// }
///
/// class SegmentedControlExampleState extends State<SegmentedControlExample> {
/// final Map<int, Widget> children = const <int, Widget>{
/// 0: Text('Child 1'),
/// 1: Text('Child 2'),
/// };
///
/// late int currentValue;
///
/// @override
/// Widget build(BuildContext context) {
/// return CupertinoSegmentedControl<int>(
/// children: children,
/// onValueChanged: (int newValue) {
/// setState(() {
/// currentValue = newValue;
/// });
/// },
/// groupValue: currentValue,
/// );
/// }
/// }
/// ```
/// {@end-tool}
final
ValueChanged
<
T
>
onValueChanged
;
/// The color used to fill the backgrounds of unselected widgets and as the
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment