Flutter的新手,所以我希望我使用正确的术语:
在父状态状态小部件内,我正在创建一行复选框。 当单击这些复选框时,我想更新布尔值列表的状态。 我的问题是: 我如何知道所单击复选框的“索引”? 有更好的处理方式吗?
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
);
}
}
答案 0 :(得分:2)
首先:您无法更新最终列表_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
);
}
}
答案 1 :(得分:0)