防止小部件被重建

时间:2020-06-25 15:36:49

标签: flutter

有点Flutter的新手,希望您能为这个问题提供帮助。

我的应用程序主屏幕上有两个小部件。顶部窗口小部件是Facebook横幅广告窗口小部件,然后在屏幕底部显示从Web API调用中填充的列表。

当我使用工具栏从API刷新数据时,我正在使用SetState重建列表等。

但是,每次都重新构建带有Facebook广告的顶部小部件,这不是我想要的。

我已经看到了很多有关Bloc Patterns的话题。如果听起来我想做的事有些过大,有没有更简单的方法来更新列表而不更新横幅广告窗口小部件?

谢谢

3 个答案:

答案 0 :(得分:0)

您应该在小部件中添加一个key属性,它使您可以在更改状态时避免重建特定的小部件。

答案 1 :(得分:0)

我可以想到两种解决方案:

  1. 将列表移动到单独的StatefulWidget。如果现在在此小部件中调用setState(),则仅重建包含的小部件。
  2. 方向:
class _MyWidgetState extends State<MyWidget> {
  Widget _facebookBanner;
  
  @override
  void initState() {
    _facebookBanner = ...;
    super.initState();
  }
  
  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      _facebookBanner,
      ListView(...),
    ]);
  }
}

答案 2 :(得分:0)

您可以将Facebook标语定义为const,这样声明后就不会重建

这是一个如何使用const关键字的示例

child: const Text('This is just an example of a const widget');

const构造函数是对您知道不会改变的东西的绝佳优化。