getter 'uid' 未定义

The getter 'uid' not defined

我正在尝试在 android studio 上创建美食曲目应用程序,这是我的第一次,我正在使用 firebase_auth 3.3.12。我在 aut.dart 中的代码是:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:my_firstapp/models/user_model.dart';

class AuthService {

  final FirebaseAuth _auth = FirebaseAuth.instance;

  AuthService();

  // create user object based on FirebaseUser.
  UserModel _userFromUser(User) {
    return user != null ? UserModel(uid: user.uid) : null;
  }

  // auth change user stream
  Stream<UserModel> get user {
    return _auth.authStateChanges()
        .map(_userFromUser);

  }

  Future<UserModel> getUser() async {
    User user = await _auth.currentUser();
    return _userFromUser(user);
  }

  // sign in with email and password
  Future signInWithEmailAndPassword(String email, String password) async {
    try {
      UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
      User user = result.user;
      return _userFromUser(user);
    } catch(e) {
      print(e.toString());
      return null;
    }
  }

  // sign up with email and password
  Future registerWithEmailAndPassword(String email, String password) async {
    try {
      UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
      User user = result.user;
      // create a new user document in database
      return _userFromUser(user);
    } catch(e) {
      print(e.toString());
      return null;
    }
  }

  // sign out
  Future signOut() async {
    try {
      return await _auth.signOut();
    } catch(e){
      print(e.toString());
      return null;
    }
  }

}

但是我遇到了 2 个错误: - getter 'uid' 没有为类型 'Stream' 定义; - 表达式“await _auth.currentUser()”的计算结果不是函数,因此无法调用。

如何重写代码?谢谢

在这段代码中,您的参数是大写的 ('User'),但在您编写的代码块中 'user'。

UserModel _userFromUser(User) {
    return user != null ? UserModel(uid: user.uid) : null;
  }

此外,对于 _auth.currentUser(),您不需要使用 await,因为它没有 return 未来。

_auth.currentUser 不是一个函数(它曾经是,但大约一年前改变了),而是一个 属性。它也不是异步的,所以你不需要 await 也不需要 return a Future.

所以:

UserModel getUser() {
  User user = _auth.currentUser;
  return _userFromUser(user);
}