【问题标题】:GestureDetector OnTap Delay on Android Studio / Flutter / Nexus 6 API 30Android Studio / Flutter / Nexus 6 API 30上的GestureDetector OnTap延迟
【发布时间】:2021-04-24 18:03:51
【问题描述】:

想想极其简单的 Flutter 应用程序,它在屏幕上包含一个 Container 小部件,并在其上包含 GestureDetector。

main 转到 myApp,main 和 myApp 小部件在同一个 dart 文件中。 myApp 转到 HomePage,这是一个不同的 dart 文件。 HomePage 有一个 Container 和 GestureDetector 小部件。

GestureDetector的onTap函数是:print('pressed');

点击容器时第一次出现“pressed”。问题是当我在这个容器上敲了几次。延迟后出现“按下”。有时我会在编译器的消息后看到它。

uid=10153(com.example.vocabulary_master_8) 1.ui identical 4 lines

这是我的flutter doctor -v 发现。

[!] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    X Flutter plugin not installed; this adds Flutter specific functionality.
    X Dart plugin not installed; this adds Dart specific functionality.
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

在我将 Android Studio 升级到 4.1.2 和 Nexus 6 API 30 后,我开始收到此错误和延迟。

你能请人帮忙吗? 最好的问候。

【问题讨论】:

  • 这是由于您的系统运行缓慢
  • 我是这么想的,但是默认示例代码(创建新的 Flutter 应用程序时出现的代码)可以正常工作,没有任何延迟。

标签: android-studio flutter gesturedetector


【解决方案1】:

尝试使用每次按下图标时都会递增的整数变量进行打印。以您想要的方式打印。

GestureDetector(
            child: Icon(Icons.person,color: Colors.black54,),
            
            onTap: (){
              i = i+1;
              print("clicked person:$i");},
            behavior: HitTestBehavior.translucent
          ),

【讨论】:

    【解决方案2】:

    首先你应该安装 Flutter Doctor 检测到的 Dart 插件。

    谈到您的问题,延迟的原因可能有很多:

    1. 我猜你是在模拟器上以调试模式运行它,与发布模式相比,调试模式的性能会很慢而且滞后。要在发布模式下测试应用程序,请使用真实设备而不是模拟器,而不是 flutter run,请使用 flutter run --release。

    2. 打印语句有时可能会延迟。与其尝试打印某些内容,不如尝试在点击时更新您的 UI。正如在上面的场景中看到的那样,当您多次点击时,您会强制调试器多次打印相同的语句,因此在出现抖动的情况下,它会检查打印语句是否相同,如果它们相同,它将结合所有这些并打印如下输出:

    uid=10153(com.example.vocabulary_master_8) 1.ui identical 4 lines
    

    经过一定的延迟。

    总之你的代码工作正常,延迟是因为颤振需要一些时间来识别和组合类似的打印语句。

    【讨论】:

    • 您说打印语句有时可能会延迟 ??
    • 延迟问题已解决。打印语句出现延迟。非常感谢。
    • 我多次尝试安装 dart 和 Flutter 插件,也卸载了所有内容并重新安装(包括 git、flutter、dart、android studio ...)但无法解决此问题。顺便说一句,我的应用程序运行正常,但颤振医生没有看到这些插件已安装。
    【解决方案3】:

    是的,我的模拟器中也有 GestureDetector 有点慢。我不知道为什么...如果您只需要 Tap 功能,请尝试使用 InkWellListener 以获得更好的性能...

    【讨论】:

    • GestureDetector 在模拟器/手机上运行良好,仅在特定场景中延迟打印语句。例如,如果你想写一个整数 10 次,假设整数永远不会改变......请参阅“8xidentical lines”消息和整数变量的最后一个值。我认为结果屏幕以某种方式总结了即将显示的值。如果您在屏幕上更改状态,手势检测器可以正常工作,您可以看到实时结果。感谢您的贡献。
    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2020-04-23
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多