[英]The argument type 'Future<dynamic> Function(RemoteMessage, dynamic)' can't be assigned to the parameter type 'void Function(RemoteMessage)?'. in my fl
[英]The argument type 'Future<void> Function(FirebaseUser)' can't be assigned to the parameter type 'void Function(User)'
我在嘗試將我的 Flutter 應用程序與 Firebase 連接時遇到此錯誤,但我不明白它為什么會出現。
參數類型 'Future<void> Function(FirebaseUser)' 不能分配給參數類型 'void Function(User)'
錯誤與_onStateChanged
一起出現在這一行。 整行是_auth.onAuthStateChanged.listen(_onStateChanged);
這是我的 auth.dart 代碼:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:sokoni/src/helpers/user.dart';
import 'package:sokoni/src/models/user.dart';
enum Status {Uninitialized, Unauthenticated, Authenticating, Authenticated}
class AuthProvider with ChangeNotifier{
// we're using the methods of the ChangeNotifier class in the AuthProvider class
FirebaseAuth _auth;
// ignore: deprecated_member_use
FirebaseUser _user;
Status _status = Status.Uninitialized;// initial status
UserServices _userServices = UserServices();
UserModel _userModel;
//getters => we can access the values of a class but we cannot modify the values
Status get status => _status;
UserModel get userModel => _userModel;
// ignore: deprecated_member_use
FirebaseUser get user => _user;
// ignore: non_constant_identifier_names
final FormKey = GlobalKey<FormState>();
TextEditingController email = TextEditingController();
TextEditingController name = TextEditingController();
TextEditingController password = TextEditingController();
AuthProvider.initialize(): _auth = FirebaseAuth.instance{
//this listens to the user authentication state the we will do something about once a change is caught
// ignore: deprecated_member_use
_auth.onAuthStateChanged.listen(_onStateChanged);
}
Future<bool> signIn() async{
try{
_status = Status.Authenticating;
notifyListeners();
await _auth.signInWithEmailAndPassword(email: email.text, password: password.text);
return true;
}catch(e){
return _onError(e.toString());
}
}
Future signOut(){
_auth.signOut();
_status = Status.Unauthenticated;
notifyListeners();
return Future.delayed(Duration.zero);
}
Future<bool> signUp() async{
try{
_status = Status.Authenticating;
notifyListeners();
await _auth.createUserWithEmailAndPassword(email: email.text, password: password.text).then((user) {
Map<String, dynamic> values = {
"name": name.text,
"email": email.text,
"id": user.user.uid,
};
_userServices.createUser(values);
});
return true;
}catch(e){
return _onError(e.toString());
}
}
// ignore: deprecated_member_use
Future<void> _onStateChanged(FirebaseUser firebaseUser) async{
if(firebaseUser == null){
_status = Status.Uninitialized;
}else {
_user = firebaseUser;
_status = Status.Authenticated;
_userModel = await _userServices.getUserById(firebaseUser.uid);
}
notifyListeners();
}
// my gen methods
bool _onError(String error){
_status = Status.Unauthenticated;
notifyListeners();
print("We got an error: $error");
return false;
}
void cleanControllers (){
email.text = " ";
password.text = " ";
name.text = " ";
}
}
我想你需要的是這個:
_auth.onAuthStateChanged.listen((User user) async{
await _onStateChanged(user);
}
);
正如另一個答案所暗示的那樣,將FirebaseUser
更改為User
FirebaseUser
現在在 Firebase 庫中已棄用並替換為User
,您應該更改您的方法
Future<void> _onStateChanged(FirebaseUser firebaseUser) async{
if(firebaseUser == null){
_status = Status.Uninitialized;
}else {
_user = firebaseUser;
_status = Status.Authenticated;
_userModel = await _userServices.getUserById(firebaseUser.uid);
}
notifyListeners();
}
到
Future<void> _onStateChanged(User user) async{
if(user== null){
_status = Status.Uninitialized;
}else {
_user = user;
_status = Status.Authenticated;
_userModel = await _userServices.getUserById(user.uid);
}
notifyListeners();
}
您可以查看文檔以了解新功能
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.