flutter使用radioListTile,出现点击item触发onchaged事件,但选中状态没有改变,这是为什么?

新手上路,请多包涵

flutter使用单选框。

我使用了List<string> = ['item1','item2','item3'],用foreach方式去初始化radioListTile,出现点击item触发onchaged事件,但选中状态没有改变,这是为什么???

widget.options 是一个List [“item1”, "item2", “item3”]

 String groupValue; // 整个单选组值, groupValue == value则选中
 List<Widget>optionChildren = new List<Widget>();
void initState() {
    super.initState();
      groupValue = widget.options[0]; // 默认选中第一个
      
      widget.options.forEach(
        (item) {
          print(item);
          Widget itemWidget = new RadioListTile<String>(
              value: item,
              activeColor: Colors.red,
              title: Text(item),
              groupValue: groupValue,
              onChanged: (val){
                print("change${val} ${groupValue}");
                setState(() {
                  groupValue = val;
                  print("change${val} ${groupValue}");
                });
              },
            );
          optionChildren.add(itemWidget);
        }
      );
  }

  Widget build(BuildContext context) {
    return new Column(
        children: optionChildren
      );
  }

尝试过直接手动添加radioListTile选中状态是会改变的,目前问题现在的选项内容是不固定的,从服务端获取,请问该怎么办???没辙了

@override
  Widget build(BuildContext context) {
    return new Column(
        children: <Widget>[
          new RadioListTile<String>(
              value: "苹果",
              activeColor: Colors.red,
              title: Text("苹果"),
              groupValue: groupValue,
              onChanged: (val){
                print("change${val} ${groupValue}");
                setState(() {
                  groupValue = val;
                  print("change${val} ${groupValue}");
                });
              },
            ),
            new RadioListTile<String>(
              value: "香蕉",
              activeColor: Colors.red,
              title: Text("苹果"),
              groupValue: groupValue,
              onChanged: (val){
                print("change${val} ${groupValue}");
                setState(() {
                  groupValue = val;
                  print("change${val} ${groupValue}");
                });
              },
            )
        ],
      );
  }
阅读 4.1k
2 个回答
新手上路,请多包涵

initstate只执行一次,所以ui不会变化;
放到之外定义即可解决该问题

新手上路,请多包涵

你好,我也碰到这种情况,请问你怎么解决的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏