当孩子是芯片小部件时,Flutter MouseRegion 不起作用

Posted

技术标签:

【中文标题】当孩子是芯片小部件时,Flutter MouseRegion 不起作用【英文标题】:Flutter MouseRegion is not working when the child is a Chip Widget 【发布时间】:2022-01-24 03:35:53 【问题描述】:

当孩子是 Chip 小部件时,我的 Flutter Web 程序中的鼠标光标不会变为悬停时的单击光标。我将 Chip 更改为 Text 和 Container 小部件,鼠标光标更改没有任何问题。

下面是 MouseRegion 的代码。

return MouseRegion(
  cursor: SystemMouseCursors.click,
  child: Container(
    width: 200,
    alignment: Alignment.centerRight,
    child: GestureDetector(
      onTap: () ,
      child: Chip(
        backgroundColor: kLightPrimary,
        avatar: const Icon(
           Feather.phone_call,
           size: 18.0,
           color: kPrimaryColor,
        ),
        label: Text(
          "Test num",
          style: GoogleFonts.poppins(
              fontWeight: FontWeight.w500, color: kPrimaryColor),
          textAlign: TextAlign.end,
        ),
        padding: const EdgeInsets.all(kDefaultPadding),
      ),
    ),
  ),
),

【问题讨论】:

【参考方案1】:

将您的 GestureDetector 更改为 InkWell,这对我有用。

return  Container(
    width: 200,
    alignment: Alignment.centerRight,
    child: InkWell( //use InkWell insted of GestureDetector 
      onTap: () ,
      child: Chip(
        backgroundColor: kLightPrimary,
        avatar: const Icon(
           Feather.phone_call,
           size: 18.0,
           color: kPrimaryColor,
        ),
        label: Text(
          "Test num",
          style: GoogleFonts.poppins(
              fontWeight: FontWeight.w500, color: kPrimaryColor),
          textAlign: TextAlign.end,
        ),
        padding: const EdgeInsets.all(kDefaultPadding),
      ),
    ),
),

【讨论】:

我试过了,还是不行。鼠标光标在悬停时保持为默认光标。【参考方案2】:

您希望使用ActionChip 代替Chip 上的MouseRegionGestureDetector

    ActionChip(
        onPressed() /* use onPressed even if it would be empty */
        backgroundColor: kLightPrimary,
        avatar: const Icon(
           Feather.phone_call,
           size: 18.0,
           color: kPrimaryColor,
        ),
        label: Text(
          "Test num",
          style: GoogleFonts.poppins(
              fontWeight: FontWeight.w500, color: kPrimaryColor),
          textAlign: TextAlign.end,
        ),
        padding: const EdgeInsets.all(kDefaultPadding),
      )

【讨论】:

完美运行! :) 谢谢你

以上是关于当孩子是芯片小部件时,Flutter MouseRegion 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 在 AlertDialog 小部件之外点击后关闭系统键盘

Flutter - 如何对齐(小部件)孙小部件与孩子相同

Flutter 不会使用不同的参数重建相同的小部件

如何在 Flutter 中对齐单个小部件?

定位的小部件导致孩子消失/异常

带有小部件列表的 Flutter 动画切换器