可见性与条件小部件

7

我有一个多层用户应用程序,在其中实现了基于角色的小部件,例如:

final user=Provider.of<UserNotifier>(context).getRole(); //returns role string

(user=="Admin")?SomeWidget():Container(),

还有另一种选择,例如:

Visibility (
                  visible: (user=="Admin"),
                  child: SomeWidget()
                ),

在这两种方法中,哪种是最好的选择?


2
这在Visibility小部件的文档中有所解释:“使用此小部件并非隐藏子项的必要条件。隐藏子项最简单的方法就是不包含它...” - jamesdlin
3个回答

4

我认为,第一个选项(以下)是最好的选择。

(user=="Admin")?SomeWidget():Container(),

从代码中可以看出,它只构建所需的小部件。例如,如果条件为true,则会构建SomeWidget,否则会构建Container。

主要好处是可以提高应用程序性能,如果不需要构建SomeWidget,则不会构建SomeWidget。假设您的SomeWidget是从服务器获取数据的大型小部件,在这种情况下,即使该小部件未显示,它仍将继续执行所有这些操作。因此,我们可以说,我们正在进行的所有请求都是不值得的。

而在第二种情况下,它将继续执行所有操作,我认为这种方式不好。


谢谢。另外,这是生产应用的好方法吗?还是有更好的方式? - Zero Live
这是生产中最佳的方法。 - Viren V Varasadiya

2
三元运算符始终是决策的最佳方式,如果我们可以避免添加额外的代码和小部件到树中,为什么要这样做。此外,只要可能,我们应该使用三元运算符,因为该代码更易读。

2
你需要在这里使用三目运算符,因为用户角色与应用程序的交互时不会发生变化,我们使用可见性将其更改为true,以便在需要用户查看小部件时使用,但在你的情况下,可见项目似乎与角色相关联且不会发生变化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接