未在浮动中的ListView.builder中选择单选按钮



我试图拥有一组单选按钮,这样我就可以一次从该组中选择一个。

我分组为ListView的单选按钮列表

ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount: _rampValues.length,
itemBuilder: (context, int index) {
var tt = _rampValues[index];
return ListTile(
title: Text(tt.name!, style: tBody5),
leading: Radio(
value: tt.selected!,
groupValue: _rampResult,
onChanged: (value) {
setState(() {
_rampResult = value.toString();
});
}),
);
})

该模型类似

List<ValueModel> _rampValues = [];
var _rampResult;
...
class ValueModel {
final int? id;
final int? subId;
final String? name;
final String? subName;
bool? selected;
bool? subSelected;
ValueModel(
{this.id,
this.subId,
this.name,
this.subName,
this.selected,
this.subSelected});
}

但是当我加载UI以查看它没有选择也没有响应时

我该怎么解决这个问题?

您的Radio小部件的类型应该是ValueModel以及Radiovalue属性,如下所示:

ListView.builder(
shrinkWrap: true,
controller: _controller,
itemCount: _rampValues.length,
itemBuilder: (context, int index) {
var tt = _rampValues[index];
return ListTile(
title: Text(tt.name!),
leading: Radio<ValueModel>(
value: tt,
groupValue: _rampResult,
onChanged: (ValueModel? value) {
setState(() {
_rampResult = value;
});
}),
);
}),

当您调用setState

setState(() {
_rampResult = value.toString();
});

更改状态后,build再次被触发,但单选按钮仍设置为仅检查selected字段:

value: tt.selected!,

但这个领域并没有改变。所以你的单选按钮不会改变。您需要一个逻辑来更改setState中的selected字段,或者您的初始值应该与_rampResult进行比较,以确定它是否被选中,而不是使用字段。

相关内容

  • 没有找到相关文章

最新更新