翩翩模式底片性能问题

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

当拖动模态底层表时,如果有很多小部件住在表内,flutter应用就会开始滞后。这只发生在模态底层工作表上(showModalBottomSheet),而不是在普通工作表上(showBottomSheet).下面我附上了一张性能分析的截图,它显示,当用户拖动时,工作表内的所有widget都在不断重建。

我写了一个小演示来比较两种类型的表的性能。有什么方法可以防止拖动时的重建吗?

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

/// This Widget is the main application widget.
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "demo",
      home: Scaffold(
        body: MyButtons(),
      ),
    );
  }
}

class MyButtons extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          RaisedButton(
            onPressed: () {
              showModalBottomSheet<void>(
                context: context,
                builder: (context) => BottomSheet(),
              );
            },
            child: Text("show modal (laggy)"),
          ),
          RaisedButton(
            onPressed: () {
              showBottomSheet<void>(
                context: context,
                builder: (context) => BottomSheet(),
              );
            },
            child: Text("show normal (not laggy)"),
          ),
        ],
      ),
    );
  }
}

class BottomSheet extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Wrap(
      spacing: 8.0,
      alignment: WrapAlignment.center,
      children: List<Widget>.generate(
        100,
        (int index) {
          return InputChip(
            label: Text("test"),
          );
        },
      ),
    );
  }
}

performance flutter bottom-sheet
1个回答
1
投票

我已经创建了 此公关 来解决这个性能问题。问题在于 AnimatedContainer 来自 ModalBottomSheet 没有使用 child 财产,因此它被迫调用 builder 方法多次,而不是使用已经建立的子部件。

© www.soinside.com 2019 - 2024. All rights reserved.