Flutter 颤振切换无线电部件
我正在使用Flutter 颤振切换无线电部件,flutter,radio-button,toggle,Flutter,Radio Button,Toggle,我正在使用Radiowidgets设置用户性别。这些单选按钮小部件设计得非常好,可以处理相应的选择更改,但是我没有找到一个解决方案来取消选择一个已经选择的选项。我想性别广播组是可选的。但在用户选择(比如女性)后,他/她可以将选择更改为男性,但不能取消选择女性/男性选项。(以便不选择任何选项。) 只有一个onChanged属性,只有在性别发生变化时才会发生变化。没有像onTap或类似的东西。因此,无论我检查性别是否相同,都不会调用onChanged 出于这个原因,我尝试使用手势检测器,它应该可以解
Radio
widgets设置用户性别。这些单选按钮小部件设计得非常好,可以处理相应的选择更改,但是我没有找到一个解决方案来取消选择一个已经选择的选项。我想性别广播组是可选的。但在用户选择(比如女性)后,他/她可以将选择更改为男性,但不能取消选择女性/男性选项。(以便不选择任何选项。)
只有一个onChanged
属性,只有在性别发生变化时才会发生变化。没有像onTap
或类似的东西。因此,无论我检查性别是否相同,都不会调用onChanged
出于这个原因,我尝试使用手势检测器
,它应该可以解决这个问题(有了它,我应该能够取消选择已经选择的选项),但是对于无线电小部件,它不起作用。我还试图更改它的行为
属性,但也没有任何帮助
这是我用来创建性别单选选项的函数,该选项在
行中有一个文本
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,
),
),
),
],
);
}
GenderChangeNotifiers只是一个提供程序,用于设置和获取性别值,并在设置性别时通知侦听器
final GenderNotifier genderChangeNotifier= Provider.of<GenderNotifier>(context);
final GenderNotifier genderchange notifier=Provider.of(上下文);
当我点击Text
小部件时,gesturedector
的onTap
运行良好。它选择然后取消选择该选项,就像我想做的那样,但是在无线电
小部件的情况下,onTap
从未被调用
当我点击/点击
收音机
小部件本身时,你知道如何实现取消选择吗?为什么包装收音机的GestureDetector
没有注册点击事件?没有调用GestureDetector的onTap
,因为收音机小部件内的GestureDetector具有优先权。默认情况下,当两个手势检测器竞争输入时,只有一个会“赢”。在这种情况下,获胜者是收音机里的那个。讨论“手势区域”以及如何允许两个手势检测器处理输入
但是,考虑是否允许用户取消单选按钮是正确的解决方案。单选按钮设计为在用户选择选项后不取消选择。您可以改为:
- 提供第三个“我不想说”选项
- 使用可切换按钮而不是单选组
- 使用下拉菜单而不是收音机组
有关可用性方面的更多信息,请参阅。你认为我应该像Facebook那样为性别类型的其他/自定义创建一个选项吗?或者提供一个不说的选择就足够了?还是两者都用?我知道这是一个偏好的问题,但对我来说很奇怪。首先,问问自己为什么需要用户的性别。您使用数据的方式可能会指导您的决策。你需要这些数据吗?你是问这样你就知道用什么代词了(他/她/他们)?如果不需要这些数据,可以完全删除该字段并简化UI。如果你需要用代词来指代他们,可以直接问他们喜欢哪个代词。我认为如果你选择给他们一个性别选项列表,包括其他/自定义选项是很有用的,这样你就不会强迫任何人选择对他们没有意义的选项。
final GenderNotifier genderChangeNotifier= Provider.of<GenderNotifier>(context);