Flutter 的新手,所以我希望我使用的是正确的术语:
在我的父有状态小部件中,我正在创建一行复选框。 单击这些复选框时,我想更新 bool 值列表的状态。 我的问题是: 我怎样才能知道被点击的复选框的“索引”? 有没有更好的模式来处理它?</p>
class MyState extends State<Products> {
final List<bool> _data = [true, true, true];
Widget _buildCheckBoxes() {
List<Widget> list = new List();
Widget cb;
for (bool val in _data) {
cb = Checkbox(
value: val,
onChanged: (bool value) {
setState(() {
// need to update _data[?]
});
},
);
list.add(cb);
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: list
);
}
}
最佳答案
首先:您不能更新 final List _data
,因为 final
意味着列表是常量。其次,尽管我更喜欢您使用 listView,因为它更清晰,但您可以执行以下操作:
import 'package:flutter/material.dart';
class TestWidget extends StatefulWidget{
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return TestWidgetState();
}
}
class TestWidgetState extends State<TestWidget>{
List<bool> _data = [true, true, true];
@override
Widget build(BuildContext context) {
return _buildCheckBoxes();
}
Widget _buildCheckBoxes() {
List<Widget> list = new List();
Widget cb;
for (int i=0;i<_data.length;i++) {
cb = Checkbox(
value: _data[i],
onChanged: (bool value) {
setState(() {
// need to update _data[?]
_data[i] = value;
});
},
);
list.add(cb);
}
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: list
);
}
}
关于Flutter 如何处理复选框行的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830216/