我是新手,我对收音机有疑问。 使用“常规”方法时,它可以完美工作:
int _groupValue=-1;
...
...
child: Align(
alignment: Alignment.center,
child: Column(
children: <Widget>[
RadioListTile(activeColor: Colors.black,
groupValue: _groupValue,
value: 1,
onChanged: (value) { setState(() {
_groupValue=value;
}); },
title: Text("a"),
),
RadioListTile(activeColor: Colors.black,
groupValue: _groupValue,
value: 2,
onChanged: (value) { setState(() {
_groupValue=value;
}); },
title: Text("b"),
),
],
),
),
自从我使用API中的数据创建单选按钮以来,我就将此代码更改为:
child: Align(
alignment: Alignment.center,
child: children: radioListView
),
),
并单击按钮,我调用异步方法从API下载数据,如下所示:
void getApiData() async {
...
...
...
setState() {
var radioListView = List<RadioListTile>();
for (Map<String, dynamic> c in apidata)) {
radioListView.add(new RadioListTile(
groupValue: _groupValue,
value: c['option_value'],
title: c['title'],
onChanged: (value) { setState(() {
_groupValue=value;
});
),
));
}
}
}
使用第一个代码有效,但是使用第二个代码,我只能看到项目,但是单击单选按钮时什么也没有发生(尽管onchanged确实会触发,因为我尝试打印该值就可以了) 我在做什么错了?
答案 0 :(得分:0)
我在这里找到了解决方案: https://www.didierboelens.com/2018/05/hint-5-how-to-refresh-the-content-of-a-dialog-via-setstate/
问题是我不得不分开小部件并为收音机创建另一个有状态小部件