(这最初是关于flutter-dev reddit的帖子,已在此处重定向)
因此,我开始使用firebase作为后端来制作此flutter应用程序,并查看了状态管理的所有选项之后,我终于意识到,firebase提供的工具已经可以处理我需要进行状态管理的几乎所有事情。
例如:
我可以将当前登录的用户设置为我的状态,以显示正确的登录名或主页,并使该用户uid可用于其Firestore API调用的小部件。
OR
我可以只听FirebaseAuth.instance.onAuthStateChanged
来显示正确的页面,而可以在任何地方使用FirebaseAuth.instance.currentUser()
来获取登录的用户uid并进行我的firestore调用。
我的意思是,对于需要全局状态的每件事,我基本上都可以拥有一个Firebase流侦听器。
这是对的吗?还是我在这里想念什么?
答案 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流,但这并不意味着您可以或应该对所有内容使用该解决方案。