在我的例子中,我需要在一个条件下在列中设置一个小部件,只需参见:
isSomeBool ? MyWidget() : thatLeastExpensiveWidget()我只可以简单地使用SizedBox或Container,但是它们是我们可以使用的最便宜的小部件,还是仅用于此目的的小部件?
我也想知道颤振能制造出的最昂贵的小部件是什么
谢谢
发布于 2022-11-20 09:10:25
使用Container()和SizedBox() --即使它们是空的,它们仍然是一个需要呈现和绘制的完全抖动的小部件,因此实际上,在某些情况下,您可以使用它来关闭分析器。
我找到了零包,它提供了一个小部件,它只定义了一个类,Flutter框架认为它是一个小部件,但是没有执行任何渲染或绘制。
它的实现实际上只是几行代码,可以这样使用:
return Builder(
builder: (_) {
if (condition) {
return const MyWidget();
} else {
return nil;
}
},
);万一有人对这个话题感兴趣。
发布于 2022-09-14 09:20:08
我不知道哪一个是最便宜的,因为它会让您深入研究Flutter的源代码,谁能回答您,是谁做出/贡献了这个颤振框架。但是SizedBox & Container是最简单的小部件,所以据我所知,它可能是最简单的。StatelessWidget也比StatefulWidget便宜。顺便说一句,如果您想构建自己的小部件,请使用class StatelessWidget而不是像Widget _buidYourOwnWidget()这样的方法,因为每次重新构建应用程序屏幕时,都会重新加载方法。在这种情况下,class StatelessWidget比方法_buidYourOwnWidget()便宜。
关于什么是最昂贵的,有两种昂贵:关于时间或空间。关于时间,显然是Future,因为它可以延迟任何您想要的时间。关于空间,它是您的自定义小部件--因为一个小部件可能包含许多子部件。例如,Scaffold是一个完整的屏幕,因此它在空间方面是最昂贵的。
发布于 2022-09-14 09:38:02
您只能使用if语句呈现所需的部分,并避免呈现下面所示的其他部分。
child: Column(children: [
ListTile(
...
),
if (bool)
Container(
...
),
])https://stackoverflow.com/questions/73714248
复制相似问题