【问题标题】:The argument type 'Null' can't be assigned to the parameter type 'FirebaseUser'.dart(argument_type_not_assignable)参数类型“Null”不能分配给参数类型“FirebaseUser”.dart(argument_type_not_assignable)
【发布时间】:2021-07-01 20:47:56
【问题描述】:
我正在开发一个颤振的身份验证应用程序,同时尝试退出我得到一个错误,类型 null 不能分配给参数类型。
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:time_tracker_app/app/home_page.dart';
import 'package:time_tracker_app/app/sign_in/sign_in_page.dart';
class LandingPage extends StatefulWidget {
@override
_LandingPageState createState() => _LandingPageState();
}
class _LandingPageState extends State<LandingPage> {
FirebaseUser? _user;
void _updateUser(FirebaseUser user) {
setState(() {
_user = user;
});
}
@override
Widget build(BuildContext context) {
if (_user == null) {
return SignInPage(onSignIn: _updateUser);
}
return HomePage(
//error
onSignOut: () => _updateUser(null),
);
}
}
【问题讨论】:
标签:
firebase
flutter
dart
firebase-authentication
【解决方案1】:
遇到同样的问题,我尝试使用user.uid 作为字符串而不是所有用户类来稍微更改逻辑。我知道这不是最性感的解决方案,但它最终会奏效。
class LandingPage extends StatefulWidget {
LandingPage({Key? key}) : super(key: key);
@override
_LandingPageState createState() => _LandingPageState();
}
class _LandingPageState extends State<LandingPage> {
String? _userId = '';
void _updateUser(String userId) {
print('User id: $userId');
setState(() {
_userId = userId;
});
}
@override
Widget build(BuildContext context) {
if (_userId == '') {
return SignInPage(
onSignIn: (user) => _updateUser(user.uid),
);
} else {
return HomePage(
onSignOut: () => _updateUser(''),
);
}
}
}
【解决方案2】:
在FirebaseAuth.instance.signOut() 之后获取具有 User(Firebase) 返回类型的当前用户并作为参数传递..
示例代码:
FirebaseAuth.instance.signOut;
FirebaseAuth.instance.currentUser;
onSignOut(FirebaseAuth.instance.currentUser);