Firebase 的新版本 onAuthStateChanged -> authStateChanges 0 [重复]

Posted

技术标签:

【中文标题】Firebase 的新版本 onAuthStateChanged -> authStateChanges 0 [重复]【英文标题】:New Version of Firebase onAuthStateChanged -> authStateChanges 0 [duplicate] 【发布时间】:2021-02-12 07:29:53 【问题描述】:

我正在将此代码迁移到最新版本的 firebase,目前我唯一苦苦挣扎的部分是我的 auth.dart 文件中的这段代码。

@override
Stream<Users> get onAuthStateChanges 
  return _firebaseAuth.onAuthStateChanges.map(_userFromFirebase);


为了迁移到最新版本,我是这样写的:

@override
Stream<Users> get authStateChanges 
  return _firebaseAuth.authStateChanges.map(_userFromFirebase);

我不断收到此错误:

方法“map”没有为类型“Function”定义。

我似乎找不到任何关于如何正确编写它的文档。有人会碰巧知道如何解决这个问题吗?

提前感谢您的帮助

PS

如果您想知道我为什么要迁移此代码,我的模拟器会一直抱怨 Firebase Core 插件丢失(我猜是因为 Google-services.json 文件)并且所有身份验证按钮都不起作用。单击后,我收到此“return firebase.google.cms”错误”。模拟器工作正常,直到我最近对 ​​Xcode 进行了更新,现在它给了我这个奇怪的错误代码,并且不会完成颤振运行。所以我想如果我获得了最新版本的 firebase 并更新了代码,因此我可以再次使用我的模拟器和/或模拟器。然后我在 authStateChanges.map 代码中遇到了上述问题,我们就在这里。

这是我的完整 auth.dart 文件供您参考:

class Users 
  final String uid;

  Users(@required this.uid);


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 Auth implements AuthBase 
  final _firebaseAuth = FirebaseAuth.instance;

  //To avoid confusion due to updates, "Users" come from the class Users and "User" replaces the deprecated "FirebaseUser".

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

  @override
  Stream<Users> get authStateChanges 
    return _firebaseAuth.authStateChanges.map(_userFromFirebase);
  

  @override
  Future<Users> currentUser() async 
    final user = _firebaseAuth.currentUser;
    return _userFromFirebase(user);
  

  @override
  Future<Users> signInAnonymously() async 
    final authResult = await _firebaseAuth.signInAnonymously();
    return _userFromFirebase(authResult.user);
  

  @override
  Future<Users> signInWithEmailAndPassword(String email, String password) async 
    final authResult = await _firebaseAuth.signInWithEmailAndPassword(
        email: email, password: password);
    return _userFromFirebase(authResult.user);
  

  @override
  Future<Users> createUserWithEmailAndPassword(
      String email, String password) async 
    final authResult = await _firebaseAuth.createUserWithEmailAndPassword(
        email: email, password: password);
    return _userFromFirebase(authResult.user);
  

  @override
  Future<Users> signInWithGoogle() async 
    final googleSignIn = GoogleSignIn();
    final googleAccount = await googleSignIn.signIn();
    if (googleAccount != null) 
      final googleAuth = await googleAccount.authentication;
      if (googleAuth.accessToken != null && googleAuth.idToken != null) 
        final authResult = await _firebaseAuth.signInWithCredential(
          GoogleAuthProvider.credential(
              idToken: googleAuth.idToken, accessToken: googleAuth.accessToken),
        );
        return _userFromFirebase(authResult.user);
       else 
        throw PlatformException(
            code: 'ERROR_MISSING_GOOGLE_AUTH_TOKEN',
            message: 'Missing Google Auth Token');
      
     else 
      throw PlatformException(
          code: 'ERROR_ABORTED_BY_USER', message: 'Sign in aborted by user');
    
  

  @override
  Future<void> signOut() async 
    final googleSignin = GoogleSignIn();
    await googleSignin.signOut();
    await _firebaseAuth.signOut();
  

这是我正在使用的依赖项:

dependencies:
  flutter:
    sdk: flutter
  font_awesome_flutter: ^8.8.1
  image_picker: ^0.6.7+6
  provider: ^4.3.2+1
  path_provider: ^1.6.14
  path: ^1.7.0
  firebase_core: ^0.5.0
  cloud_firestore: ^0.14.1+2
  google_sign_in: ^4.5.3
  firebase_auth: ^0.18.1+1
  firebase_storage: ^4.0.1
  image: ^2.1.18
  animator: ^2.0.1
  geolocator: ^5.3.2+2
  uuid: ^2.2.2
  cached_network_image: ^2.3.2+1
  bubble: ^1.1.9+1
  flutter_cupertino_date_picker: ^1.0.26+2

【问题讨论】:

似乎正在和 Andrea 一起学习代码!我正在学习相同的教程! 【参考方案1】:

在新的库版本中,authStateChanges是一个方法,所以你需要在它后面加上()

return _firebaseAuth.authStateChanges().map(_userFromFirebase);

【讨论】:

非常感谢!!!成功了!!!

以上是关于Firebase 的新版本 onAuthStateChanged -> authStateChanges 0 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 的新版本 onAuthStateChanged -> authStateChanges 0 [重复]

Firebase Pods 不断发布新版本/更改源

Firebase 消息服务在新版本中从不调用 onMessageReceived()

firebase gustil cp 命令输出,不能存储在 txt 文件中。如何获得一代新版本?

如何观察 firebase.auth().currentUser.displayName 和其他属性的变化?

Android studio 4.0 新更新版本说 Kotlin 与这个新版本不兼容