参数类型';未来<;无效>;功能(FirebaseUser)和#x27;can';不能分配给参数类型';无效函数(用户)和#x27;

参数类型';未来<;无效>;功能(FirebaseUser)和#x27;can';不能分配给参数类型';无效函数(用户)和#x27;,firebase,flutter,dart,firebase-authentication,Firebase,Flutter,Dart,Firebase Authentication,我在尝试将我的Flatter应用程序与Firebase连接时出现此错误,我不明白为什么会出现此错误 无法将参数类型“Future Function(FirebaseUser)”分配给参数类型“void Function(User)” 此行出现的错误带有\u onStateChanged。整行是\u auth.onAuthStateChanged.listen(\u onStateChanged) 这是我的auth.dart代码: import 'package:cloud_firestore/c

我在尝试将我的Flatter应用程序与Firebase连接时出现此错误,我不明白为什么会出现此错误

无法将参数类型“Future Function(FirebaseUser)”分配给参数类型“void Function(User)”

此行出现的错误带有
\u onStateChanged
。整行是
\u auth.onAuthStateChanged.listen(\u 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 = " ";
   }
   }

import'包:cloud_firestore/cloud_firestore.dart';
导入“包:firebase_auth/firebase_auth.dart”;
进口“包装:颤振/材料.省道”;
导入“package:sokoni/src/helpers/user.dart”;
导入“package:sokoni/src/models/user.dart”;
枚举状态{未初始化、未验证、正在验证、已验证}
使用ChangeNotifier类AuthProvider{
//我们正在AuthProvider类中使用ChangeNotifier类的方法
FirebaseAuth_auth;
//忽略:不推荐的\u成员\u使用
FirebaseUser\u用户;
状态_Status=Status.Uninitialized;//初始状态
UserServices _UserServices=UserServices();
UserModel\u UserModel;
//getters=>我们可以访问类的值,但不能修改这些值
状态获取状态=>\u状态;
UserModel get UserModel=>\u UserModel;
//忽略:不推荐的\u成员\u使用
FirebaseUser获取用户=>\u用户;
//忽略:非常量标识符名称
final FormKey=GlobalKey();
TextEditingController电子邮件=TextEditingController();
TextEditingController名称=TextEditingController();
TextEditingController密码=TextEditingController();
AuthProvider.initialize():_auth=FirebaseAuth.instance{
//这将侦听用户身份验证状态,一旦发现更改,我们将对此采取措施
//忽略:不推荐的\u成员\u使用
_auth.onAuthStateChanged.listen(_onStateChanged);
}
Future sign()异步{
试一试{
_状态=状态。身份验证;
notifyListeners();
等待使用email和password(电子邮件:email.text,密码:password.text)进行身份验证登录;
返回true;
}捕获(e){
返回错误(例如toString());
}
}
未来签出(){
_auth.signOut();
_状态=状态。未经验证;
notifyListeners();
返回未来。延迟(持续时间为零);
}
Future signUp()异步{
试一试{
_状态=状态。身份验证;
notifyListeners();
等待_auth.createUserWithEmailAndPassword(电子邮件:email.text,密码:password.text)。然后((用户){
映射值={
“name”:name.text,
“email”:email.text,
“id”:user.user.uid,
};
_userServices.createUser(值);
});
返回true;
}捕获(e){
返回错误(例如toString());
}
}
//忽略:不推荐的\u成员\u使用
Future _onStateChanged(FirebaseUser FirebaseUser)异步{
if(firebaseUser==null){
_状态=状态。未初始化;
}否则{
_用户=firebaseUser;
_status=status.Authenticated;
_userModel=await\u userServices.getUserById(firebaseUser.uid);
}
notifyListeners();
}
//我的gen方法
bool_onError(字符串错误){
_状态=状态。未经验证;
notifyListeners();
打印(“我们有一个错误:$error”);
返回false;
}
无效控制器(){
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\u onStateChanged(FirebaseUser FirebaseUser)异步{
if(firebaseUser==null){
_状态=状态。未初始化;
}否则{
_用户=firebaseUser;
_status=status.Authenticated;
_userModel=await\u userServices.getUserById(firebaseUser.uid);
}
notifyListeners();
}

Future\u onStateChanged(用户)异步{
if(user==null){
_状态=状态。未初始化;
}否则{
_用户=用户;
_status=status.Authenticated;
_userModel=await\u userServices.getUserById(user.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();
    }