如何使 PageView.Builder() 滚动动画从滞后变得极其流畅 - Flutter

2023-11-29

我使用 PageView.Builder() 来构建由基本文本小部件数组提供的小部件。但在调试模式下,动画感觉非常滞后。在发布或分析模式下,动画仍然滞后,但少了很多。有什么方法可以完全消除使用PageView时的动画滞后现象。

这是我的代码,

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: pageView(),
    );
  }
}

class pageView extends StatelessWidget {
  var color = [
    Colors.white,
    Colors.lightBlue,
    Colors.lightGreen,
    Colors.limeAccent
  ];
  PageController controller = PageController();
  @override
  Widget build(BuildContext context) {
    return PageView.builder(
      itemCount: 5,
      controller: PageController(initialPage: 1),
      itemBuilder: (BuildContext context, int itemIndex) {
        return pageProvider(color[itemIndex]);
      },
    );
  }
}

class pageProvider extends StatelessWidget {
  Color color;
  pageProvider(this.color);
  Text fillText() {
    var str = "";
    for (int i = 0; i < 1000; i++) {
      str += (" " + 'allan $i');
      if (i % 10 == 0) {
        str += '\n';
      }
    }
    return Text(str);
  }

  Widget build(BuildContext context) {
    return Container(color: color, child: fillText());
  }
}

这是我的分析图的链接。我在配备 6 GB RAM 和 snapdragon 636 以及一些不错的 GPU 的 Android 手机上完成了此分析。关联:https://drive.google.com/file/d/1khbhKQttVXbdHf0_z1b1iPA11BDOcmdW/view?usp=sharing


为什么不尝试按照此处所示预热 Skia 发动机:着色器编译卡顿因为这很可能是大多数人面临的问题。

引用文档:

如果您的移动应用程序上的动画看起来很卡顿,但仅在第一次运行时出现,这可能是由于着色器编译造成的。存在着色器编译卡顿的决定性证据是在启用了 --trace-skia 的跟踪中看到 GrGLProgramBuilder::finalize。

要预编译着色器代码,请运行

flutter run --profile --cache-sksl --purge-persistent-cache

使用应用程序来根据需要触发尽可能多的动画;特别是那些有编译卡顿的情况。

在 flutter run 的命令行中按 M 将捕获的 SkSL 着色器写入名为 flutter_01.sksl.json 的文件中。为了获得最佳结果,请在实际的 iOS 设备上捕获 SkSL 着色器。在模拟器上捕获的着色器不太可能在实际硬件上正常工作。

根据需要使用以下内容构建具有 SkSL 预热的应用程序:

flutter build ios --bundle-sksl-path flutter_01.sksl.json

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使 PageView.Builder() 滚动动画从滞后变得极其流畅 - Flutter 的相关文章

随机推荐