颤振如何处理复选框行的状态

时间:2019-02-22 15:23:40

标签: flutter state

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
    );
  }

}

2 个答案:

答案 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)

我认为您正在寻找的可能是Key属性

这里是Key property document

When to Use Keys (video)