Skip to main content
Toggle (also known as a switch) allows users to change settings between two states. It provides visual feedback with smooth animations.

Import

import { Toggle } from '@ui-kitten/components';

Usage

import React from 'react';
import { Toggle } from '@ui-kitten/components';

export const ToggleExample = () => {
  const [checked, setChecked] = React.useState(false);

  return (
    <Toggle
      checked={checked}
      onChange={nextChecked => setChecked(nextChecked)}
    >
      Enable notifications
    </Toggle>
  );
};

States

Toggle supports checked, unchecked, and disabled states.
<Toggle checked={true}>
  Enabled
</Toggle>

<Toggle checked={false}>
  Disabled
</Toggle>

<Toggle checked={true} disabled>
  Disabled Checked
</Toggle>

<Toggle checked={false} disabled>
  Disabled Unchecked
</Toggle>

Status

Toggle can be styled with different status colors.
<Toggle status='primary' checked={true}>
  Primary
</Toggle>

<Toggle status='success' checked={true}>
  Success
</Toggle>

<Toggle status='info' checked={true}>
  Info
</Toggle>

<Toggle status='warning' checked={true}>
  Warning
</Toggle>

<Toggle status='danger' checked={true}>
  Danger
</Toggle>

<Toggle status='control' checked={true}>
  Control
</Toggle>

Props

checked
boolean
default:"false"
Whether the toggle is checked (on).
onChange
(checked: boolean) => void
Called when the toggle should switch its value.
children
RenderProp<TextProps> | React.ReactText
String, number or a function component to render next to the toggle. If it is a function, expected to return a Text component.
status
EvaStatus
default:"basic"
Status of the component. Can be basic, primary, success, info, warning, danger or control.
disabled
boolean
default:"false"
Whether the toggle is disabled.

Form Examples

Settings Panel

import React from 'react';
import { Toggle, Layout, Text, Divider } from '@ui-kitten/components';

const SettingsPanel = () => {
  const [notifications, setNotifications] = React.useState(true);
  const [darkMode, setDarkMode] = React.useState(false);
  const [autoSave, setAutoSave] = React.useState(true);
  const [analytics, setAnalytics] = React.useState(false);

  return (
    <Layout style={{ padding: 16, gap: 16 }}>
      <Text category='h6'>Settings</Text>
      
      <Toggle
        checked={notifications}
        onChange={setNotifications}
      >
        Push Notifications
      </Toggle>
      
      <Divider />
      
      <Toggle
        checked={darkMode}
        onChange={setDarkMode}
      >
        Dark Mode
      </Toggle>
      
      <Divider />
      
      <Toggle
        checked={autoSave}
        onChange={setAutoSave}
      >
        Auto Save
      </Toggle>
      
      <Divider />
      
      <Toggle
        checked={analytics}
        onChange={setAnalytics}
      >
        Share Analytics
      </Toggle>
    </Layout>
  );
};

Notification Preferences

import React from 'react';
import { Toggle, Layout, Text } from '@ui-kitten/components';

const NotificationPreferences = () => {
  const [settings, setSettings] = React.useState({
    email: true,
    push: true,
    sms: false,
    marketing: false,
  });

  const updateSetting = (key, value) => {
    setSettings(prev => ({ ...prev, [key]: value }));
  };

  return (
    <Layout style={{ padding: 16, gap: 12 }}>
      <Text category='h6'>Notification Preferences</Text>
      
      <Layout style={{ gap: 12, paddingVertical: 8 }}>
        <Layout>
          <Toggle
            checked={settings.email}
            onChange={(checked) => updateSetting('email', checked)}
          >
            Email Notifications
          </Toggle>
          <Text appearance='hint' category='c1' style={{ marginLeft: 56 }}>
            Receive updates via email
          </Text>
        </Layout>
        
        <Layout>
          <Toggle
            checked={settings.push}
            onChange={(checked) => updateSetting('push', checked)}
          >
            Push Notifications
          </Toggle>
          <Text appearance='hint' category='c1' style={{ marginLeft: 56 }}>
            Receive push notifications
          </Text>
        </Layout>
        
        <Layout>
          <Toggle
            checked={settings.sms}
            onChange={(checked) => updateSetting('sms', checked)}
          >
            SMS Notifications
          </Toggle>
          <Text appearance='hint' category='c1' style={{ marginLeft: 56 }}>
            Receive text messages
          </Text>
        </Layout>
        
        <Layout>
          <Toggle
            checked={settings.marketing}
            onChange={(checked) => updateSetting('marketing', checked)}
          >
            Marketing Emails
          </Toggle>
          <Text appearance='hint' category='c1' style={{ marginLeft: 56 }}>
            Receive promotional content
          </Text>
        </Layout>
      </Layout>
    </Layout>
  );
};

Feature Flags

import React from 'react';
import { Toggle, Layout, Text, Button } from '@ui-kitten/components';

const FeatureFlags = () => {
  const [features, setFeatures] = React.useState({
    betaFeatures: false,
    experimentalUI: false,
    debugMode: false,
  });

  const toggleFeature = (key) => {
    setFeatures(prev => ({ ...prev, [key]: !prev[key] }));
  };

  const resetFeatures = () => {
    setFeatures({
      betaFeatures: false,
      experimentalUI: false,
      debugMode: false,
    });
  };

  return (
    <Layout style={{ padding: 16, gap: 16 }}>
      <Text category='h6'>Feature Flags</Text>
      
      <Toggle
        checked={features.betaFeatures}
        onChange={() => toggleFeature('betaFeatures')}
        status='info'
      >
        Beta Features
      </Toggle>
      
      <Toggle
        checked={features.experimentalUI}
        onChange={() => toggleFeature('experimentalUI')}
        status='warning'
      >
        Experimental UI
      </Toggle>
      
      <Toggle
        checked={features.debugMode}
        onChange={() => toggleFeature('debugMode')}
        status='danger'
      >
        Debug Mode
      </Toggle>
      
      <Button 
        appearance='outline' 
        size='small'
        onPress={resetFeatures}
      >
        RESET ALL
      </Button>
    </Layout>
  );
};

Conditional Settings

import React from 'react';
import { Toggle, Layout, Text } from '@ui-kitten/components';

const ConditionalSettings = () => {
  const [masterToggle, setMasterToggle] = React.useState(false);
  const [detailedSettings, setDetailedSettings] = React.useState({
    option1: false,
    option2: false,
    option3: false,
  });

  const updateDetailedSetting = (key, value) => {
    setDetailedSettings(prev => ({ ...prev, [key]: value }));
  };

  return (
    <Layout style={{ padding: 16, gap: 16 }}>
      <Toggle
        checked={masterToggle}
        onChange={setMasterToggle}
        status='primary'
      >
        Enable Advanced Features
      </Toggle>
      
      {masterToggle && (
        <Layout style={{ paddingLeft: 24, gap: 12 }}>
          <Toggle
            checked={detailedSettings.option1}
            onChange={(checked) => updateDetailedSetting('option1', checked)}
          >
            Feature Option 1
          </Toggle>
          
          <Toggle
            checked={detailedSettings.option2}
            onChange={(checked) => updateDetailedSetting('option2', checked)}
          >
            Feature Option 2
          </Toggle>
          
          <Toggle
            checked={detailedSettings.option3}
            onChange={(checked) => updateDetailedSetting('option3', checked)}
          >
            Feature Option 3
          </Toggle>
        </Layout>
      )}
    </Layout>
  );
};

Build docs developers (and LLMs) love