【问题标题】:Implementation of Firebase Auth with Flutter and Provider使用 Flutter 和 Provider 实现 Firebase Auth
【发布时间】:2020-10-27 16:49:32
【问题描述】:

我对使用 Firebase Auth 实现 Provider 有点困惑。每个教程似乎都使用不同的方法。

我有一个名为 AuthService 的服务,其中包含一个变量 final FirebaseAuth auth = FirebaseAuth.instance。所以,我想使用下面的stream:AuthService.auth.onAuthStateChanged。问题是我应该使用类似的东西:

StreamProvider<FirebaseUser>.value(
  value: AuthService().auth.onAuthStateChanged,
  child: ...

或者像这样创建一个构造函数:

Provider<AuthService>(
  create: (_) => AuthService(),
  child: ...
)

并在小部件的某处访问它:

final authService = Provider.of<AuthService>(context);<br>
final user = authService.auth.onAuthStateChanged;

【问题讨论】:

  • 我可以知道你到底想通过Auth实现什么吗?
  • 我要获取当前用户。如果用户未登录,onAuthStateChanged 返回null
  • 请检查我的答案,你不需要提供者

标签: flutter dart flutter-provider


【解决方案1】:

你可以使用类似这个东西,如果用户登录他会引导到MainScreen(),否则会引导你到LoginPage(),你不需要使用 provider

Widget _handleAuth() {
    return StreamBuilder<FirebaseUser>(
      stream: FirebaseAuth.instance.onAuthStateChanged,
      builder: (BuildContext context, snapshot) {
        return (!snapshot.hasData)
            ? LoginPage()
            : MainScreen();
      },
    );

【讨论】:

  • 我一定会考虑使用你的方法。不过,有一个问题,我能否实现 Provider ?如果我需要使用,你的方法会和 Provider 有冲突吗?
  • 当然你可以在不同的屏幕中实现提供者,在这个屏幕你不需要它
【解决方案2】:

提供者包暴露了不同类型的提供者,你可以在他们的页面here(在他们的页面底部)查看所有类型。

使用提供者而不是另一个提供者取决于您的需求,就我而言,提供者(列表中的第一个)很好。

【讨论】:

  • 问题不是要不要使用Provider,而是应该如何实现。
  • 但是实现取决于您要使用的提供程序的类型,您已经讨论过 StreamProvider 和 Provider,它们是同一个提供程序的一部分,但它们取决于您的需求。如果我没有得到它,我很抱歉
猜你喜欢
  • 2021-11-09
  • 2020-12-17
  • 2020-06-04
  • 2021-01-18
  • 2020-12-24
  • 2020-12-05
  • 1970-01-01
  • 2021-06-27
  • 2020-06-04
相关资源
最近更新 更多