Flutter开发报错:参数类型'String?'无法分配给参数类型'String'
问题原因
该报错是Dart空安全机制导致的:你从_formData Map中通过Key取值时,返回值为String?类型(如果Key不存在就会返回null),但你的User类构造函数要求id、nome等参数都是不可空的String类型,类型不匹配因此触发报错。
解决方法
你可以根据业务场景选择以下任意一种方案:
- 方案1:加默认值兜底(最安全)
用空合并运算符??指定默认值,就算取值为null也会用默认值填充,不会抛出异常:Provider.of<Users>(context, listen: false).put(User( id: _formData['id'] ?? '', nome: _formData['nome'] ?? '', email: _formData['email'] ?? '', avatarUrl: _formData['avatarUrl'] ?? '', )); - 方案2:断言非空(适合已做表单必填校验的场景)
如果你已经在Form的TextFormField中通过validator校验了所有字段必填,能100%保证_formData里的这几个Key对应的值都不为null,可以用!操作符强制把可空类型转为非空类型:
注意:不确定取值一定不为null时不要随意用Provider.of<Users>(context, listen: false).put(User( id: _formData['id']!, nome: _formData['nome']!, email: _formData['email']!, avatarUrl: _formData['avatarUrl']!, ));!,否则运行时会抛出空异常。 - 方案3:修改User类字段为可空类型
如果业务逻辑本身允许这几个字段为null,可以直接修改User类的构造参数类型为String?,不需要额外转换直接传值即可。
内容的提问来源于stack exchange,提问作者kl3tka
相关产品推荐
相关产品推荐

