Flutter:在 GridView 平铺中使用 GestureDetector 进行点击延迟

问题描述 投票:0回答:1

通常,以下行为本质上是快速的。然而,在 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();
    }
}
gridview dart flutter gesturedetector
1个回答
20
投票

也许

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())
  ),
)
© www.soinside.com 2019 - 2024. All rights reserved.