【问题标题】:How to select specific radio button and get its value in ListView.builder Flutter如何在 ListView.builder Flutter 中选择特定的单选按钮并获取其值
【发布时间】:2021-12-03 07:52:46
【问题描述】:

我想用单选按钮创建一个名为 JSON 的数据列表。但是,当我选择任何单选按钮时,它会选择每个单选按钮,而不是选择一个。而且,当我单击按钮时如何获取所选单选按钮的值

我是新来的颤振。有没有什么办法可以解决这类问题?

这是我的代码

Widget build(BuildContext context) {
    return Scaffold(
        body: Column(
      children: <Widget>[
        Container(
            height: 270,
            color: Colors.white,
            child: CustomScrollView(
              slivers: [
                SliverList(
                  delegate: SliverChildBuilderDelegate(
                    (context, i) {
                      return Column(
                        children: <Widget>[
                          Container(
                              width: 450,
                              padding: EdgeInsets.all(7.0),
                              margin: EdgeInsets.only(right: 8.0, left: 8.0, top: 10.0),
                              decoration: BoxDecoration(
                                border: Border.all(color: const Color(0xffededed)),
                              ),
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.start,
                                mainAxisSize: MainAxisSize.max,
                                children: <Widget> [
                                  Text(modelOptions[i].optionName.toString(),
                                    style: TextStyle(
                                      fontSize: 18,
                                      color: Colors.amber,
                                    ),
                                  ),
                                ],
                              ),
                          ),
                          Container(
                              margin: EdgeInsets.only(left: 8.0, right: 8.0),
                              padding: EdgeInsets.all(7.0),
                              decoration: BoxDecoration(
                                border:
                                    Border.all(color: const Color(0xffededed)),
                              ),
                              child: ListView.builder(
                                  shrinkWrap: true,
                                  physics: NeverScrollableScrollPhysics(),
                                  itemCount: modelOptions[i].modelOptionValues.length,
                                  itemBuilder: (context, j) {
                                    return
                                      Row(
                                        mainAxisAlignment: MainAxisAlignment.start,
                                        mainAxisSize: MainAxisSize.min,
                                      children: <Widget>[
                                        Radio(
                                            groupValue: selectedRadio,
                                            value: modelOptions[i].modelOptionValues[j].optionValueID,
                                            activeColor: Colors.orangeAccent,
                                            onChanged:(value) {
                                              setState(() {
                                                value = modelOptions[i].modelOptionValues[j].optionValueID.toString();
                                                selectedRadio = value;
                                                print("check radio: ${selectedRadio}");
                                                showToastMessage('${selectedRadio} is selected');  //get the selected radio button's value.
                                              });
                                            }),
                                              });
                                            }),
                                        Text(
                                          modelOptions[i].modelOptionValues[j].valueName,
                                          style: TextStyle(
                                            color: Colors.black, fontSize: 16,
                                        ),),
                                      ],
                                    );
                                  }))
                        ],
                      );
                    },
                    childCount: modelOptions.length,
                  ),
                ),
                
              ],
            )),
      ],
    ));
  }

【问题讨论】:

  • 您正在以一种命令式的方式而不是声明式的方式思考。您应该已经知道该值并将该数据应用于单选按钮。
  • 我不太明白你在说什么。是不是我的概念做错了?
  • 你不应该为它的价值要求任何东西,你应该知道它的价值并将这个价值应用到事物上。
  • 但是现在当我点击一个按钮时,它会全选。
  • 因为你有一次数据源_isSelected 这是一个布尔值。所以他们都将被设置为那个。你需要一个List&lt;bool&gt;。并使用该值更新索引。

标签: flutter radio-button flutter-sliver


【解决方案1】:
                                        Radio(
                                            groupValue: selectedRadio,
                                            activeColor: Colors.orangeAccent,
                                            onChanged: (val) {
                                              setState(() {
                                                selectedRadio = val;
                                                showToastMessage(
                                                    "' the value ?? ' is selected"); //get the selected radio button's value.
                                              });
                                            }),

您正在使用一种事实来源来衡量 Radio 的价值 selectedRadio。您应该更新索引的值。此外,您将值传递给 groupValue 参数而不是 value 参数。 groupValue 是你...切换组的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2013-03-28
    • 1970-01-01
    • 2019-09-07
    • 2011-08-16
    • 1970-01-01
    • 2015-11-10
    相关资源
    最近更新 更多