Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振切换无线电部件_Flutter_Radio Button_Toggle - Fatal编程技术网

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);