使用提供商登录Firebase谷歌后如何处理导航?



我正在创建一个简单的应用程序,可以使用Firebase google_sigin对用户进行身份验证。我创建了AuthChecker小部件,它检查身份验证并返回登录页面,用户可以在其中使用google登录。登录完成后,我想返回AuthChecker并显示主页。

下面的代码是我的实现,它给出了上下文错误

从main.dart文件中,AuthChecker小部件被调用:

class AuthChecker extends StatefulWidget {
@override
_AuthCheckerState createState() => _AuthCheckerState();
}
class _AuthCheckerState extends State<AuthChecker> {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getCurrentUser(),
builder: (context, snapshot){
if(snapshot.connectionState == ConnectionState.done){
//got response
FirebaseUser user = snapshot.data;
LoginStateProvider prov = Provider.of<LoginStateProvider>(context);
if(user == null){
//not loggedin pls login
return LoginPage();
}else{
//already logged in
print("Already logged in");
prov.updateUserState(user);
return Home();
}
}
},
);
}
}

登录页面包含登录按钮:

Widget signInButton(BuildContext context) {
return OutlineButton(
onPressed: () {
signInWithGoogle().whenComplete(() {
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (context)=>AuthChecker();
),
ModalRoute.withName('/auth_check')
);
},
}

提供程序类如下所示:

class LoginStateProvider with ChangeNotifier{
String uid;
String name;
String email;
String profilePhoto;
LoginStateProvider({
this.uid,
this.name,
this.email,
this.profilePhoto,
});
void updateUserState(FirebaseUser user){
this.uid = user.uid;
this.name = user.displayName;
this.email = user.email;
this.profilePhoto = user.photoUrl;
}
}

我收到以下错误:

I/flutter ( 9551):   * Ensure the Provider<LoginStateProvider> is an ancestor to this FutureBuilder<FirebaseUser>
I/flutter ( 9551): Widget
I/flutter ( 9551):   * Provide types to Provider<LoginStateProvider>
I/flutter ( 9551):   * Provide types to Consumer<LoginStateProvider>
I/flutter ( 9551):   * Provide types to Provider.of<LoginStateProvider>()
I/flutter ( 9551):   * Always use package imports. Ex: `import 'package:my_app/my_code.dart';
I/flutter ( 9551):   * Ensure the correct `context` is being used.
I/flutter ( 9551):
I/flutter ( 9551): If none of these solutions work, please file a bug at:
I/flutter ( 9551): https://github.com/rrousselGit/provider/issues

你可以尝试这样做:

Widget signInButton(BuildContext context) {
return OutlineButton(
onPressed: () {
signInWithGoogle().whenComplete(() {
FirebaseUser user = snapshot.data;
if (user == null) {
//Route to login
} else {
//route to somewhere
}
},
}

并创建一个带有您的徽标和在 initState 运行的异步函数的初始屏幕,该函数检查if user == null并在需要时路由登录或主页(如果已登录(。

这里有一个很好的例子:Flutter 中的 Firebase 身份验证状态检查

我不确定它是否有帮助,或者这是否真的是你的问题,对不起,如果我误解了你

最新更新