类'User'没有默认构造函数 -flutter



我的flutter应用程序出现问题。我正在学习"网络忍者"的一个颤动火球教程,但我添加了"?"在"User"之后,使其可以为null。

但是,我在main.dart中的"AuthService((.user"第10行仍然收到此错误:"参数类型"Stream<用户>?(其中User是在C:…\firebase_auth-3.2.0\lib\src\User.dart中定义的,不能将其分配给参数类型"Stream<User?>?"(其中User在C:…\ my_app\lib\models\User.dar中定义(">

"User"第16行的auth.dart中出现错误:类"User"没有默认构造函数。

我尝试添加和删除"?">"前后的所有位置但这无济于事。我也不能添加"?"在第16行的"User"之后,因为它在"uid"上给出了一个错误。

这是我的主要作品。艺术:

import 'package:flutter/material.dart';
import 'package:irrigationapp/screens/authenticate/sign_in.dart';
import 'package:irrigationapp/screens/wrapper.dart';
import 'package:irrigationapp/services/auth.dart';
import 'package:irrigationapp/models/user.dart';
import 'screens/language.dart';
import 'package:provider/provider.dart';
void main() => runApp(StreamProvider<User?>.value(
value: AuthService().user,
initialData: null,
child:   MaterialApp(

debugShowCheckedModeBanner: false,

home: Wrapper()



),
));

这是我的授权。艺术:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:irrigationapp/models/user.dart' as UserModal;
import 'package:irrigationapp/services/database.dart';
class AuthService {
final FirebaseAuth _auth = FirebaseAuth.instance;
//create a user object based on FirebaseUser (the return type is user then)
//underscore cz this is a private function that we can only use here.
//if it's true return the uid, else return null.
// ignore: unused_element
User? _userFromFirebaseUser(User? user)  {
// ignore: unnecessary_null_comparison
if (user !=null) {
return User?(uid: user.uid);
}else{
return null;
}
}
//auth change user stream
Stream<User?>? get user{
return _auth.authStateChanges()
.map(_userFromFirebaseUser);
}
//sign in anonymously
Future signInAnon() async{
try{
UserCredential result = await _auth.signInAnonymously();
User? user = result.user;
return _userFromFirebaseUser(user!);
}
catch(e){
// ignore: avoid_print
print(e.toString());
return null;
}
}
//sign in using mail and pass
Future signInWithEmailAndPassword(String email, String password) async{
try{
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
// ignore: unused_local_variable
User? user = result.user;
return _userFromFirebaseUser(user!);
}catch(e){
// ignore: avoid_print
print(e.toString());
return null;
}
}
}

感谢您的帮助

package:firebase_auth将其FirebaseUser类重命名为仅User。假设您试图通过在代码中进行搜索和替换来解决此问题,将FirebaseUser更改为仅User,但这导致了与自己的User类的名称冲突。然后,您试图通过为类添加库前缀来避免这种冲突,但没有正确修复所有使用站点。

(FirebaseUser类不提供任何公共构造函数,导致错误。(

你有一个功能:

//create a user object based on FirebaseUser (the return type is user then)
//underscore cz this is a private function that we can only use here.
//if it's true return the uid, else return null.
// ignore: unused_element
User? _userFromFirebaseUser(User? user)  {
// ignore: unnecessary_null_comparison
if (user !=null) {
return User(uid: user.uid);
}else{
return null;
}
}

这目前没有意义,因为它将CCD_ 8作为参数,然后返回相同的类型。函数名称和描述表明您打算接受一个FirebaseUser对象,并返回您自己的User对象,可能来自前缀为UserModelpackage:irrigationapp/models/user.dart。因此,您需要将其更改为:

//create a user object based on FirebaseUser (the return type is user then)
//underscore cz this is a private function that we can only use here.
//if it's true return the uid, else return null.
// ignore: unused_element
UserModel.User? _userFromFirebaseUser(User? user)  {
// ignore: unnecessary_null_comparison
if (user !=null) {
return UserModel.User(uid: user.uid);
}else{
return null;
}
}

(就我个人而言,我认为最好为Firebase类添加一个库前缀。(

最新更新