我目前正在尝试在我的应用程序中实现谷歌登录和身份验证。我已经建立了一个项目并在 Firebase 中创建了一个应用程序,将 google-services.json 放在应用程序中,向 build.gradle 添加了必要的插件,并在 firebase 中设置了 SHA-1 密钥。电子邮件身份验证运行良好,但 google 身份验证导致问题。
所有身份验证都是通过我创建的“身份验证”包完成的。它包含一个身份验证页面并执行所有身份验证逻辑。运行的“主要”flutter 应用程序导入此包以供使用。这个“主”项目的 build.gradle 文件包含 Google 服务插件 ( com.google.gms:google-services:4.3.2)的附加内容。一旦“主”项目运行,它会检查用户当前是否登录。如果没有,它会将控制权交给“身份验证”包以显示身份验证屏幕并处理登录。
选择我要登录的谷歌帐户后出现问题。选择帐户后,帐户选择对话框将关闭,之后没有任何反应。用户未通过身份验证(在 Firebase 中确认),不会引发任何异常,并且围绕所有内容的 try-catch 不会捕获任何异常。似乎该函数的所有执行都停止了。我仍然可以在应用程序中移动,但登录方法永远不会完成执行。
您可以在下面看到登录方法。执行后由于final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();某种原因行执行不继续。
///
Future<String> _signUpWithGoogle() async {
bool isLoggedIn = await _firebaseAuth.isLoggedIn();
if (!isLoggedIn) {
googleSignIn = GoogleSignIn();
final GoogleSignInAccount googleSignInAccount =
await googleSignIn.signIn();
final GoogleSignInAuthentication googleSignInAuthentication =
await googleSignInAccount.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleSignInAuthentication.accessToken,
idToken: googleSignInAuthentication.idToken,
);
final AuthResult authResult =
await _firebaseAuth.signInWithCredential(credential);
final …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个 Dismissible 小部件,我可以向下拖动以关闭它。有一个要求,Dismissible 的透明度应该随着它被拖得越深而增加。所以它应该看起来好像在它被解雇时逐渐消失。如果将其向上拖动,则其透明度应降低。
作为一个简单的测试,我尝试将 Dismissible 包装在 Listener 和 Opacity 小部件中。不透明度值设置为状态跟踪的变量。Listener 小部件侦听 Dismissible 的总“y”轴移动,当它达到某个阈值时,降低状态中跟踪的不透明度值。例如,请参见下面的代码:
import 'package:flutter/material.dart';
class FadingDismissible extends StatefulWidget {
@override
_FadingDismissible createState() => _FadingDismissible();
}
class _FadingDismissible extends State<FadingDismissible> {
double _totalMovement = 0;
double _opacity;
@override
void initState() {
super.initState();
_opacity = 1.0;
}
_setOpacity(double opacityValue) {
setState(() {
_opacity = opacityValue;
});
}
@override
Widget build(BuildContext context) {
return Listener(
onPointerMove: (PointerMoveEvent event) {
_totalMovement += event.delta.dy;
if (_totalMovement > 200) {
_setOpacity(0.5);
}
},
onPointerUp: …Run Code Online (Sandbox Code Playgroud)