将ListView元素的CheckBox的位置传递给Flutter中的onChanged回调

时间:2019-12-09 22:30:55

标签: flutter checkbox dart callback

我在下面编写了和平的代码:

int numberLines = 50;
List<bool> checkBoxValues = [];

int i = 0;
while(i < numberLines)
{
    checkBoxValues.add(false);
    i++;
}

void medCheckedChanged(bool value) => setState(() => checkBoxValues[position] = value);

ListView.builder
(
    itemCount: numberLines,
    itemBuilder: (context, position)
    {
        return Column
        (
            children: <Widget>
            [
                Container
                (
                    height: resLayout.getScreenHeightPercentage(context, 6),
                    width: resLayout.getScreenHeightPercentage(context, 14),
                    alignment: Alignment(0, 0),
                    child: Checkbox
                    (
                        value: checkBoxValues[position],
                        onChanged: medCheckedChanged,   //pass to medCheckedChanged() the position
                    ),
                )
            ]
        ),
    }
)

如您所见,我需要在medCheckedChanged(bool value)回调中使用position变量,但无法将其作为参数传递...。 还有其他方法吗?

预先感谢,并使用<3

保持编码

1 个答案:

答案 0 :(得分:1)

解决方案:匿名函数

在Dart中,您可以创建一个行函数,并且可以将参数传递给它们。希望这行得通!

int numberLines = 50;
List<bool> checkBoxValues = [];

int i = 0;
while(i < numberLines)
{
    checkBoxValues.add(false);
    i++;
}

void medCheckedChanged(bool value) => setState(() => checkBoxValues[position] = value);

ListView.builder
(
    itemCount: numberLines,
    itemBuilder: (context, position)
    {
        return Column
        (
            children: <Widget>
            [
                Container
                (
                    height: resLayout.getScreenHeightPercentage(context, 6),
                    width: resLayout.getScreenHeightPercentage(context, 14),
                    alignment: Alignment(0, 0),
                    child: Checkbox
                    (
                        value: checkBoxValues[position],
                        onChanged: (value) => medCheckedChanged(value),   //pass to medCheckedChanged() the position
                    ),
                )
            ]
        ),
    }
)