【问题标题】:Flutter: How to have one tap handler for two widgets?Flutter:如何为两个小部件设置一个水龙头处理程序?
【发布时间】:2021-01-23 21:30:22
【问题描述】:

我有一个 IconButtonText 作为 Row 小部件的子级。当前,当用户点击日历图标时,会处理其onPressed 并显示日历以选择日期。但是,我想扩展点击区域并允许打开日历,即使用户点击 Text 小部件也是如此。实现此目的的最佳方法是什么?

请注意,此Row 中有更多孩子。我只想处理这两个孩子的水龙头。

【问题讨论】:

  • inkwell 使其所有子小部件都能够按下,因此您需要做的就是将行定义为inkwell 子级或将行放入容器中并将容器放入墨水池中阅读更多信息@ 987654322@

标签: flutter flutter-layout


【解决方案1】:

InkWell 可能会为您解决问题。

import 'package:flutter/material.dart';

class DoubleTapPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: InkWell(
          child: Row(
            children: [
              Icon(Icons.calendar_today),
              Text('2021 Jan 23')
            ],
          ),
          onTap: () => print('Calendar or Date tapped'),
        ),
      ),
    );
  }
}

响应编辑:

import 'package:flutter/material.dart';

class DoubleTapPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Row(
          children: [
            Text('Outside the well'),
            InkWell(
              child: Row(
                children: [
                  Icon(Icons.calendar_today),
                  Text('2021 Jan 23')
                ],
              ),
              onTap: () => print('Calendar or Date tapped'),
            ),
          ],
        ),
      ),
    );
  }
}

【讨论】:

  • 请查看更新后的问题。该行有更多孩子。
  • @BFaley InkWell 提供了可见的飞溅效果,因此可以查看已点击的内容。 InkWell 外的行项目将保持静态。
【解决方案2】:

将整个Row 包裹在GestureDetector 中,如下所示

GestureDetector(
  onTap: () {
    // what your want here
  }
  child: Row(
    // ...
  ),
),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多