Menu
CoddyTech

Encender y apagar con un interruptor

Parte de la sección Cómo hacerla interactiva del Journey de Flutter de Coddy. Lección 27 de 34.

Un Switch es el interruptor de encendido y apagado que conoces de los ajustes del teléfono. Muestra un valor booleano y te indica cuándo alguien lo cambia:

Switch(
  value: _wifi,
  onChanged: (bool value) {
    setState(() {
      _wifi = value;
    });
  },
)

value: indica cómo se dibuja: activado para true, desactivado para false. onChanged recibe el nuevo valor cuando se toca.

El interruptor no se mueve por sí solo. Al tocarlo, solo se llama a onChanged; guardas el nuevo valor con setState, se vuelve a construir la pantalla y el interruptor se dibuja en su nueva posición. Si lo olvidas, el interruptor vuelve a su posición cada vez que lo tocas.

challenge icon

Desafío

Fácil
  • Haz que el interruptor funcione: almacena el nuevo valor en _dark con setState.
  • Asigna a Scaffold un backgroundColor de Colors.black cuando el modo oscuro esté activado y de Colors.white cuando esté desactivado. La etiqueta ya cambia de color.

Pruébalo tú mismo

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: const HomePage(),
    );
  }
}

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

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  bool _dark = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(title: const Text('Settings')),
      body: Center(
        child: Row(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text(
              'Dark mode',
              style: TextStyle(fontSize: 20, color: _dark ? Colors.white : Colors.black),
            ),
            const SizedBox(width: 12),
            Switch(
              value: _dark,
              onChanged: (bool value) {},
            ),
          ],
        ),
      ),
    );
  }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Cómo hacerla interactiva

Practica por tu cuenta: Compilador de Flutter online