颤振开关通过点击而不是滑动来改变值(无法获得焦点)

时间:2019-11-17 10:38:16

标签: flutter dart

我有一个CupertinoSwitch,可以很好地滑动,但我也希望在点击时更改它。

我尝试将其包装在墨水池和手势检测器中,并设置如下值:

                                   GestureDetector(
                                      child: CupertinoSwitch(
                                        value: notificationsAllowed,
                                        activeColor: Colors.orange,
                                        onChanged: (notificationsSelection) {
                                          userProfile
                                              .userNotificationsPermitted =
                                              notificationsSelection;
                                        },
                                      ),

                                      onTap: (){
                                        setState(() {
                                          print ('tapped');
                                          notificationsAllowed = true;
                                        });

                                      },
                                    ),

但是我发现墨水池没有对准水龙头,我想是因为它没有获得聚焦。

我同时尝试了墨水瓶和笔势,但是我不确定为什么它没有注册点击事件。

谢谢

2 个答案:

答案 0 :(得分:0)

    GestureDetector(
      child: Container(
        width: 42.0,
        height: 24.0,
        color: Colors.white,
        padding: EdgeInsets.symmetric(21.0),
        child: CupertinoSwitch(
          value: notificationsAllowed,
          activeColor: Colors.orange,
          onChanged: (notificationsSelection) {
            userProfile
                .userNotificationsPermitted =
                notificationsSelection;
          },
        ),
      ),

      onTap: (){
        setState(() {
          print ('tapped');
          notificationsAllowed = true;
        });

      },
    ),

但是 CupertinoSwitch onChanged 方法不起作用!

答案 1 :(得分:0)

GestureDetector 不能在 CupertinoSwitch 上工作。它们不能同时处理一个水龙头,因此一次只能使用一个。

<块引用>

我也希望它在我点击它时进行更改。

我不确定你的意思。如果要将开关的状态更改为开或关,可以通过更改 CupertinoSwitch 的 value 属性来实现。由于您使用的是通知允许作为 CupertinoSwitch 的值,因此请在 onChanged 中更改它的值。

CupertinoSwitch(
          value: notificationsAllowed,
          activeColor: Colors.orange,
          onChanged: (notificationsSelection) {
            notificationsAllowed = !notificationsAllowed;  //add this
            userProfile
                .userNotificationsPermitted =
                notificationsSelection;
          },
        ),