gridview - Flutter:在 GridView 的 Tile 中使用 GestureDetector 进行点击延迟

标签 gridview dart flutter gesturedetector

通常,以下行为本质上是快速的。但是,在 GridView(或我假设的任何 ScrollView(也尝试过 ListView))中,性能似乎很差。当我点击屏幕时,容器的不透明度会增加,但会延迟一段时间。知道我错过了什么吗?

import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          body: MyWidget()
        )
      );
    }
}
class MyWidgetState extends State<MyWidget> {
  double opacity = 0.2;
  @override
    Widget build(BuildContext context) {
      return GridView.builder(
        gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
          crossAxisCount: 3
        ),
        itemBuilder: (context, index) {
          return GestureDetector(
            onTap: () {
              setState(() {
                opacity = 0.2;                
              });
            },
            onTapDown: (details) {
              setState(() {
                opacity = 1.0;                
              });
            },
            child: Container(
              color: Colors.red.withAlpha((255 * opacity).toInt())
            )
          );
        },
      );
    }
}
class MyWidget extends StatefulWidget {
  @override
    State<StatefulWidget> createState() {
      return MyWidgetState();
    }
}

最佳答案

也许 Listener 在你的情况下会更快

Listener(
      onPointerDown: (PointerDownEvent event) {
        setState(() {
          opacity = 1.0;
        });
      },
      onPointerUp: (PointerUpEvent event) {
        setState(() {
          opacity = 0.2;
        });
      },
      child: Container(
          color: Colors.red.withAlpha((255 * opacity).toInt())
      ),
    )

关于gridview - Flutter:在 GridView 的 Tile 中使用 GestureDetector 进行点击延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53063021/

相关文章:

firebase - flutter : How to implement a callback

dart - Flutter:根据值显示不同的图标

xaml - 包含 GridView 和 ListView 的 ListView

asp.net - Gridview 页脚不可见

Flutter Bloc 从不同的小部件更改状态

dart - Polymer + dart2js:输出太大

flutter - 设置 CupertinoDatePicker minuteInterval : throws an exception. Flutter

c# - 在 gridview - ASP.Net 中显示每页的行数结果

javascript - 网格/框 View 以适应所有屏幕尺寸

flutter - 如何调用方法并检索嵌套在flutter中的json数组