无法推断类型参数“T”
Posted
技术标签:
【中文标题】无法推断类型参数“T”【英文标题】:Couldn't infer type parameter 'T' 【发布时间】:2021-06-18 05:00:45 【问题描述】:。
试图为不起作用的“T”推断“动态”:
参数 'onChanged' 声明为 'void Function(T?)?' 但参数是'void Function(Object?)'。
“动态”类型推断自:
参数 'value' 声明为 'T?' 但参数是“字符串”。 参数 'items' 声明为 'List
?' 但参数是'List '。
考虑将显式类型参数传递给泛型。
我有显示上述问题的 DropDownformfield 代码是
SizedBox(
width: deviceWidth * .9,
height: deviceHeight * 0.15,
child: DropdownButtonFormField(
value: _dropDownValue,
dropdownColor: Colors.blueAccent,
iconSize: deviceWidth * .05,
icon: Icon(
Icons.arrow_drop_down_circle,
color: Colors.white,
),
style: TextStyle(
color: Colors.black,
fontFamily: 'Constantia',
fontSize: 18.0,
),
autovalidateMode: AutovalidateMode.always,
decoration: InputDecoration(
enabled: true,
border: OutlineInputBorder(
borderSide: BorderSide(
color: Colors.red,
width: 2,
style: BorderStyle.solid,
),
),
),
onChanged: (value)
setState(()
_dropDownValue = value.toString();
print(_dropDownValue);
);
,
items: <DropdownMenuItem<dynamic>>[
menuItem('none'),
menuItem('10'),
menuItem('20'),
menuItem('30'),
menuItem('40'),
menuItem('50'),
menuItem('60'),
menuItem('70'),
menuItem('80'),
menuItem('90'),
menuItem('100'),
],
),
),
和小部件一样
DropdownMenuItem menuItem(String val)
final deviceWidth = MediaQuery.of(context).size.width;
return DropdownMenuItem<String>(
value: val,
child: Container(
width: deviceWidth * 0.6,
child: Text(
val,
style: TextStyle(
fontFamily: 'Constantia',
fontSize: 18.0,
color: Colors.white,
),
),
),
);
代码运行良好,但 android Studio 显示这是一个问题。
【问题讨论】:
您知道如何正确输入您的DropdownMenuItem<String>
,然后完全忘记它,甚至更改其余代码中的类型吗?
【参考方案1】:
这只是智能感知建议您在代码中提供泛型类型。
考虑将显式类型参数传递给泛型。
由于您将所有字符串值提供给menuItems
。调用时最好提供泛型类型。
items : <DropdownMenuitem<String>>[
...
...
]
【讨论】:
【参考方案2】:最好提供泛型类型以避免代码中的任何错误或错误。因为您在menuItem
函数中提到了 DropDownMenuItem,所以 android studio 会警告您在此处提供了动态。
items: <DropdownMenuItem<dynamic>>[ // ==> change dynamic to String to solve that warning
menuItem('none'),
menuItem('10'),
menuItem('20'),
menuItem('30'),
menuItem('40'),
menuItem('50'),
menuItem('60'),
menuItem('70'),
menuItem('80'),
menuItem('90'),
menuItem('100'),
],
【讨论】:
【参考方案3】:我猜你的代码写到一半你忘记了你的类型是什么......把它们加回去就可以了:
items: <DropdownMenuItem<String>>[
menuItem('none'),
menuItem('10'),
menuItem('20'),
menuItem('30'),
menuItem('40'),
menuItem('50'),
menuItem('60'),
menuItem('70'),
menuItem('80'),
menuItem('90'),
menuItem('100'),
],
还有……
DropdownMenuItem<String> menuItem(String val)
final deviceWidth = MediaQuery.of(context).size.width;
return DropdownMenuItem<String>(
value: val,
child: Container(
width: deviceWidth * 0.6,
child: Text(
val,
style: TextStyle(
fontFamily: 'Constantia',
fontSize: 18.0,
color: Colors.white,
),
),
),
);
【讨论】:
以上是关于无法推断类型参数“T”的主要内容,如果未能解决你的问题,请参考以下文章