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
相关产品推荐
相关产品推荐

