Flutter 中使用 CheckboxListTile 和 List,无法选中,数据也不正常,请问是什么问题?-灵析社区

无敌铃铃后

问题已解决。贴一下比较完整的代码: class _MyHomePageState extends State { int _step = 0; // 应该写在这里 List believes = []; @override Widget build(BuildContext context) { var talkData = context.read(); final TextEditingController feelController = TextEditingController(text: talkData.feel); final TextEditingController goalController = TextEditingController(text: talkData.goals); final TextEditingController nameController = TextEditingController(text: talkData.name); // 不应该写在这里 List believes = []; 因为我把变量声明在 `build()` 里,导致失效。 * * * 请教大家一个问题,如图: ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250104/f655595efbb1ce888f4908feba009de9.png) ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250104/7dd32c88609fa5c2da0eaa37bde0e8c1.png) 1. 我使用 `List` 保存选中的结果 2. 然后通过 `enum` 生成 checkbox list 3. 到此一切正常 4. 然后使用 `onChanged` 事件收集用户操作 5. 但是实际上复选框无法选中(没有效果) 6. `print` 的 List 里只有一条数据,即当前操作的数据 我觉得问题可能不太复杂,所以没有贴代码。请大家多多指教,谢谢。

阅读量:232

点赞量:7

问AI
问题未复现。你还是贴一下完整代码吧。 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/images/20250104/889f8ac46ff01fcfbe4bfa12e3fa62ce.png) 以下是我的测试代码,运行在 "https://dartpad.dev/dart" (https://link.segmentfault.com/?enc=SIiaGt3fUNqRxKmkG%2FQgjA%3D%3D.PuFM1FhLJKKPYE9nk55vzI27RKc7dDSm15q5swKohmE%3D) 上: import 'package:flutter/material.dart'; enum Belief { belief1, belief2, belief3, belief4 } void main() => runApp(const CheckboxListTileApp()); class CheckboxListTileApp extends StatelessWidget { const CheckboxListTileApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( theme: ThemeData(useMaterial3: true), home: const CheckboxListTileExample(), ); } } class CheckboxListTileExample extends StatefulWidget { const CheckboxListTileExample({super.key}); @override State createState() => _CheckboxListTileExampleState(); } class _CheckboxListTileExampleState extends State { List beliefs = []; @override Widget build(BuildContext context) { return Scaffold( body: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text("Let's personalize what works for you. Which belief(s) resonate with you the most?"), for (var belief in Belief.values) CheckboxListTile( title: Text(belief.toString().split('.').last), value: beliefs.contains(belief), onChanged: (bool? value) { setState(() { if (value!) { beliefs.add(belief); } else { beliefs.remove(belief); } print(beliefs); }); }, ) ] ), ); } }