Flutter 手势检测器不';将ListView.builder与Transform一起使用时无法工作

Flutter 手势检测器不';将ListView.builder与Transform一起使用时无法工作,flutter,Flutter,我试图使用Transform将容器放置在屏幕中央,我希望GestureDetector对每个容器都起作用,但是,在这种情况下,当我单击其中一个容器时,它不起作用,就好像上面有什么东西不允许onTap起作用 当我的Matrix4看起来像这个手势检测器时: Matrix4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, )..rotateZ(_rotate[index].value), 但当我向Matrix4添加100时,它不起

我试图使用Transform将容器放置在屏幕中央,我希望GestureDetector对每个容器都起作用,但是,在这种情况下,当我单击其中一个容器时,它不起作用,就好像上面有什么东西不允许onTap起作用

当我的Matrix4看起来像这个手势检测器时:

Matrix4(
  1, 0, 0, 0, 
  0, 1, 0, 0,
  0, 0, 1, 0, 
  0, 0, 0, 1,
)..rotateZ(_rotate[index].value),
但当我向Matrix4添加100时,它不起作用:

Matrix4(
 1, 0, 0, 0, 
 0, 1, 0, 0,
 0, 0, 1, 0, 
 0, 100, 0, 1,
)..rotateZ(_rotate[index].value),
完整代码:

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';

class TransformPage extends StatefulWidget {
  @override
  _TransformState createState() => _TransformState();
}

class _TransformState extends State<TransformPage>
    with TickerProviderStateMixin {
  //Variables
  AnimationController _animationController;
  List<Color> _color = [Colors.red, Colors.blue, Colors.indigo, Colors.green];
  List<Animation> _rotate = List<Animation>(4),
      _sizeWidth = List<Animation>(4),
      _sizeHeight = List<Animation>(4);
  Animation _curve;

  @override
  void initState() {
    super.initState();
    _animationController =
        AnimationController(vsync: this, duration: Duration(seconds: 2));
    _curve = CurvedAnimation(parent: _animationController, curve: Curves.ease);
    for (int i = 0; i < 4; i++) {
      _sizeWidth[i] = Tween<double>(begin: 0, end: 120).animate(_curve);
      _sizeHeight[i] = Tween<double>(begin: 0, end: 120).animate(_curve);
      _rotate[i] = Tween<double>(begin: 0, end: 2.35).animate(_curve);
    }
    _animationController.addListener(() {
      setState(() {});
    });
    _animationController.forward();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: CupertinoNavigationBar(
        middle: Text("Testing"),
        backgroundColor: Colors.grey.shade200,
      ),
      body: ListView.builder(
        itemCount: 4,
        itemBuilder: (context, index) {
          return GestureDetector(
            onTap: () {
              print(index);
            },
            behavior: HitTestBehavior.translucent,
            child: Stack(
              alignment: Alignment.center,
              children: [
                Transform(
                  transform:
                      Matrix4(
                        1, 0, 0, 0, 
                        0, 1, 0, 0,
                        0, 0, 1, 0, 
                        0, 100, 0, 1,
                      )..rotateZ(_rotate[index].value),
                  child: Container(
                    width: _sizeWidth[index].value,
                    height: _sizeHeight[index].value,
                    color: _color[index],
                  ),
                  alignment: Alignment.center,
                ),
              ],
            ),
          );
        },
      ),
    );
  }
}
导入“包装:颤振/材料.省道”;
进口“包装:颤振/cupertino.dart”;
类TransformPage扩展StatefulWidget{
@凌驾
_TransformState createState();
}
类_TransformState扩展了状态
使用TickerProviderStateMixin{
//变数
AnimationController _AnimationController;
列表颜色=[Colors.red,Colors.blue,Colors.indigo,Colors.green];
列表旋转=列表(4),
_sizeWidth=列表(4),
_尺寸高度=列表(4);
动画曲线;
@凌驾
void initState(){
super.initState();
_动画控制器=
AnimationController(vsync:this,duration:duration(秒数:2));
_曲线=曲线动画(父对象:_animationController,曲线:Curves.ease);
对于(int i=0;i<4;i++){
_sizeWidth[i]=Tween(开始:0,结束:120)。设置动画(_曲线);
_sizeHeight[i]=Tween(开始:0,结束:120)。设置动画(_曲线);
_旋转[i]=二者之间(开始:0,结束:2.35)。设置动画(_曲线);
}
_animationController.addListener((){
setState((){});
});
_animationController.forward();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:cupertinanaviationbar(
中间:文本(“测试”),
背景颜色:Colors.grey.shade200,
),
正文:ListView.builder(
物品计数:4,
itemBuilder:(上下文,索引){
返回手势检测器(
onTap:(){
打印(索引);
},
行为:HitTestBehavior.transparent,
子:堆栈(
对齐:对齐.center,
儿童:[
转化(
转换:
Matrix4(
1, 0, 0, 0, 
0, 1, 0, 0,
0, 0, 1, 0, 
0, 100, 0, 1,
)..rotateZ(_rotate[index].value),
子:容器(
宽度:_sizeWidth[索引]。值,
高度:_sizeHeight[索引]。值,
颜色:_颜色[索引],
),
对齐:对齐.center,
),
],
),
);
},
),
);
}
}

我已经尝试过使用Positioned,但结果是一样的:(

Transform小部件,有一种特殊的方式来处理他的
孩子
,它以您希望的方式更改其内容,但其引用仍然保留在主小部件上,我使用
Transform.scale
时也有同样的情况

如果希望
ListView
小部件远离上边缘,请使用
Padding
小部件, 成功了,我将您的代码复制到我的项目中,并显示调试画图,结果如下:

使用此代码:

Matrix4(
 1, 0, 0, 0, 
 0, 1, 0, 0,
 0, 0, 1, 0, 
 0, 100, 0, 1,
)..rotateZ(_rotate[index].value),
结果是:

关于该代码:

 Matrix4(
     1, 0, 0, 0, 
     0, 1, 0, 0,
     0, 0, 1, 0, 
     0, 0, 0, 1,
    )..rotateZ(_rotate[index].value),
结果是:

使用
填充
小部件的结果是:

注:<代码> OntAp<代码>,它实际上在中间方块

中起作用。