我已经创建了一个变量"isLoading"来调用加载器. 实际的问题是,当我简单地点击"signIn"按钮,而没有在测试字段中给出任何值时,它将开始加载延迟时间 我如何才能在没有给出任何值的情况下停止这一操作,同时捕捉到按下"signIn"按钮时的错误. 这是我的回购:food delivery app

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import '../../config/constants.dart';

class LoginScreen extends StatefulWidget {
  const LoginScreen({Key? key}) : super(key: key);

  @override
  State<LoginScreen> createState() => _LoginScreenState();
}

class _LoginScreenState extends State<LoginScreen> {
  final emailController = TextEditingController();
  final passwordController = TextEditingController();
  @override
  void dispose() {
    emailController.dispose();
    passwordController.dispose();

    super.dispose();
  }

  bool isLoading = false;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        padding: const EdgeInsets.all(20),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            const Text('login'),
            htspace20,
            TextField(
              controller: emailController,
              decoration: const InputDecoration(
                border: OutlineInputBorder(),
                label: Text('Email'),
              ),
            ),
            htspace20,
            TextField(
              controller: passwordController,
              decoration: const InputDecoration(
                border: OutlineInputBorder(),
                label: Text('Password'),
              ),
            ),
            htspace40,
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                TextButton(onPressed: () {}, child: const Text('Sign up'))
              ],
            ),
            SizedBox(
              width: double.maxFinite,
              height: 40,
              child: ElevatedButton(
                  style: ButtonStyle(
                    elevation: MaterialStateProperty.all(0),
                  ),
                  child: isLoading
                      ? const SizedBox(
                          height: 30,
                          width: 30,
                          child: CircularProgressIndicator(
                              strokeWidth: 3, color: Colors.white),
                        )
                      : const Text('Sign in'),
                  onPressed: () {
                    setState(() {
                      isLoading = true;
                    });
                    signIn();
                    Future.delayed(const Duration(seconds: 3), () {
                      setState(() {
                        if (emailController.text != " " ||
                            passwordController.text != " ") {
                          isLoading = false;
                        } else {
                          isLoading = true;
                        }
                      });
                    });
                  }),
            )
          ],
        ),
      ),
    );
  }

  Future signIn() async {
    try {
      await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: emailController.text.trim(),
        password: passwordController.text.trim(),
      );
    } catch (e) {
      print('Email or Password Incorrect');
    }
  }
}

推荐答案

为什么不在Singin()函数中全部try ,如下所示:

Future signIn() async {
    try {
      isLoading = true;
      await FirebaseAuth.instance.signInWithEmailAndPassword(
        email: emailController.text.trim(),
        password: passwordController.text.trim(),
      );
      isLoading = false;
    } catch (e) {
      isLoading = false;
      print('Email or Password Incorrect');
    }
  }

这样,如果邮箱或通行证不正确或丢失等,它将停止加载. 如果没有填写邮箱和通行证,我还会禁用登录按钮.阻止它们传递空白值.

Flutter相关问答推荐

如何将图像从顶部和底部半向外设置为飘动

Build.gradle专线:2个Flutter Flutter

如何在默认情况下隐藏appBar并在向下滚动时显示它- Flutter

material 3芯片,不能go 除输入芯片小部件上的轮廓

Android Studio将不会构建iOS模拟器应用程序,因为plist.info有问题

带有图标抖动的自定义下拉按钮

如何在Flutter 中使用滚动展开窗口小部件

运行调试flutter应用程序时出错:B/BL超出范围(最大+/-128MB)到'';

如何手动将 FirebaseAuth 用户邮箱验证状态设置为 true

Flutter Riverpod 没有捕获 List 的嵌套值变化

为 flutter app/firebase 保存 chatgpt api-key 的正确方法是什么

当键盘隐藏表单时该怎么办?

如何从 Flutter 中的 App2 远程点击 App1 中的按钮

Flutter sliver 持久化

type '({bool growable}) => List' 不是类型转换中类型 'List' 的子类型

如何使用 Row 和 Column 制作 L 形布局?

阴影效果只出现在一张卡片的左边 在Flutter 中?

参数类型MaterialPageRoute不能分配给参数类型String

单击列表视图导航到 Flutter 中的另一个页面

如何在Flutter 的 initState 中初始化 Firestore 查询