Menu
CoddyTech

Ligar e desligar com um interruptor

Parte da seção Tornando o app interativo do Journey de Flutter da Coddy. Lição 27 de 34.

Um Switch é o botão de alternância para ligar e desligar que você conhece das configurações do celular. Ele mostra um bool e informa quando alguém o aciona:

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

value: é onde ele é desenhado: ligado para true, desligado para false. onChanged recebe o novo valor quando você toca nele.

O switch não se move sozinho. Um toque apenas chama onChanged; você armazena o novo valor com setState, a tela é construída novamente e o switch é desenhado em sua nova posição. Se esquecer disso, o switch volta à posição anterior toda vez que você toca nele.

challenge icon

Desafio

Fácil
  • Faça o interruptor funcionar: armazene o novo valor em _dark com setState.
  • Defina backgroundColor do Scaffold como Colors.black quando o modo escuro estiver ativado e como Colors.white quando estiver desativado. A cor do rótulo já muda.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Tornando o app interativo

Pratique por conta própria: Compilador de Flutter online