首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inkwell:为什么onHover()需要onTap()?

Inkwell:为什么onHover()需要onTap()?
EN

Stack Overflow用户
提问于 2021-06-15 23:24:26
回答 1查看 688关注 0票数 2

我使用以下代码:

代码语言:javascript
复制
  Widget getSelectSortBy() {
    return InkWell(
        onHover: (value) {
          setState(() {
            _isHoveringSortBy = value;
          });
        },
        // onTap needs to be implemented
        // otherwise onHover does NOT work! */don't know why/*
        onTap: () => {},
        child: AnimatedContainer(
            decoration: BoxDecoration(
                borderRadius: BorderRadius.all(Radius.circular(16)),
                color: blueSortBy,
                border: Border.all(
                    color: _isHoveringSortBy
                        ? Colors.white
                        : Colors.transparent,
                    width: 1.0)),
            duration: timeHoveringBottomAnimatedContainer,
            padding: EdgeInsets.only(top: 8, bottom: 9, left: 20, right: 28),
            child: Row(
               // rest of the code of Row
            )     
   );
  }

我发现需要来为InkWell Widget实现onTap()方法。否则,onHover()方法将无法工作。

现在的问题是,为何要这样做呢?还是我做错了什么?

注意:我在Chrome上测试了这个页面。(我不知道是否有不同的情况。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-16 05:40:32

从交互设计的角度来看,当小部件本身没有任何交互方式(点击、双击或长按压)时,给出视觉反馈是没有意义的。也许这就是原因。

如果您需要覆盖行为(这是好的),一个空的回调似乎可以正常工作。

深度

如果检查Inkwell小部件,您会发现Inkwell小部件只有在这三种部件都可用的情况下才被认为是启用的:onTaponDoubleTaponlongPress

代码语言:javascript
复制
// Line 1034

bool _isWidgetEnabled(_InkResponseStateWidget widget) {
        return widget.onTap != null || widget.onDoubleTap != null || widget.onLongPress != null;
    }

bool get enabled => _isWidgetEnabled(widget);

并且,Hover事件只有在启用时才会被处理。

代码语言:javascript
复制
// Line 1040
// MouseEnter /Hover event
// Calls _handleHoverChange() if enabled

void _handleMouseEnter(PointerEnterEvent event) {
    _hovering = true;
    if (enabled) {
      _handleHoverChange();
    }
  }


// Line 1054
// Calls updateHighLight()

void _handleHoverChange() {
    updateHighlight(_HighlightType.hover, value: _hovering);
  }

如果深入研究,您会发现updateHighlight()是处理onHover回调的那个。

PS。答案很粗糙,但希望你能明白问题所在。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67994569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档