Flutter 类型“RxList<dynamic>”不是类型“RxList<DropdownMenuItem<ListItem>>”的子类型

Asy*_*yan 1 flutter

我尝试生成的小部件是一个下拉按钮,我正在使用 flutter Get包进行状态管理。

\n

控制器:

\n
  // Getter and Setter for Downdown List Item\n  RxList<DropdownMenuItem<ListItem>> _dropdownMenuItems = [].obs;\n  set setDropdownValues(value) => _dropdownMenuItems(value);\n  List<DropdownMenuItem<ListItem>> get getDropdownValues => _dropdownMenuItems\n    .map((e) => DropdownMenuItem(\n      value: e.value,\n      child: Text(e.value.name))).toList();\n\n  // Getter and Setter for Items Selected from the dropdown\n  Rx<ListItem> _selectedItem = ListItem().obs;\n  set setSelectedItem(value) => _selectedItem(value);\n  get getSelectedItem => _selectedItem.value;\n\n  // OnInit\n  @override\n  void onInit() {\n    super.onInit();\n    setDropdownValues = buildDropDownMenuItems(); // Sets dropdown list\n    setSelectedItem = getDropdownValues[0].value; // Sets selected item as the first entry to the list\n  }\n\n  // Sample to populate the Dropdown List\n  List<DropdownMenuItem<ListItem>> buildDropDownMenuItems() {\n    \n    List<ListItem> _dropdownItems = [\n      ListItem(value: 1, name: "Recent"),\n      ListItem(value: 2, name: "Oldest"),\n    ];\n\n    List<DropdownMenuItem<ListItem>> items = [];\n    for (ListItem listItem in _dropdownItems) {\n      items.add(\n        DropdownMenuItem(\n          child: Text(listItem.name),\n          value: listItem,\n        ),\n      );\n    }\n    return items;\n  } \n
Run Code Online (Sandbox Code Playgroud)\n

小部件:

\n
  DropdownButton(\n    icon: Icon(Icons.arrow_drop_down),\n    value: controller.getSelectedItem,\n    items: controller.getDropdownValues)\n
Run Code Online (Sandbox Code Playgroud)\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 Exception caught by widgets library \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\nThe following _TypeError was thrown building MyHomePage(dirty):\ntype \'RxList<dynamic>\' is not a subtype of type \'RxList<DropdownMenuItem<ListItem>>\'\n
Run Code Online (Sandbox Code Playgroud)\n

我是否为 RxList 分配了错误的类型?我是否错误地将其映射到列表?

\n

非常感谢任何帮助。

\n

Asy*_*yan 7

我已经解决了这个问题。

我唯一需要做的就是将 obs 列表转换为它所引用的类型。

所以,之前是

RxList<DropdownMenuItem<ListItem>> _dropdownMenuItems = [].obs;
Run Code Online (Sandbox Code Playgroud)

我已经将其更新为

RxList<DropdownMenuItem<ListItem>> _dropdownMenuItems = <DropdownMenuItem<ListItem>>[].obs;
Run Code Online (Sandbox Code Playgroud)