首页 > 解决方案 > “对象?”类型的值 不能分配给“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)
                  ),

更新 1

任何帮助将不胜感激。

标签: androidfluttermobile

解决方案


从上面的代码看来,它_currentSugars有一个 type String。由于valis 实际上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),
              ),

此外,您需要将_currentSugarsfrom的类型更改StringString?


推荐阅读