Menu
CoddyTech

And, Or y Not en Dart

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

A menudo, un solo valor bool no es suficiente. Dart los combina con tres operadores:

  • a && b (y): verdadero solo cuando ambos son verdaderos
  • a || b (o): verdadero cuando al menos uno es verdadero
  • !a (no): invierte verdadero y falso
bool _hasTicket = true;
bool _isLate = false;

_hasTicket && !_isLate   // true: puedes embarcar
_hasTicket || _isLate    // true: al menos una de las condiciones es verdadera

El resultado es un valor bool, así que encaja antes del ? de una expresión condicional o en un if. Los paréntesis facilitan la lectura:

Text((_hasTicket && !_isLate) ? 'Board now' : 'Wait')
challenge icon

Desafío

Fácil

La puerta se abre solo con la llave y el código. Cambia las dos líneas:

  • la primera muestra The door is open cuando tienes la llave y conoces el código; de lo contrario, muestra The door is locked
  • la segunda muestra Getting closer cuando tienes la llave o conoces el código; de lo contrario, muestra Find the key and the code

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 _hasKey = false;
  bool _knowsCode = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Door')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            const Text('The door is locked', style: TextStyle(fontSize: 24)),
            const Text('Find the key and the code'),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _hasKey = true;
                });
              },
              child: const Text('Take the key'),
            ),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _knowsCode = true;
                });
              },
              child: const Text('Learn the code'),
            ),
          ],
        ),
      ),
    );
  }
}
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