如何在 Flutter 中触摸空白区域时使 GestureDetector 也能工作

Trầ*_*Tâm 16 flutter flutter-layout

Text在一个GestureDetector. 在onTap当我触摸回调只通知Text而不是空的空间里面我Container。如何让这个通知就像我触摸按钮一样?

+------------------------------------------------+
| Very very very long long ?ng long text view   |
| Short ?xt                   ?                |
+------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
  • ?:打印Tapped
  • ?: 什么都没有发生。

我的源代码

ListView.separated(
  itemCount: _listModel.length,
  padding: EdgeInsets.only(left: NOTIFICATION_LEFT_SPACE),
  separatorBuilder: (context, index) => Divider(),
  itemBuilder: (BuildContext context, int index) => GestureDetector(
    child: Container(
      child: Hero(
        tag: _listModel[index].title,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Very very very long long long long text view'),
            SizedBox(height: 10),
            Text('Short text')
          ],
        ),
      ),
    ),
    onTap: () {
      print('Tapped');
    },
  ),
)
Run Code Online (Sandbox Code Playgroud)

Dar*_*han 44

您可以使用小部件的behavior: HitTestBehavior.opaque属性,即使小部件没有任何子GestureDetector部件,它也有助于点击内部的占位符。ContainerContainer

GestureDetector(
                behavior: HitTestBehavior.opaque,
                child: Container(
                  child: Hero(
                    tag: 'test',
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Text('Very very very long long long long text view'),
                        SizedBox(height: 10),
                        Text('Short text')
                      ],
                    ),
                  ),
                ),
                onTap: () {
                  print('Tapped');
                },
              ),
Run Code Online (Sandbox Code Playgroud)