我正在为用户创建/日志,但我有多个错误,这是我的代码,在我的错误之后: 登录控制器.dart :
String? _mail;
String? _password;
String? _prenom;
String? _nom;
_handlelog(){
if(_mail != null){
if(_password != null){
if(_log == true){
//se connecter
FirebaseHelper().handleSignIn(_mail, _password).then(((User user) {
print("Nous avons un user");
})).catchError((error){
alerte(error.toString());
});
}else{
if(_prenom != null){
if(_nom != null){
//créer un compte avec les données de l'utilisateur
FirebaseHelper().handleCreate(_mail, _password, _prenom, _nom).then(((User user) {
print("Nous avons pu créer un user");
})).catchError((error){
alerte(error.toString());
});
}else{
//Alert nom
alerte("veuillez entrer un nom pour continuer");
}
}else{
//Alert prenom
alerte("veuillez entrer un prenom pour continuer");
}
}
}else{
//Alert password
alerte("le mot de passe est vide");
}
}else{
//Alert mail
alerte("l'adresse mail est vide");
}
}
FirebaseHelper.dart :
class FirebaseHelper {
//Authentification
final auth = FirebaseAuth.instance;
Future<UserCredential> handleSignIn(String mail, String password) async{
final UserCredential user = await auth.signInWithEmailAndPassword(email: mail, password: password);
return user;
}
Future<UserCredential> handleCreate(String mail, String password, String prenom, String nom) async{
final UserCredential credential = await FirebaseAuth.instance.createUserWithEmailAndPassword(email: mail, password: password);
String uid = credential.user!.uid;
Map<String, String> map = {
"uid" : uid,
"prenom" : prenom,
"nom" : nom,
};
addUser(uid, map);
return credential;
}
//database
static final base = FirebaseDatabase.instance.reference();
// ignore: non_constant_identifier_names
final base_user = base.child("users");
addUser(String uid, Map map){
base_user.child(uid).set(map);
}
}
在 LoginController.dart 我有
The argument type 'String?' can't be assigned to the parameter type 'String'.
The argument type 'Null Function(User)' can't be assigned to the parameter type 'FutureOr<dynamic> Function(UserCredential)'.
我不知道我能做什么,我在文档上搜索了很长时间,在这个网站上找到了更多细节,但我什么也没找到,我很绝望
答案 0 :(得分:0)
我用过这个,也许会有帮助
class AuthServices {
final FirebaseAuth _auth = FirebaseAuth.instance;
//Create user object based on firebase user
UserData _userFromFirebaseUser(User user) {
return user != null ? UserData(uid: user.uid, email: user.email) : null;
}
//Auth change user stream
Stream<UserData> get uservalue {
return _auth.authStateChanges().map((User uservalue) => _userFromFirebaseUser(uservalue));
}
// Sign In with email & password
Future sigInUser(String email, String password) async {
try {
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
User userval = result.user;
return _userFromFirebaseUser(userval);
}
catch(e) {
print(e.toString());
return null;
}
}
// Register with email & password
Future registerUser(String email, String password) async {
try {
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User userval = result.user;
return _userFromFirebaseUser(userval);
}
catch(e) {
print(e.toString());
}
}
}
答案 1 :(得分:0)
错误 1:
参数类型“字符串?”不能分配给参数类型 '字符串'。
显示上面的错误是因为 _mail
、_password
、_prenom
和 _nom
属于 String?
类型,这意味着它们可以为 null 而参数为FirebaseHelper().handleCreate()
方法属于 String
类型,与 String?
不同。
后缀感叹号 (!) 使用左侧的表达式并 将其强制转换为其底层不可为空类型
https://dart.dev/null-safety/understanding-null-safety#null-assertion-operator
因此添加 !
会将 String?
对象强制转换为类型 String
。
错误 2:
不能将参数类型“Null Function(User)”分配给 参数类型“FutureOr 函数(UserCredential)”。
上述错误的原因是 FirebaseHelper().handleCreate()
返回 Future<UserCredential>
类型,但您在 User
文件中使用 LoginController.dart
作为类型。
解决方案:
您需要更新这部分代码:
FirebaseHelper().handleCreate(_mail, _password, _prenom, _nom).then(((User user) {
为此:
FirebaseHelper().handleCreate(_mail!, _password!, _prenom!, _nom!).then(((UserCredential user) {