Flutter 如何处理复选框行的状态

标签 flutter state

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/

相关文章:

javascript - 渲染中的条件语句

android - 为每个实例执行 initstate

animation - Flutter 上的 Lottie 闪屏

Flutter:如何使用 getX 更改文本颜色?

Android 对话框的保存状态

redirect - Google OAuth 2 和状态参数值需要在重定向 url 中注册

iphone - 如何在cocos2d中更改场景同时保留原始场景的状态

haskell - 使用状态透镜将值插入到 Set 中

Flutter 使用子部件中的 Controller

flutter - 显示键盘时,所有东西都被向上推,我收到一个错误