Menu
CoddyTech

Và, hoặc, phủ định trong Dart

Thuộc phần Tạo tính tương tác trong hành trình Flutter của Coddy. Bài học 19 trên 34.

Thường thì một giá trị bool là chưa đủ. Dart kết hợp chúng bằng ba toán tử:

  • a && b (và): chỉ đúng khi cả hai đều đúng
  • a || b (hoặc): đúng khi có ít nhất một giá trị đúng
  • !a (phủ định): đảo ngược đúng và sai
bool _hasTicket = true;
bool _isLate = false;

_hasTicket && !_isLate   // true: bạn có thể lên máy bay
_hasTicket || _isLate    // true: ít nhất một điều kiện là true

Kết quả là một giá trị bool, nên có thể đặt trước ? trong biểu thức điều kiện hoặc dùng trong if. Dùng dấu ngoặc đơn sẽ giúp bạn đọc dễ hơn:

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

Thử thách

Dễ

Cánh cửa chỉ mở khi có chìa khóa và mã. Thay đổi hai dòng:

  • dòng đầu hiển thị The door is open khi bạn có chìa khóa và biết mã, nếu không thì hiển thị The door is locked
  • dòng thứ hai hiển thị Getting closer khi bạn có chìa khóa hoặc biết mã, nếu không thì hiển thị Find the key and the code

Tự làm thử

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 iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Tạo tính tương tác

Tự luyện tập: Trình biên dịch Flutter online