使用Firebase时真的需要本地状态管理吗?

时间:2019-02-05 12:32:45

标签: firebase flutter

(这最初是关于flutter-dev reddit的帖子,已在此处重定向)

因此,我开始使用firebase作为后端来制作此flutter应用程序,并查看了状态管理的所有选项之后,我终于意识到,firebase提供的工具已经可以处理我需要进行状态管理的几乎所有事情。

例如:

我可以将当​​前登录的用户设置为我的状态,以显示正确的登录名或主页,并使该用户uid可用于其Firestore API调用的小部件。

OR

我可以只听FirebaseAuth.instance.onAuthStateChanged来显示正确的页面,而可以在任何地方使用FirebaseAuth.instance.currentUser()来获取登录的用户uid并进行我的firestore调用。

我的意思是,对于需要全局状态的每件事,我基本上都可以拥有一个Firebase流侦听器。

这是对的吗?还是我在这里想念什么?

2 个答案:

答案 0 :(得分:2)

您什么都不丢失。由于大多数Firebase API都依赖于Google服务器上的数据,因此许多API设计为以反应方式使用。根据我的经验,使UI对这些异步更改做出反应是使代码保持简单的最佳方法。

不同类型的侦听器之间可能会有轻微的行为。但是,public class SBATemplateSelector : DataTemplateSelector { public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item != null) { ContentPresenter cp = container as ContentPresenter; if (cp != null) { ContentControl cc = VisualTreeHelper.GetParent(cp) as ContentControl; if (cc != null) { Grid.SetRow(cc, 4); Grid.SetColumn(cc, 0); Grid.SetRowSpan(cc, 5); Grid.SetColumnSpan(cc, 10); } } } ... } } 侦听器在附加状态时会立即触发当前状态,这很好地说明了一个侦听器的示例,您可以在需要响应身份验证状态的任何地方使用它(而不是将该状态也存储在您的某个位置)应用)。

答案 1 :(得分:1)

在那种情况下,我会说是的,您可以阅读onAuthStateChanged流并对更改做出反应。但是在某些情况下,我需要没有父/子关系的小部件之间进行交互的流。例如,在我的一个应用程序中,我有一个公司选择器,而该应用程序的其余部分则反映到所选公司。我创建了一个流,以便公司选择器不必是其他小部件的父级,尤其是不需要将公司参数传递给所有小部件树。

还有一种情况,我需要加载FirebaseUser对象上不可用的有关用户的额外信息。因此,当用户登录时,我从“用户”集合中加载其信息,然后将其添加到自定义流中。

总而言之,我会说是的,您应该尽可能使用默认的Firebase流,但这并不意味着您可以或应该对所有内容使用该解决方案。