Menu
CoddyTech

使用 if 和 else 做出决策

本课属于 Coddy Flutter 学习旅程的“让应用具有交互性”单元。第 18 课,共 34 课。

if 只会在条件为真时运行代码。条件不成立时,else 会运行其他代码:

if (_count < 10) {
  _count++;
} else {
  print('Full');
}

括号里的内容是一个比较,结果是 bool:true 或 false。

  • a == b:a 等于 b(两个等号;一个等号用于给变量赋值)
  • a != b:a 不等于 b
  • a < b 和 a > b:小于、大于
  • a <= b 和 a >= b:小于或等于、大于或等于

注意边界情况:有 8 个杯子时,_glasses < 8 为 false,但 _glasses <= 8 仍为 true,会让第 9 个杯子通过。

在 State 类中,每个方法里都有 context,不只是在 build 中,所以方法也可以显示 SnackBar。

challenge icon

挑战

简单

每天喝 8 杯水就够了。修改 _drink,让它只在杯数少于 8 时增加一杯。否则,它会显示一个 SnackBar,其中的提示文字是 That is enough for today。

亲手试试

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> {
  int _glasses = 0;

  void _drink() {
    setState(() {
      _glasses++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Water')),
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            Text('Glasses today: $_glasses', style: const TextStyle(fontSize: 24)),
            const SizedBox(height: 16),
            ElevatedButton(onPressed: _drink, child: const Text('Drink a glass')),
          ],
        ),
      ),
    );
  }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

让应用具有交互性中的所有课

自己练习: Flutter 在线编译器