Flutter容器不响应手势

时间:2019-12-08 01:40:16

标签: flutter flutter-layout flutter-dependencies

如果我的容器没有设置宽度/高度手势检测器,则无法使用,但是如果添加了类似颜色的东西,它将开始起作用。

测试应用:

    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,
          ),
        ),
      )
    );
  }
}
  

预期的行为是当我将手势检测器设置为   子约束。这是所有可能发生的事情   小部件和其他检测器。

     

简单用例示例-我想拖动一些让   比如说width / height 4.0,但是太小了,所以我可以将其嵌入   较大的emptyContainer,宽度/高度为16.0,中心对齐   并可以将其拖动。

     

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

日志

  

医生摘要(要查看所有详细信息,请运行flutter doctor -v):[✓]   Flutter(在Mac OS X 10.13.4 17E202上为Channel master,v0.4.1-pre.25,   语言环境(美国)[✓] Android工具链-为Android设备开发   (Android SDK 27.0.3)[✓] iOS工具链-为iOS设备开发   (Xcode 9.3)[✓] Android Studio(版本3.1)[!] IntelliJ IDEA   终极版(2018.1.2版)       tter未安装Flutter插件;这增加了Flutter的特定功能。       art未安装Dart插件;这增加了Dart特定的功能。 [✓]已连接的设备(2个可用)

     

!医生发现了1类问题。

1 个答案:

答案 0 :(得分:0)

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

如果您仍然希望空容器响应触摸,则可以使用behavior: HitTestBehavior.opaque的{​​{1}}属性。

希望这能回答您的问题。