Flutter 容器不响应手势

mar*_*mar 0 flutter flutter-dependencies flutter-layout

如果我有设置宽度/高度手势检测器的空容器不起作用,但如果我添加类似颜色的东西,它就会开始工作。

测试应用:

    import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  click(){
    _counter++;
    print('Clicked times: $_counter');
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new GestureDetector(
          onTap: click,
          child: new Container(
            width: 50.0,
            height: 50.0,
            //color: Colors.transparent,
          ),
        ),
      )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

预期的行为是手势检测器在我设置它的子约束时起作用。这是所有小部件和其他检测器都可能发生的事情。

简单的用例示例 - 我想拖动一些容器,可以说宽度/高​​度为 4.0,但它太小了,所以我可以将它嵌入到宽度/高度为 16.0 且居中对齐的更大的 emptyContainer 中,然后可以拖动那个容器。

解决方法:添加透明颜色。

日志

Doctor summary(查看所有详细信息,运行 flutter doctor -v):[?] Flutter(Channel master,v0.4.1-pre.25,在 Mac OS X 10.13.4 17E202,locale en-US)[?] Android 工具链- 为 Android 设备开发 (Android SDK 27.0.3) [?] iOS 工具链 - 为 iOS 设备开发 (Xcode 9.3) [?] Android Studio(3.1 版)[!] IntelliJ IDEA Ultimate Edition(2018.1.2 版)?未安装 Flutter 插件;这增加了 Flutter 特定的功能。? 未安装 Dart 插件;这增加了 Dart 特定的功能。[?] 连接的设备(2 个可用)

!医生在 1 个类别中发现了问题。

Dar*_*han 5

没有子元素的有边界(高度和宽度)的容器只是一个占位符。因此,如果您使用 包装它GestureDetector,它将忽略点击或触摸,因为根据GestureDetector类的官方文档,By default a GestureDetector with an invisible child ignores touches;. 这就是原因,容器不会响应触摸/点击。

如果你仍然想将空盒响应触摸,你可以使用behavior: HitTestBehavior.opaque的特性GestureDetector

希望这能回答你的问题。