勾选复选框
本课属于 Coddy Flutter 学习旅程的“让应用具有交互性”单元。第 28 课,共 34 课。
Checkbox 的工作方式和 Switch 类似:用 value: 绘制,并通过 onChanged 调用 setState 来响应变化。
Checkbox(
value: _agreed,
onChanged: (bool? value) {
setState(() {
_agreed = value ?? false;
});
},
)有一点不同:它的值是 bool?,可以是 bool 或 null。复选框可以有第三种空状态,但这里不会用到。由于 _agreed 是普通的 bool,你可以像处理 int.tryParse 时那样,用 ?? 将可能的 null 转换为 false。
复选框通常可以用来启用按钮:勾选“I agree”,Continue 按钮就不再是灰色的。
挑战
简单- 让复选框可以勾选和取消勾选:将它的值存储在
_agreed中。 - 在勾选复选框之前,将
Continue按钮置灰。
亲手试试
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 _agreed = false;
void _continue() {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Welcome!')),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Rules')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisSize: MainAxisSize.min,
children: [
Checkbox(
value: _agreed,
onChanged: (bool? value) {},
),
const Text('I agree to the rules'),
],
),
const SizedBox(height: 16),
ElevatedButton(onPressed: _continue, child: const Text('Continue')),
],
),
),
);
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
让应用具有交互性中的所有课
自己练习: Flutter 在线编译器