GestureDetector 改变子部件的样式属性

Posted

技术标签:

【中文标题】GestureDetector 改变子部件的样式属性【英文标题】:GestureDetector changing the style properties of the child widget 【发布时间】:2022-01-03 05:29:04 【问题描述】:

我想让我的自定义小部件响应触摸,因此我使用了 GestureDetector 的 onTap 方法。它正在工作,但它也改变了我不想要的自定义小部件的尺寸。我正在发布一些代码和屏幕截图以使情况更加清晰。

我想要的是这个,只是一张 MALE 卡(我的自定义小部件名为 ReusableCard)。

将我的 ReusableCard 小部件包装在 GestureDetector 中后,我得到的是这个。

我在这里分享我的代码。在这段代码中,我还没有使用 GestureDetector。

class _InputPageState extends State<InputPage> 
  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Center(
            child: Text('BMI Calculator')
        ),
      ),
      body: Column(
        children: [
          Expanded(
            child: Row(
              children: [
                ReusableCard(activeCardColor,
                    IconContents(FontAwesomeIcons.mars, 'MALE')),
                ReusableCard(activeCardColor,
                    IconContents(FontAwesomeIcons.venus, 'FEMALE')),
              ],
            ),
          ),
          Expanded(
            child: Row(
              children: [
                ReusableCard(activeCardColor),
              ],
            ),
          ),
          Expanded(
            child: Row(
              children: [
                ReusableCard(activeCardColor),
                ReusableCard(activeCardColor),
              ],
            ),
          ),
          Container(
            color: bottomContainerColor,
            width: double.infinity,
            margin: EdgeInsets.only(top: 10),
            height: bottomContainerHeight,
          ),
        ],
      ),
    );
  

代码中真正重要的部分在 Blockquotes 中。将 GestureDetector 添加到 MALE ReusableCard 后的肉块。

        GestureDetector(
          child: ReusableCard(activeCardColor,
              IconContents(FontAwesomeIcons.mars, 'MALE')),
        ),
        ReusableCard(activeCardColor,
            IconContents(FontAwesomeIcons.venus, 'FEMALE')),

我不认为它是否有帮助,但我也与你们分享我的 ReusableCard 代码。

class ReusableCard extends StatelessWidget 
  ReusableCard(this.colour, [this.cardChild]);

  final Color colour;
  final Widget cardChild;

  @override
  Widget build(BuildContext context) 
    return Expanded(
      child: Container(
        child: cardChild,
        margin: EdgeInsets.all(15),
        decoration: BoxDecoration(
          color: colour,
          borderRadius: BorderRadius.circular(10),
        ),
      ),
    );
  

我已经检查了文档,我似乎做的一切都是正确的。我可以从中推断出我在某个地方弄乱了 Expanded 小部件,但无法纠正它。任何帮助感谢大家。

【问题讨论】:

【参考方案1】:

我建议将GestureDetector 添加到您的ReusableCard 中,作为您的Expanded 的子级。

class ReusableCard extends StatelessWidget 
  ReusableCard(
    this.colour, 
    required this.cardChild,
    required this.onTap,
  );

  final Color colour;
  final Widget cardChild;
  final VoidCallback onTap;
  @override
  Widget build(BuildContext context) 
    return Expanded(
      child: GestureDetector(
          onTap: onTap,
          child: Container(
            child: cardChild,
            margin: EdgeInsets.all(15),
            decoration: BoxDecoration(
              color: colour,
              borderRadius: BorderRadius.circular(10),
            ),
          )),
    );
  

这样您就不需要用GestureDetector 包装您的ReusableCard,从而破坏Expanded 小部件。

【讨论】:

以上是关于GestureDetector 改变子部件的样式属性的主要内容,如果未能解决你的问题,请参考以下文章

CSS中父级的hover改变子元素和样式

小程序--改变子级别页面导航栏信息 / navigationBarTitleText

WPF中的TreeView,如何改变子节点的顺序, 给个例子,多谢

UINavigationController 用另一个改变子视图

Flutter - 无需用户交互即可重建 GestureDetector 小部件

Unity,改变子对象的旋转。无法访问子对象