You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter迁移null safety后updateWith导致Firebase认证邮箱缺失如何解决

你的问题本质是空安全迁移后,修改了updateWith的原有逻辑:迁移前可选参数不传时为null,仅更新传入的字段;迁移后你为参数设置了非空默认值,导致只要调用updateWith时未显式传入对应参数,就会用默认值覆盖原有已存储的值。比如你提交表单时调用updateWith(isLoading: true),此时email会被默认空串覆盖,自然触发Firebase的缺失邮箱报错。


正确适配代码

1. 修改updateWith方法

将所有可选参数设为可空类型,默认值为null,赋值时仅当参数不为null才更新对应字段,完全对齐迁移前的逻辑:

void updateWith({
  String? email,
  bool? isLoading,
  bool? submitted,
}) {
  // 仅传入了对应参数时才更新,未传则保留原有值
  if (email != null) this.email = email;
  if (isLoading != null) this.isLoading = isLoading;
  if (submitted != null) this.submitted = submitted;
  notifyListeners();
}

2. 无需修改updateEmail方法

TextField的onChanged回调传入的永远是非空字符串,原有写法可以直接保留:

void updateEmail(String email) => updateWith(email: email);

原报错原因说明

  • 第一次给email设默认空串的错误:所有未显式传email的updateWith调用,都会把已存储的邮箱覆盖为空
  • 第二次加!强制解包的错误:调用updateWith不传email时参数为null,强制解包直接触发空异常

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:06:02