【发布时间】:2020-10-20 20:53:10
【问题描述】:
我正在使用Radio 小部件来设置用户性别。这些Radio 按钮小部件设计得非常好,可以相应地处理选择更改,但我没有找到以某种方式取消选择一个已选择选项的解决方案。我希望性别广播组是可选的。但是在用户选择让我们说女性之后,他/她可以将选择更改为男性,但不能取消选择女性/男性选项。 (这样就没有选择任何选项。)
只有一个onChanged 属性,并且只有在性别改变时才会改变。没有像onTap 这样的东西或类似的东西。因此,无论我检查该性别是否相同,onChanged 都不会被调用。
出于这个原因,我尝试使用GestureDetector,它应该可以解决这个问题(这样我应该能够取消选择已经选择的选项),但是对于无线电小部件,它不起作用。我还尝试更改它的 behavior 属性,但它也没有帮助。
这是我用来创建性别单选选项的函数,其中包含 Row 中的文本。
Widget _buildRadioWithText(final genderChangeNotifier, final Gender genderParam, final String genderText) {
return Row(
children: <Widget>[
GestureDetector(
behavior: HitTestBehavior.translucent,
child: Radio<Gender>(
visualDensity: VisualDensity.compact,
value: genderParam,
groupValue: genderChangeNotifier.gender,
onChanged: (Gender gender) {
genderChangeNotifier.gender = gender;
print(gender.toString());
},
),
onTap: () {
if (genderChangeNotifier.gender == genderParam) {
genderChangeNotifier.gender = Gender.NA;
print("Not answered!");
}
},
),
GestureDetector(
onTap: () {
if (genderChangeNotifier.gender == genderParam) {
genderChangeNotifier.gender = Gender.NA;
print("Not answered!");
} else {
genderChangeNotifier.gender = genderParam;
print(genderParam.toString());
}
},
child: Text(
genderText,
style: TextStyle(
fontSize: _fontSize,
),
),
),
],
);
}
函数调用:
_buildRadioWithText(genderChangeNotifier, Gender.FEMALE, "Female"),
_buildRadioWithText(genderChangeNotifier, Gender.MALE, "Male"),
genderChangeNotifier 只是一个提供者,用于设置和获取 Gender 值并在设置 Gender 时通知侦听器。
final GenderNotifier genderChangeNotifier= Provider.of<GenderNotifier>(context);
当我点击Text 小部件时,GestureDetector 的onTap 效果很好。它会按照我的意愿选择然后取消选择该选项,但如果 Radio 小部件 onTap 永远不会被调用。
知道当我点击/单击 Radio 小部件本身时如何取消选择吗?为什么包装Radio 的GestureDetector 不注册点击事件?
【问题讨论】:
标签: flutter radio-button toggle