如何在Flutter接入Firebase的登录流程中添加CircularProgressIndicator?
实现步骤
- 首先在登录页的State类中定义加载状态变量
bool _isLoading = false;
- 改造现有的
signIn方法,在登录流程的各个节点更新加载状态,同时修复原代码的语法问题:
Future<void> signIn(String email, String password) async { if (_formKey.currentState!.validate()) { setState(() { _isLoading = true; }); try { final _userDoc = await _auth.signInWithEmailAndPassword( email: email, password: password ); checkUserType(_userDoc.user!.uid); } catch (e) { print('Error: $e'); // 此处可自行扩展错误提示逻辑,比如弹出Toast、SnackBar等 } finally { setState(() { _isLoading = false; }); } } }
- 修改页面build逻辑,登录按钮位置根据
_isLoading状态切换展示内容:
// 替换原有登录按钮代码 _isLoading ? const CircularProgressIndicator() : ElevatedButton( onPressed: () => signIn(emailController.text, passwordController.text), child: const Text('登录'), )
可选优化:如果需要禁止用户在加载过程中重复点击提交,可以给表单加上absorbPointer属性绑定_isLoading,加载时自动拦截所有表单点击事件
内容的提问来源于stack exchange,提问作者walr0s
相关产品推荐
相关产品推荐

