gpt4 book ai didi

flutter - StatefulWidget和StatelessWidget的性能波动

转载 作者:行者123 更新时间:2023-12-02 06:13:01 24 4
gpt4 key购买 nike

当我必须创建在应用程序中多次使用的窗口小部件的"template"时,我会使用很多StatelessWidgets,因为文档如此说:

Stateless widget are useful when the part of the user interface you are describing does not depend on anything other than the configuration information in the object itself and the BuildContext in which the widget is inflated.



这是一个例子:
class StepInputButton extends StatelessWidget {

final int pos;
final String value;

const StepInputButton({
this.pos,
this.value
});

@override
Widget build(BuildContext context) {
return Row(
// Text, Icon and a tiny button
);
}

}

上面的代码很好,因为我可以在CONST的代码中使用 const StepInputButton(val, "val"),来提高性能。

问题

我正在使用著名的 Provider小部件来管理状态,我的应用程序页面通常如下所示:
class SuccessPage extends StatelessWidget {

@override
Widget build(BuildContext context) {
var prov = Provider.of<Type>(context);
return Scaffold(...);
}

}

那是我的带有脚手架的应用程序的页面,该页面具有一个抽屉,一个 float Action 按钮和一个appTitle。
在这里,我使用StatelessWidget,因为提供程序为我完成了所有工作,因此我不使用setState()。但是他们仍然在官方的flutter文档中说:

For compositions that can change dynamically, e.g. due to having an internal clock-driven state, or depending on some system state, consider using StatefulWidget.



所以我必须将 class SuccessPage extends StatelessWidget更改为 class SuccessPage extends StatefulWidget吗?我有优势吗?

注意:如果您想换个方式提出问题:我应该使用StatefulWidgets创建状态将要更改的“应用页面”,还是使用StatelessWidgets创建状态不更改的“可重用窗口小部件”?

最佳答案

当小部件本身保持其自身状态时,StatefulWidget是必需的。在您给出的示例中,假定您在小部件树的上方使用了正确的提供程序类型(例如Provider),ChangeNotifierProvider包正在为您处理状态。这段代码中似乎也没有任何东西可以从访问小部件的生命周期中受益,因此您不需要访问诸如initStatedispose之类的方法。

这样,小部件本身无需管理,因此无需将类转换为有状态的。

不过,我可能建议的一件事是使用Consumer而不是直接调用Provider.ofConsumer为您处理调用,并消除了在Provider检测到状态更改时是否会更新您的小部件的任何歧义。

关于flutter - StatefulWidget和StatelessWidget的性能波动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com