繁体   English   中英

ListView 中的 Flutter 自定义小部件导致滞后

[英]Flutter custom widget in ListView causing lag

main.dart 类

@override
Widget build(BuildContext context) {
  return ListView.builder(
    itemBuilder: (context, index) {
      return MyCustomStatefulWidget(
        "Text = $index",
      );
    },
  );
}

一切正常,但是如果我在我的列表中说 1000 个项目,那么当ListView滚动时我可以看到口吃动画,并且MyCustomStatefulWidgetdispose()方法被调用以获取 990 个项目(屏幕上没有)。 如何以更好的方式做到这一点?

换句话说,我可以问有没有什么方法可以重用/回收我以前的小部件,这样它就不会为 1000 个项目积累起来。

这是我的StatefulWidget类的代码,但是为了简单起见,我在这里使用纯Text 但在现实世界中,我做其他需要它是StatefulWidget事情


MyCustomStatefulWidget 类

class MyCustomStatefulWidget extends StatefulWidget {
  final String title;

  MyCustomStatefulWidget(this.title);

  @override
  _MyCustomStatefulWidgetState createState() => _MyCustomStatefulWidgetState();
}

class _MyCustomStatefulWidgetState extends State<MyCustomStatefulWidget> {
  @override
  Widget build(BuildContext context) => Text(widget.title);

  @override
  void dispose() {
    print("dispose");
    super.dispose();
  }
}

ListView 子项应在屏幕外自动重建。 如果子小部件仍然存在,您可以通过禁用 AutomaticKeepAlive来禁用保持项目活着

ListView(
  children: [...],
  addAutomaticKeepAlives: false,
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM