我在Radio
中有一个ListTile
按钮。单击ListTile
时,将更改Radio
的值。我不希望该收音机可以点击,所以我不提供onChanged
回调:
ListTile(
onTap: () => onChanged(template.id),
leading: Radio(
value: template.id,
groupValue: checkedId,
)
...
)
这样做,Radio
变为“无效”,并将其颜色更改为灰色。
Radio
具有activeColor
属性,但不处于活动状态。
如果我为Radio
的{{1}}属性提供了一个伪函数-它变为活动状态,但是问题是我不希望它可被单击,所以我希望onChanged
只能单击(原因是-我想取消选中ListTile
)
此外,我只想更改那些特定的Radio
按钮的无效颜色,而不是整个应用程序。
当前结果:
Radio
的结果(单击收音机时,我无法取消选中它):
答案 0 :(得分:1)
您必须更改unselectedWidgetColor
中的ThemeData
。如果您只需要在页面中的少数几个收音机中执行此操作,则可以将它们包装在Theme
中以覆盖:
Theme(
data: Theme.of(context).copyWith(
unselectedWidgetColor: Colors.red,
disabledColor: Colors.blue
),
child: Column(
children: <Widget>[
ListTile(
onTap: () => setState(() => value = 0),
leading: Radio(
value: 0,
groupValue: value,
onChanged: (v) => setState(() => value = v),
)
),
ListTile(
onTap: () => setState(() => value = 1),
leading: Radio(
value: 1,
groupValue: value,
onChanged: (v) => setState(() => value = v),
)
),
],
),
)
如果您不将onChanged
传递给Radio
,它将被解释为已禁用(这适用于许多默认的材质小部件)。
答案 1 :(得分:0)
您还可以设置 fillColor
属性,它可以解析多个无线电状态的颜色。在这种情况下,它为所有状态返回 Colors.blue
。
Radio(
fillColor: MaterialStateColor.resolveWith((states) => Colors.blue),
value: 1,
groupValue: _optionValue,
onChanged: changeValue,
)