基于Firebase的Flutter应用点击注册按钮后卡在加载界面求助
错误定位
密码输入框的onSaved方法存在逻辑错误,将密码值错误赋值给_email变量而非_password,导致传递给AuthCubit的密码为空值。Firebase注册请求失败后,若AuthCubit未正确处理异常状态,会导致界面一直停留在加载状态。
修复步骤
1. 修正密码输入框的onSaved逻辑
打开sign_up_screen.dart,找到密码对应的TextFormField,修改onSaved方法的赋值目标:
错误代码:
onSaved: (value){ _email = value!.trim(); },
修正后代码:
onSaved: (value){ _password = value!.trim(); },
2. 确保AuthCubit的状态处理完整
检查AuthCubit中的signUp方法,确保无论注册成功或失败,都能正确emit对应状态,避免停留在AuthLoading状态:
Future<void> signUp({required String email, required String username, required String password}) async { emit(AuthLoading()); try { // Firebase邮箱密码注册逻辑 UserCredential userCredential = await FirebaseAuth.instance.createUserWithEmailAndPassword( email: email, password: password, ); // 保存用户信息到Firestore(示例) await FirebaseFirestore.instance.collection('users').doc(userCredential.user!.uid).set({ 'username': username, 'email': email, }); emit(AuthSignedUp()); } catch (e) { // 异常时必须emit失败状态 emit(AuthFailure(message: e.toString())); } }
3. 修复表单字段的拼写错误(可选)
邮箱输入框的labelText为"Enter you emaail",密码输入框为"Enter you password",存在拼写错误(you应为your、emaail应为email),建议修正以提升用户体验。
额外注意事项:SDK版本警告处理
编译时出现的警告:
Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
该警告由Android Studio与命令行工具版本不匹配导致,不影响应用运行,可通过以下方式解决:
- 打开Android Studio,进入
Tools > SDK Manager > SDK Tools,更新Android SDK Command-line Tools到最新版本 - 或在项目
android/build.gradle文件中指定兼容的SDK版本
内容的提问来源于stack exchange,提问作者Antoniy274

