【问题标题】:'User' can't be assigned to the parameter type 'Future<User>' in FutureBuilder'User' 不能分配给 FutureBuilder 中的参数类型'Future<User>'
【发布时间】:2021-02-11 22:45:46
【问题描述】:

我正在尝试确定用户是否使用 FirebaseAuth.instance.currentUser 登录(Flutter Firebase),然后返回 LoginScreen 或 Dashboard,但出现错误。我尝试根据 FirebaseFlutter 的说明编写代码,但这些似乎已被弃用...

  Widget build(BuildContext context) {
    return FutureBuilder<User>(
        future: FirebaseAuth.instance.currentUser,
        builder: (BuildContext context, AsyncSnapshot<User> snapshot) {
          if (snapshot.hasData) {
            User user = snapshot.data;
            /// is because there is user already logged
            return Dashboard();
          }

          /// other way there is no user logged.
          return LoginScreen();
        });
  }

我在代表The argument type 'User' can't be assigned to the parameter type 'Future&lt;User&gt;' 的第三行future: ... 中遇到错误。请有人向我解释我该怎么做,我做错了什么? 我试图在函数()=&gt; 中传递它,但它仍然不起作用...... 当前使用 firebase_auth:0.20 和 firebase_core 0.7

【问题讨论】:

  • FutureBuilder 拥有未来。 FirebaseAuth.instance.currentUser 不是未来。 FutureBuilder 不仅会接受不属于未来的东西,而且如果你一开始就没有未来可以等待,那FutureBuilder 就变得多余了。

标签: firebase flutter firebase-authentication


【解决方案1】:

这是因为 FirebaseAuth.instance.currentUser 返回 UserFutureBuilder 期望 future,要解决此问题,您有两个选择:

  • 使用此语法:future: Future.value(FirebaseAuth.instance.currentUser),,这会将User 转换为```Future
  • 检查FirebaseAuth.instance.currentUser 是否为null 并返回方便的小部件。

【讨论】:

    【解决方案2】:

    FirebaseAuth.instance.currentUser 不是未来。如果他们当前已登录,则直接返回当前的User,否则返回null

    试试这个:

    Widget build(BuildContext context) {
      return FirebaseAuth.instance.currentUser != null ? Dashboard() : LoginScreen();
    }
    

    不过,请注意,刷新页面时它可能首先为 null。

    参考:https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/currentUser.html


    相反,您可以查看Stream&lt;User&gt; authStateChanges ()

    参考:https://pub.dev/documentation/firebase_auth/latest/firebase_auth/FirebaseAuth/authStateChanges.html

    【讨论】:

      猜你喜欢
      • 2023-01-25
      • 2021-06-13
      • 2021-09-04
      • 2021-02-12
      • 1970-01-01
      • 2022-01-11
      • 2021-08-02
      • 2021-08-20
      • 2021-10-19
      相关资源
      最近更新 更多