Flutter - 错误:无法推断类型参数“T”

Edo*_*lep 12 dart flutter

我正在开发 Flutter 2.2.1(通道稳定)。我最近将 SDK 的环境从 2.7.0 更改为 2.12.0 以添加插件,但我的代码中出现了很多错误。其中之一是关于单选按钮列表的。

我的代码:

ListView.builder(
    physics: NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    itemCount: languages.length,
    itemBuilder: (ctx, index) {
      return RadioListTile(
        title: Row(
          children: [
            Image.asset(
              'icons/flags/png/${languages[index]['flag']}.png',
              package: 'country_icons',
              height: 16,
            ),
            Text('  ' + languages[index]['language']),
          ],
        ),
        value: languages[index]['code'],
        groupValue: widget.languageChosen,
        onChanged: (_languageSelected) {
          setState(() {
            _languageChosen = _languageSelected;
            widget.onLanguageChange!(_languageChosen);
          });
        },
      );
    }),
Run Code Online (Sandbox Code Playgroud)

该错误与“RadioListTile”有关,消息是:

无法推断类型参数“T”。

试图推断“T”的“动态”,但这不起作用:参数“onChanged”声明为“void Function(T?)?” 但参数是“void Function(Object?)”。类型“dynamic”是从以下位置推断出来的:参数“value”声明为“T”,但参数为“dynamic”。参数“groupValue”声明为“T?” 但论证是“动态的”。

考虑将显式类型参数传递给泛型。

我在该行收到另一个关于“_languageSelected”的错误错误_languageChosen = _languageSelected;是:

“对象?”类型的值 不能分配给“String”类型的变量。尝试更改变量的类型,或将右侧类型转换为“String”。

但我不知道这两个错误是否有关联。

Zac*_*lez 27

这对我来说是一个简单的修复,我忘记在我的小部件中专门声明我的值的类型。

错误

DropdownButton()
Run Code Online (Sandbox Code Playgroud)

没有错误

DropdownButton<String>()
Run Code Online (Sandbox Code Playgroud)


Edo*_*lep 6

正确代码:

ListView.builder(
    physics: NeverScrollableScrollPhysics(),
    shrinkWrap: true,
    itemCount: languages.length,
    itemBuilder: (ctx, index) {
      return RadioListTile<String>(
        title: Row(
          children: [
            Image.asset(
              'icons/flags/png/${languages[index]['flag']}.png',
              package: 'country_icons',
              height: 16,
            ),
            Text('  ' + languages[index]['language']),
          ],
        ),
        value: languages[index]['code'],
        groupValue: widget.languageChosen,
        onChanged: (_languageSelected) {
          setState(() {
            _languageChosen = _languageSelected.toString();
            widget.onLanguageChange!(_languageChosen);
          });
        },
      );
    }),
Run Code Online (Sandbox Code Playgroud)