【发布时间】:2022-01-24 01:47:10
【问题描述】:
我的颤振应用有问题。我正在关注“The Net Ninja”的flutter-firebase教程,但我添加了“?”在“用户”之后使其可以为空。
但是,我仍然在 main.dart 中的 'AuthService().user' 第 10 行收到此错误:'参数类型 'Stream
'User' 第 16 行的 auth.dart 中出现错误:'User' 类没有默认构造函数。
我尝试添加和删除“?” '>' 之前和之后的所有地方,但这没有帮助。 我也不能添加“?”在第 16 行的“用户”之后,因为它在“uid”上给出了错误。
这是我的 main.dart:
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()
),
));
这是我的 auth.dart:
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;
}
}
}
感谢您的帮助
【问题讨论】: