【问题标题】:Dynamically initialize variables (radio button values) in dart?在飞镖中动态初始化变量(单选按钮值)?
【发布时间】:2019-07-22 21:49:09
【问题描述】:

假设我正在设计一个包含多项选择题的测验。每个问题的选项数量可能会有所不同。如何动态命名变量?例如。通常我们在 python 中所做的是

_radValue+str(index) = -1

我们可以在飞镖中有这样的东西吗?

对于已知数量的单选按钮,我通常使用的代码是:


  int _radioValue1 = -1;
  int _radioValue2 = -1;
  int _radioValue3 = -1;

单选按钮小部件类似于:

Column(children:
          List<Widget>.generate(
            widget.items,
                (int j) => Row(
              children: List<Widget>.generate(
                widget.members,
                    (int i) => Radio<int>(
                  value: i,
                  groupValue: groupValue,
                  onChanged: _handleRadioValueChange,
                ),
              ),
            ),
          ),
        ),
}

  void _handleRadioValueChange(int value) {
    setState(() {
      groupValue = value;
    });
  }

我可以通过包装生成的单选按钮列表来生成动态数量的单选按钮。我只是无法生成

_radioValue+(index).toString() = -1;

请帮忙!谢谢!

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    Dart 没有动态变量名的概念。使用值数组,并动态生成单选按钮小部件,值为 0、1、2 等。例如:

    class RadioSet extends StatefulWidget {
      List<String> questions;
    
      RadioSet(this.questions);
    
      @override
      _RadioSetState createState() => _RadioSetState();
    }
    
    class _RadioSetState extends State<RadioSet> {
      int groupValue = -1;
    
      @override
      Widget build(BuildContext context) {
        return Row(
          children: List<Widget>.generate(
            widget.questions.length,
            (int i) => Radio<int>(
                  value: i,
                  groupValue: groupValue,
                  onChanged: _handleRadioValueChange,
                ),
          ),
        );
      }
    
      void _handleRadioValueChange(int value) {
        setState(() {
          groupValue = value;
        });
      }
    }
    

    顺便说一句,每个Radio 都有固定的、不同的value,选择一个值与组值匹配的那个。

    【讨论】:

    • 您好,感谢您的帮助。它肯定适用于选择单个值。你能再帮忙做一件事吗?我试图画出 10 个这样的问题,假设现在,都有 4 个选项。如果我生成您提到的行列表,当我选择第一个单选按钮时,所有第一个单选按钮的值都会更新,这很明显,您能帮忙吗?输出看起来像 [drive.google.com/file/d/1zQpAFytes8vcoXSYPMu7mJ_luT-aGi20/…
    • 我已经在问题中相应地编辑了代码,谢谢!
    • 将值更改为 value: j * 10 + i,,这将编号无线电 0、1、2...中的第一个以及下一行 10、11、12...
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 2016-10-02
    • 2023-04-02
    相关资源
    最近更新 更多