android - “对象?”类型的值 不能分配给“String”类型的变量,并且左操作数不能为空,因此永远不会执行右操作数
问题描述
我在颤振项目中遇到 2 个错误:
“对象?”类型的值 不能分配给“字符串”类型的变量。尝试更改变量的类型,或将右侧类型转换为“字符串”。
和
左操作数不能为空,因此永远不会执行右操作数。尝试删除运算符和正确的操作数。
我发生错误的代码如下所示:
DropdownButtonFormField(
value: _currentSugars ?? userData.sugars, <-- and here **userData.sugars** (2)
decoration: textInputDecoration,
items: sugars.map((sugar) {
return DropdownMenuItem(
value: sugar,
child: Text('$sugar sugars'),
);
}).toList(),
onChanged: (val) => setState(() => _currentSugars= val), <-- in **val** (1)
),
任何帮助将不胜感激。
解决方案
从上面的代码看来,它_currentSugars
有一个 type String
。由于val
is 实际上Object?
_currentSugars= val
无法执行类型赋值。
此外,由于类型变量String
不能是null
编译器,因此编译器会告诉您,在表达式_currentSugars ?? userData.sugars
中,它的右侧 ( userData.sugars
) 永远不会被执行。
您可以尝试将其更改为类似
DropdownButtonFormField<String>(
value: _currentSugars ?? userData.sugars,
decoration: textInputDecoration,
items: sugars.map((sugar) {
return DropdownMenuItem(
value: sugar,
child: Text('$sugar sugars'),
);
}).toList(),
onChanged: (val) => setState(() => _currentSugars= val),
),
此外,您需要将_currentSugars
from的类型更改String
为String?
。
推荐阅读
- node.js - 使用 Mongoose 和 Node.js 将数据保存到集合中时出错
- javascript - Ditto.asByteBuffer(bytePayload) 抛出异常
- javascript - 如何在 KnockoutJs 中使用 jsPdf
- typo3 - 在扩展中包含 JS 文件
- tensorflow - 为什么tensorflow从ckpt恢复具有不同值的相同变量
- ionic-framework - 如何将base64图像转换为离子中的blob
- cmake - 如何强制 CMake 在第一个错误时失败
- graphql - 突变不起作用 GraphQL、Prisma、Yoga
- java - 在 Javax xml 转换器中禁用缓存
- php - 如何在流明中排队饼干?