CupertinoSwitch class

An iOS-style switch.

Used to toggle the on/off state of a single setting.

Learn more about CupertinoSwitch on the Flutter YouTube channel.

The switch itself does not maintain its toggle state. Instead, when the toggle state of the switch changes, the widget calls the onChanged callback. Most widgets that use a switch will listen for the onChanged callback and rebuild the switch with a new value to update the visual appearance of the switch.

This example shows a toggleable CupertinoSwitch. When the thumb slides to the other side of the track, the switch is toggled between on/off.

To see it in action, copy and run this code snippet on DartPad.

import 'package:cupertino_ui/cupertino_ui.dart';

/// Flutter code sample for [CupertinoSwitch].

void main() => runApp(const CupertinoSwitchApp());

class CupertinoSwitchApp extends StatelessWidget {
  const CupertinoSwitchApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const CupertinoApp(
      theme: CupertinoThemeData(brightness: .light),
      home: CupertinoSwitchExample(),
    );
  }
}

class CupertinoSwitchExample extends StatefulWidget {
  const CupertinoSwitchExample({super.key});

  @override
  State<CupertinoSwitchExample> createState() => _CupertinoSwitchExampleState();
}

class _CupertinoSwitchExampleState extends State<CupertinoSwitchExample> {
  bool switchValue = true;

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: const CupertinoNavigationBar(
        middle: Text('CupertinoSwitch Sample'),
      ),
      child: Center(
        child: CupertinoSwitch(
          // This bool value toggles the switch.
          value: switchValue,
          activeTrackColor: CupertinoColors.activeBlue,
          onChanged: (bool value) {
            // This is called when the user toggles the switch.
            setState(() {
              switchValue = value;
            });
          },
        ),
      ),
    );
  }
}

This sample shows how to use a CupertinoSwitch in a CupertinoListTile. The MergeSemantics is used to turn the entire CupertinoListTile into a single item for accessibility tools.

MergeSemantics(
  child: CupertinoListTile(
    title: const Text('Lights'),
    trailing: CupertinoSwitch(
      value: _lights,
      onChanged: (bool value) { setState(() { _lights = value; }); },
    ),
    onTap: () { setState(() { _lights = !_lights; }); },
  ),
)

See also:

Inheritance

Constructors

CupertinoSwitch({Key? key, required bool value, required ValueChanged<bool>? onChanged, @Deprecated('Use activeTrackColor instead. ' 'This feature was deprecated after v3.24.0-0.2.pre.') Color? activeColor, @Deprecated('Use inactiveTrackColor instead. ' 'This feature was deprecated after v3.24.0-0.2.pre.') Color? trackColor, Color? activeTrackColor, Color? inactiveTrackColor, Color? thumbColor, Color? inactiveThumbColor, bool? applyTheme, Color? focusColor, Color? onLabelColor, Color? offLabelColor, ImageProvider<Object>? activeThumbImage, ImageErrorListener? onActiveThumbImageError, ImageProvider<Object>? inactiveThumbImage, ImageErrorListener? onInactiveThumbImageError, WidgetStateProperty<Color?>? trackOutlineColor, WidgetStateProperty<double?>? trackOutlineWidth, WidgetStateProperty<Icon?>? thumbIcon, WidgetStateProperty<MouseCursor>? mouseCursor, FocusNode? focusNode, ValueChanged<bool>? onFocusChange, bool autofocus = false, DragStartBehavior dragStartBehavior = DragStartBehavior.start})
Creates an iOS-style switch.
const

Properties

activeColor → Color?
The color to use for the track when the switch is on.
no setter
activeThumbImage → ImageProvider<Object>?
An image to use on the thumb of this switch when the switch is on.
final
activeTrackColor → Color?
The color to use for the track when the switch is on.
final
applyTheme → bool?
Whether to apply the ambient CupertinoThemeData.
final
autofocus → bool
True if this widget will be selected as the initial focus when no other node in its scope is currently focused.
final
dragStartBehavior → DragStartBehavior
Determines the way that drag start behavior is handled.
final
focusColor → Color?
The color to use for the focus highlight for keyboard interactions.
final
focusNode → FocusNode?
An optional focus node to use as the focus node for this widget.
final
hashCode → int
The hash code for this object.
no setterinherited
inactiveThumbColor → Color?
The color to use on the thumb when the switch is off.
final
inactiveThumbImage → ImageProvider<Object>?
An image to use on the thumb of this switch when the switch is off.
final
inactiveTrackColor → Color?
The color to use for the track when the switch is off.
final
key → Key?
Controls how one widget replaces another widget in the tree.
finalinherited
mouseCursor → WidgetStateProperty<MouseCursor>?
The cursor for a mouse pointer when it enters or is hovering over the widget.
final
offLabelColor → Color?
The color to use for the accessibility label when the switch is off.
final
onActiveThumbImageError → ImageErrorListener?
An optional error callback for errors emitted when loading activeThumbImage.
final
onChanged → ValueChanged<bool>?
Called when the user toggles the switch on or off.
final
onFocusChange → ValueChanged<bool>?
Handler called when the focus changes.
final
onInactiveThumbImageError → ImageErrorListener?
An optional error callback for errors emitted when loading inactiveThumbImage.
final
onLabelColor → Color?
The color to use for the accessibility label when the switch is on.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
thumbColor → Color?
The color to use for the thumb when the switch is on.
final
thumbIcon → WidgetStateProperty<Icon?>?
The icon to use on the thumb of this switch.
final
trackColor → Color?
The color to use for the track when the switch is off.
no setter
trackOutlineColor → WidgetStateProperty<Color?>?
The outline color of this CupertinoSwitch's track.
final
trackOutlineWidth → WidgetStateProperty<double?>?
The outline width of this CupertinoSwitch's track.
final
value → bool
Whether this switch is on or off.
final

Methods

createElement() → StatefulElement
Creates a StatefulElement to manage this widget's location in the tree.
inherited
createState() → State<CupertinoSwitch>
Creates the mutable state for this widget at a given location in the tree.
override
debugDescribeChildren() → List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
inherited
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
override
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
inherited
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) → String
A string representation of this object.
inherited
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String
Returns a string representation of this node and its descendants.
inherited
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String
Returns a one-line detailed description of the object.
inherited
toStringShort() → String
A short, textual description of this widget.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited