Flutter 颤振:在等待Google登录完成时显示加载小部件
在登录Google时,就在我进入userInfoPath之前,屏幕变黑,然后再次显示登录页面,然后再转到userInfoPath。我正在尝试添加加载小部件,以便它可以很好地从google登录过渡到userInfoPath,但我可以获取加载小部件,并且它保持在加载小部件上,而不移动到UserInfoScreen,或者我根本无法获取它。关于如何解决这一问题的帮助将是巨大的 登录屏幕Flutter 颤振:在等待Google登录完成时显示加载小部件,flutter,Flutter,在登录Google时,就在我进入userInfoPath之前,屏幕变黑,然后再次显示登录页面,然后再转到userInfoPath。我正在尝试添加加载小部件,以便它可以很好地从google登录过渡到userInfoPath,但我可以获取加载小部件,并且它保持在加载小部件上,而不移动到UserInfoScreen,或者我根本无法获取它。关于如何解决这一问题的帮助将是巨大的 登录屏幕 class LoginScreen extends StatefulWidget { @override _L
class LoginScreen extends StatefulWidget {
@override
_LoginScreenState createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
AuthService auth = AuthService();
@override
void initState() {
super.initState();
auth.getUser.then(
(user) {
if (user != null) {
Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
}
},
);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: white,
body: Container(
padding: Sizes2.edInsAll,
decoration: const BoxDecoration(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Image.asset(Strings.imageLogo,
width: Sizes2.imageWidth,
height: Sizes2.imageHeight,
),
Text(SharedStrings.planetRescue, style: appName, textAlign: TextAlign.center),
Text(Strings.liveSustainablySlogan, style: greySubTxt, textAlign: TextAlign.center),
LoginButton(
text: Strings.loginWithGoogle,
icon: FontAwesomeIcons.google,
color: orangeGrey,
loginMethod: auth.googleSignIn,
),
Container(
margin: Sizes1.onlyBot,
child: FlatButton.icon(
padding: Sizes2.edInsAll,
icon: const Icon(Icons.email, color: Colors.white),
color: orangeGrey,
onPressed: () => changeScreen(context, AuthWidget()),
label: Expanded(
child: Text(Strings.loginWithEmail, style: formalBtnTextSml, textAlign: TextAlign.center),
),
),
),
...
加载小部件
class Loading extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
color: white,
child: Center(
child: SpinKitChasingDots(
color: deepOrange,
size: Sizes2.loadSz,
),
),
);
}
}
首先,创建以下两种方法:
void showDialogue(BuildContext context){
showDialog(
context: context,
builder: (BuildContext context) => Loading(),
);
}
void hideProgressDialogue(BuildContext context) {
Navigator.of(context).pop(Loading());}
然后在您的登录按钮中,替换您的:
onPressed: () async {
var user = await loginMethod();
if (user != null) {
Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
}
与:
让我知道这是否对您有效:)欢迎:)我很高兴它在@SK7 Happy Coding:)@iamnabrink Happy Coding:)
onPressed: () async {
var user = await loginMethod();
if (user != null) {
Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
}
onPressed: () async {
showDialogue(context);
var user = await loginMethod();
if (user != null) {
hideProgressDialogue(context);
Navigator.pushReplacementNamed(context, SharedStrings.userInfoPath);
}