flutter - Flutter 提供者最佳实践
问题描述
我一直在尝试提供程序包,并且通常能够让它做我想做的事情。但是,在某些情况下,我不确定我所做的是否是最佳实践。
例如,假设我有一个包含各种不相关选项的设置页面——比如主题选项、通知选项、特定于应用程序的一些过滤器选项等。
我的问题是,这些选项中的每一个是否应该有自己的类专用于单个值,以便只有依赖于该单个值的小部件树的部分重建。或者他们应该都在同一个SettingsProvider
类中,并且有一些方法可以单独使用这个类中的字段以避免过度重建?
还是我完全错过了大局?任何帮助都会非常感谢!
解决方案
我发现的一个解决方案是将所有值放在一个类中,例如SettingsProvider
. 然后,而不是使用Provider.of<>
or Consumer<>
,
使用Selector<>
. 例如,要获取/设置设置的通知选项,您可以用Selector
这样的方式包装小部件 -
Selector<SettingsProvider, bool>(
builder: (context, notifications, child) {
(notifications)
? return Text('Notifications are on')
: return Text('Notifications are off')
},
selector: (context , settingsPro) => settingsPro.notifications,
),
这应该显示通知是否打开,并且仅在通知选项更改时重建。
让我知道是否有更好的解决方案。
推荐阅读
- mongodb - 使用 mongodb 模板在 Spring 启动中第二次 $ 或失败
- swift - SwiftUI StateObject 被初始化了两次。如何确保它只初始化一次?
- jupyter-notebook - Jupyter Notebook 问题 - 自动完成和滚动
- ruby-on-rails - 如何在 Arel 中创建和使用未绑定到列的函数?
- javascript - CSS - 当窗口改变大小时,行内容不会改变大小
- android - Crashlytics 自定义键未出现在崩溃中
- unix - 配置:指定在默认路径之后搜索标题的路径
- python-3.x - 如何在 Pandas 中只为一个 NAN 在 NAN 前后填充 0?
- java - Java ObjectMapper.readValue 将泛型类型转换为 LinkedHashMap
- python - 如何使用 tensorflow 实现坐标下降?