Flutter:谷歌登录方式,点击谷歌登录后无法打开选定的电子邮件帐户



我正试图在Flutter中创建一个使用谷歌帐户登录的按钮。我使用谷歌登录包通过Firebase进行身份验证。我已经用SHA值在firebase中创建了指纹,并在android/app中导入了谷歌JSON文件。

我无法获取用户选择要登录的谷歌帐户的框。

我得到的错误是:;在这个MyApp Widget上面找不到正确的提供者";

我的主文件如下:

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider.value(
value: GoogleSignInProvider(),
child: MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text("Check"),
),
body: Center(
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.black, onPrimary: Colors.blue),
child: const Text("Sign in with Google"),
onPressed: () {
final provider =
Provider.of<GoogleSignInProvider>(context, listen: false);
provider.googleLogin();
},
),
),
),
),
);
}
}

我的谷歌登录文件是这样的:

class GoogleSignInProvider extends ChangeNotifier {
final googleSignIn = GoogleSignIn();
GoogleSignInAccount? _user;
GoogleSignInAccount get user => _user!;
Future googleLogin() async {
final googleUser = await googleSignIn.signIn();
if (googleUser == null) return;
_user = googleUser;
final googleAuth = await googleUser.authentication;
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await FirebaseAuth.instance.signInWithCredential(credential);
notifyListeners();
}
}

在调用方法sign-out 时使用此选项

googleSignin.disconnect();

你也可以把这两个一起使用

await authService.logout();
await googleSignin.disconnect();

最新更新