PageStorageKeyでのFlutterListViewのパフォーマンスの問題

kungfuslippers

2つのListViewを含むTabBarがあります。それぞれに250個のアイテムがあります。各ListViewにPageStorageKeyを使用して、ビューを切り替えるときにスクロール位置を保持しています。

スクロール位置があまり変わっていないときに最初にタブを切り替えると、たとえばリストの最初で、タブをすばやく切り替えることができます。

ただし、各リストの最後までスクロールして2つのタブを切り替えると、リストが実際に表示されるまでに顕著な遅延が発生します。

ここでパフォーマンスを向上させるためにできることはありますか?

参照:https//gist.github.com/kungfuslippers/fcae96675fb76c10f7bb5051b66ed87e

または以下のコード:

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp(
      itemsA: List<String>.generate(250, (i) => "Item $i"),
      itemsB: List<String>.generate(250, (i) => "Item $i")));
}

class MyApp extends StatefulWidget {
  final List<String> itemsA;
  final List<String> itemsB;

  MyApp({Key key, @required this.itemsA, this.itemsB}) : super(key: key);

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

class MyAppState extends State<MyApp> with SingleTickerProviderStateMixin {
  TabController _tabController;

  final Key listKeyA = PageStorageKey('listA');
  final Key listKeyB = PageStorageKey('listB');


  @override
  void initState() {
    super.initState();
    _tabController = TabController(vsync: this, length: 2);
  }

  @override
  Widget build(BuildContext context) {
    final title = 'Long List';

    return MaterialApp(
        title: title,
        home: Scaffold(
          appBar: AppBar(
            title: Text(title),
          ),
          body: TabBarView(controller: _tabController, children: [
            ListWidget(key: listKeyA, items: widget.itemsA),
            ListWidget(key: listKeyB, items: widget.itemsB),
          ]),
          bottomNavigationBar: Container(
            color: Colors.blue,
            child: TabBar(
              controller: _tabController,
              indicatorColor: Colors.white,
              tabs: <Widget>[Tab(text: "ListA"), Tab(text: "ListB")],
            ),
          ),
        ));
  }
}

class ListWidget extends StatefulWidget {
  final List<String> items;

  const ListWidget({
    Key key,
    @required this.items,
  }) : super(key: key);

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

class ListWidgetState extends State<ListWidget> {
  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: widget.items.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text('${widget.items[index]}'),
        );
      },
    );
  }
}
dshukertjr

すべてのListViewの子の高さが同じである場合、ListViewにはitemExtentというプロパティがあり、子の高さをdoubleで指定できます。これにより、スクロールのパフォーマンスが大幅に向上します。

ListViewの子の高さが異なる場合、できることはあまりありませんが、デバッグモードでこれをテストしている場合は、代わりにリリースモードで試してください。スクロール動作は、リリースモードよりもデバッグモードでログが遅くなります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パフォーマンスの問題

分類Dev

VirtualBoxでのLinuxMintのパフォーマンスの問題

分類Dev

SQLでのUNION句のパフォーマンスの問題

分類Dev

Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

分類Dev

HikariCP での Postgresql のパフォーマンスの問題

分類Dev

Retina Macbook ProでのWebGLパフォーマンスの問題

分類Dev

LinkedBlockingQueueでのJavaパフォーマンスの問題

分類Dev

Alfresco SearchServicesでの検索パフォーマンスの問題

分類Dev

mysql8.0でのselectパフォーマンスの問題

分類Dev

Retina(MacBook)でのUnityWebGLパフォーマンスの問題

分類Dev

パフォーマンスの問題、何が原因ですか?

分類Dev

私の頭の中でMySQLのパフォーマンスの問題

分類Dev

Rのループのパフォーマンスの問題

分類Dev

EntityFrameworkでのテーブル結合のパフォーマンスの問題

分類Dev

ヘビゲームでのGLFW / OpenGLのパフォーマンスの問題

分類Dev

AFTERUPDATEトリガーでのUPDATEのパフォーマンスの問題

分類Dev

UnityゲームでのMongoDBのパフォーマンスの問題

分類Dev

春の起動時のパフォーマンスの問題

分類Dev

matplotlibの凡例のパフォーマンスの問題

分類Dev

Burrows-PythonのWheelerのパフォーマンスの問題

分類Dev

Djangoの多対多のパフォーマンスの問題

分類Dev

Haskellでの並列計算のパフォーマンスの問題

分類Dev

集計クエリでのMySQLViewのパフォーマンスの問題

分類Dev

EFObjectContextでの一括挿入のパフォーマンスの問題

分類Dev

クエリでのMySqlのパフォーマンスの問題

分類Dev

NestJsテストのパフォーマンスの問題

分類Dev

システムのパフォーマンスの問題

分類Dev

Pythonリスト操作のパフォーマンスの問題

分類Dev

iOSデバイスのパフォーマンスの問題

Related 関連記事

  1. 1

    パフォーマンスの問題

  2. 2

    VirtualBoxでのLinuxMintのパフォーマンスの問題

  3. 3

    SQLでのUNION句のパフォーマンスの問題

  4. 4

    Where andContainsでのLINQtoEntitiesのパフォーマンスの問題

  5. 5

    HikariCP での Postgresql のパフォーマンスの問題

  6. 6

    Retina Macbook ProでのWebGLパフォーマンスの問題

  7. 7

    LinkedBlockingQueueでのJavaパフォーマンスの問題

  8. 8

    Alfresco SearchServicesでの検索パフォーマンスの問題

  9. 9

    mysql8.0でのselectパフォーマンスの問題

  10. 10

    Retina(MacBook)でのUnityWebGLパフォーマンスの問題

  11. 11

    パフォーマンスの問題、何が原因ですか?

  12. 12

    私の頭の中でMySQLのパフォーマンスの問題

  13. 13

    Rのループのパフォーマンスの問題

  14. 14

    EntityFrameworkでのテーブル結合のパフォーマンスの問題

  15. 15

    ヘビゲームでのGLFW / OpenGLのパフォーマンスの問題

  16. 16

    AFTERUPDATEトリガーでのUPDATEのパフォーマンスの問題

  17. 17

    UnityゲームでのMongoDBのパフォーマンスの問題

  18. 18

    春の起動時のパフォーマンスの問題

  19. 19

    matplotlibの凡例のパフォーマンスの問題

  20. 20

    Burrows-PythonのWheelerのパフォーマンスの問題

  21. 21

    Djangoの多対多のパフォーマンスの問題

  22. 22

    Haskellでの並列計算のパフォーマンスの問題

  23. 23

    集計クエリでのMySQLViewのパフォーマンスの問題

  24. 24

    EFObjectContextでの一括挿入のパフォーマンスの問題

  25. 25

    クエリでのMySqlのパフォーマンスの問題

  26. 26

    NestJsテストのパフォーマンスの問題

  27. 27

    システムのパフォーマンスの問題

  28. 28

    Pythonリスト操作のパフォーマンスの問題

  29. 29

    iOSデバイスのパフォーマンスの問題

ホットタグ

アーカイブ