【发布时间】:2020-06-01 11:27:56
【问题描述】:
我在以下代码中出现错误。我已经声明了所有函数并且没有编译时错误。它在运行时显示错误。 错误在以下方式。
NoSuchMethodError: The method 'getCurrentUser' was called on null.
Reciever: null
Tried calling: getCurrentUser()
see also: https://flutter.dev/docs/testing/errors
此代码放置在 MappingPage.dart 文件中,该文件将由 main.dart 文件调用。
import 'package:flutter/material.dart';
import 'loginPage.dart';
import 'homePage.dart';
import 'authentication.dart';
class MappingPage extends StatefulWidget
{
final AuthImplementation auth;
MappingPage({
this.auth
});
@override
_MappingPageState createState() => new _MappingPageState();
}
enum AuthStatus
{
notSignedIn,
signedIn,
}
class _MappingPageState extends State<MappingPage>
{
AuthStatus authStatus = AuthStatus.notSignedIn;
@override
void initState()
{
super.initState();
widget.auth.getCurrentUser().then((firebaseUserId)
{
setState(() {
authStatus = firebaseUserId == null ? AuthStatus.notSignedIn : AuthStatus.signedIn;
print("Initial state");
});
});
}
void _signedIn()
{
setState(() {
authStatus = AuthStatus.signedIn;
});
}
void _signedOut()
{
setState(() {
authStatus = AuthStatus.notSignedIn;
});
}
@override
Widget build(BuildContext context)
{
switch(authStatus)
{
case AuthStatus.notSignedIn:
return loginPage
(
auth: widget.auth,
onSignedIn: _signedIn,
);
case AuthStatus.signedIn:
return homePage
(
auth: widget.auth,
onSignedOut: _signedOut,
);
}
return null;
}
}
此代码为 authentication.dart 文件
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';
abstract class AuthImplementation
{
Future<String> SignIn(String email, String password);
Future<String> getCurrentUser();
Future<void> signOut();
}
class Auth implements AuthImplementation
{
final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
final GoogleSignIn _googleSignIn = GoogleSignIn();
Future<String> SignIn(String email, String password) async
{
try {
GoogleSignInAccount googleSignInAccount = await _googleSignIn.signIn();
GoogleSignInAuthentication googleAuth =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
FirebaseUser user = (await _firebaseAuth.signInWithCredential(credential)).user;
// updateUserData(user);
print("user name: ${user.displayName}");
// loading.add(false);
return user.uid;
} catch (error) {
return error;
}
}
Future<String> getCurrentUser() async
{
FirebaseUser user = await _firebaseAuth.currentUser();
return user.uid;
}
Future<void> signOut() async
{
_firebaseAuth.signOut();
}
}
我不知道它有什么错误。请帮忙!
【问题讨论】:
-
似乎
widget.auth为空。您是否正确设置了该值? -
@MidhunMP 我可以知道如何设置值吗?
-
从哪里以及如何初始化
MappingPage? -
@MidhunMP 是的,明白了,谢谢。我没有在我的
main.dart文件中设置MappingPage的值,谢谢!现在它工作正常! -
不客气,编码快乐!!! :)
标签: android firebase flutter firebase-authentication