我正在尝试使用 dart 中的以下代码构建多芯片选择字段。
\n测试页面.dart
\nimport '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}\nRun Code Online (Sandbox Code Playgroud)\n这是main.dart
\nimport '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}\nRun Code Online (Sandbox Code Playgroud)\n但是,当我在多选中选择任何对象时,我收到以下错误
\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
改变
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? 那么它会抛出这个错误。
因此,请确保分配给列表的值具有相同的数据类型。
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |