类型“List<Object?>”不是类型“List<Object>?”的子类型 具有“价值”

asb*_*asb 0 dart flutter

我正在尝试使用 dart 中的以下代码构建多芯片选择字段。

\n

测试页面.dart

\n
import 'package:flutter/material.dart';\nimport 'package:multi_select_flutter/multi_select_flutter.dart';\n\nclass TestWidget extends StatelessWidget {\n  const TestWidget({Key? key}) : super(key: key);\n\n  @override\n  Widget build(BuildContext context) {\n    final _gamePreferences = [\n      GamePreference(id: 0, name: "Tennis"),\n      GamePreference(id: 1, name: "Football")\n    ].map((pref) => MultiSelectItem<GamePreference>(pref, pref.name)).toList();\n\n    return Scaffold(\n      backgroundColor: Colors.white,\n      appBar: AppBar(\n        title: Text("Profile"),\n      ),\n      body: MultiSelectChipField(onTap: (value) {}, items: _gamePreferences),\n    );\n  }\n}\n\nclass GamePreference {\n  final int id;\n  final String name;\n\n  GamePreference({\n    required this.id,\n    required this.name,\n  });\n}\n
Run Code Online (Sandbox Code Playgroud)\n

这是main.dart

\n
import 'package:flutter/material.dart';\nimport 'screens/test_page.dart';\n\nvoid main() {\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      debugShowCheckedModeBanner: true,\n      home: Container(child: TestWidget()),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我在多选中选择任何对象时,我收到以下错误

\n
\n

\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90 捕获异常通过手势\n\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95 \x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90 \xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2 \x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95 \x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90 \xe2\x95\x90\xe2\x95\x90 处理手势时抛出以下 _TypeError\n:类型“List<GamePreference?>”\n不是“List?”类型的子类型 具有“价值”

\n

抛出异常时,这是堆栈\n#0 FormFieldState.didChange (package:flutter/src/widgets/form.dart)\npackage:flutter/\xe2\x80\xa6/widgets/form.dart:1\ n#1 __MultiSelectChipFieldViewState._buildItem。软件包:multi_select_flutter/chip_field/multi_select_chip_field.dart:515\n#2 _RawChipState._handleTap 软件包:flutter/\xe2\x80\xa6/material/chip.dart:1772\n#3 _InkResponseState._handleTap 软件包:flutter/\xe2\ x80\xa6/material/ink_well.dart:989\n#4 GestureRecognizer.invokeCallback 包:flutter/\xe2\x80\xa6/gestures/recognizer.dart:182 ... 处理程序: "onTap"\n识别器: TapGestureRecognizer#8cfb5 \ndebugOwner: GestureDetector\nstate: possible\nwon arena\nfinalPosition: Offset(32.0, 148.0)\nfinalLocalPosition: Offset(24.0, 17.0)\nbutton: 1\nsent tap down \xe2\x95\x90\xe2\x95\x90\ xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\ x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\ x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\ xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\ x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\ x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\ xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\ x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\ x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\ xe2\x95\x90\xe2\x95\x90\xe2\x95\x90

\n
\n

She*_*ani 6

改变

Final _gamePreferences = [ GamePreference(id: 0, name: "网球"), GamePreference(id: 1, name: "足球") ].map((pref) => MultiSelectItem(pref, pref.name)).toList( );

Final _gamePreferences = [ GamePreference(id: 0, name: "Tennis"), GamePreference(id: 1, name: "Football") ].map((pref) => MultiSelectItem<GamePreference?> (pref, pref.name) ).toList();

这将解决错误

您在 MultiSelectChipField 中传递的列表具有 MultiSelectItem 数据类型,而 MultiSelectChipField 需要 MultiSelectItem<T?>。

'List<Object?>' = 表示对象可以为 null 'List?' = 表示整个列表可以为空

所以这两者之间是有区别的

当您将 List<String?> 分配给 List? 那么它会抛出这个错误。

因此,请确保分配给列表的值具有相同的数据类型。