Man*_*ngs 1 dart firebase firebase-authentication flutter
我正在将此代码迁移到最新版本的 firebase,目前我唯一遇到的问题是我的 auth.dart 文件中的这段代码。
@override
Stream<Users> get onAuthStateChanges {
return _firebaseAuth.onAuthStateChanges.map(_userFromFirebase);
}
Run Code Online (Sandbox Code Playgroud)
为了迁移到最新版本,我这样写:
@override
Stream<Users> get authStateChanges {
return _firebaseAuth.authStateChanges.map(_userFromFirebase);
}
Run Code Online (Sandbox Code Playgroud)
我不断收到此错误:
没有为类型“Function”定义方法“map”。
我似乎找不到任何有关如何正确编写它的文档。有人知道如何解决这个问题吗?
在此先感谢您的帮助
聚苯乙烯
如果您想知道为什么我要迁移此代码,我的模拟器不断抱怨 Firebase Core 插件丢失(我猜是由于 Google-services.json 文件)并且所有身份验证按钮都不起作用。单击后,我收到此“return firebase.google.cms”错误。模拟器工作正常,直到我最近对 Xcode 进行更新,现在它给了我这个奇怪的错误代码,并且不会完成 flutter 运行。所以我想如果我获取了最新版本的 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();
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的依赖项:
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
Run Code Online (Sandbox Code Playgroud)
Fra*_*len 11
在新的库版本中,authStateChanges是一个方法,因此需要放在()它后面。
return _firebaseAuth.authStateChanges().map(_userFromFirebase);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |