Flutter Web中Firebase createUserWithEmailAndPassword的then回调未执行
问题原因及解决方案
你的代码里then回调核心逻辑没执行的根源是:在then的箭头函数里错误返回了一个匿名函数() async {...},而非直接执行代码逻辑。
原代码中then((value) => () async {...})的写法,相当于给then返回了一个异步函数对象,并没有调用这个函数里的代码。此时then本身是执行完成了,但里面的print("user created")和参数使用逻辑根本没触发,而whenComplete会在整个Future链结束后执行,所以它能正常打印内容。
修正方案1:修复then的回调写法
把then里的箭头函数改为直接执行的函数体,去掉多余的() => ()结构:
FirebaseAuth auth = FirebaseAuth.instance; await auth .createUserWithEmailAndPassword( email: emailController.text, password: passwordController.text) .then((value) async { print("user created"); // 这里可直接使用value参数(UserCredential类型)做后续操作 return value; }) .whenComplete(() { print("when callback"); }).onError((error, stackTrace) { print("error: $error"); return Future.value(); });
修正方案2:用await+try/catch/finally替代then链(更推荐)
Dart里await的异步写法比then链更直观,也不容易出错,完全可以替代原有逻辑:
FirebaseAuth auth = FirebaseAuth.instance; try { // 直接获取创建用户返回的UserCredential对象 final userCredential = await auth.createUserWithEmailAndPassword( email: emailController.text, password: passwordController.text, ); print("user created"); // 这里直接使用userCredential,对应原then回调里的value参数 } catch (error, stackTrace) { print("error: $error"); } finally { // finally块等价于whenComplete,无论成功失败都会执行 print("when callback"); }
两种方案都能让你正常获取创建用户后的UserCredential参数,解决原问题。
内容的提问来源于stack exchange,提问作者sempakonka
相关产品推荐
相关产品推荐

