【问题标题】:Not able to retrieve Firebase User无法检索 Firebase 用户
【发布时间】:2021-07-25 08:48:17
【问题描述】:

我无法检索 Firebase 用户。下面是我的用户类,只是为了从 Firebase 用户数据中获取必填字段。

class Users {
   final String uid;
   Users({ required this.uid });
}

下面是我的 Auth 类:

import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:codeproject/models/users.dart';


abstract class AuthBase {
  Stream<Users> get authStateChanges;
  Future<Users> currentUser();
  Future<Users> signInAnonymously();
  Future<Users> signInWithEmailAndPassword(String email, String password);
  Future<Users> createUserWithEmailAndPassword(String email, String password);
  Future<Users> signInWithGoogle();
  Future<void> signOut();
}

class AuthService implements AuthBase {
  final FirebaseAuth _auth = FirebaseAuth.instance;

  Users _userFromFirebase(User user) {
    if (user == null) {
      **return null;**
    }
    return Users(uid: user.uid);
  }
// ERROR: A value of type 'Null' can't be returned from the method '_userFromFirebase' because it has a return type of 'Users'.




  @override
  Stream<Users> get authStateChanges {
    return _auth.authStateChanges().map(**_userFromFirebase**);
  }
//ERROR: The argument type 'Users Function(User)' can't be assigned to the parameter type 'Users Function(User?)'.

  @override
  Future<Users> currentUser() async {
    final user = _auth.currentUser;
    return _userFromFirebase(**user**);
  }
//ERROR: The argument type 'User?' can't be assigned to the parameter type 'User'.


  @override
  Future<Users> signInAnonymously() async {
    final authResult = await _auth.signInAnonymously();
    return _userFromFirebase(**authResult.user**);
  }
//ERROR: The argument type 'User?' can't be assigned to the parameter type 'User'.

}

我用 **** 突出显示的错误部分

【问题讨论】:

  • 请不要在帖子中添加“谢谢”、签名和其他噪音:它们只会为网站的编辑创造更多的工作。 Stack Overflow 是问题和答案的集合,而不是论坛。把我们想象成一本百科全书。如果您担心帖子的归属,那么每个帖子上都会显示一张用户卡。

标签: firebase flutter firebase-authentication


【解决方案1】:

将返回类型更改为用户?和用户? (我假设这是您的自定义数据类型)

如果没有用户登录并且用户是否有用户登录,FirebaseAuth 当前用户返回 null。由于 null 安全,用户?和 User 是不同的类型。

例子:

Users? _userFromFirebase(User? user) {
    if (user == null) {
      return null;
    }
    return Users(uid: user.uid);
  }

【讨论】:

  • 我仍然收到同样的错误不能返回 null...
  • 您还必须将用户更改为用户?因为现在它可以为空了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 1970-01-01
  • 2018-07-27
  • 2020-07-31
相关资源
最近更新 更多