【问题标题】:DropDownButton selected item isn't changing in UIDropDownButton 所选项目在 UI 中没有改变
【发布时间】:2019-08-17 23:20:48
【问题描述】:

我想在DropDownButton 中添加的对象:

class Car {
  int id;
  String make;

  Car(this.id, this.make);

  static List<Car> getCars() {
    var cars = new List<Car>();
    cars.add(Car(1, "Ford"));
    cars.add(Car(2, "Toyota"));
    cars.add(Car(3, "BMW"));

    return cars;
  }
}

构造DropDown(StatefulWidget State 类):

class _MyHomePageState extends State<MyHomePage> {
  Car _selectedCar;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text(widget.title),
        ),
        body: Center(child: getDropDown()));
  }

  Widget getDropDown() {
    var cars = Car.getCars();
    this._selectedCar = cars.first; // Default to first value in list.
    var items = cars.map((car) {
      return new DropdownMenuItem<Car>(
        value: car,
        child: new Text(car.make),
      );
    }).toList();

    return DropdownButton<Car>(
        value: this._selectedCar,
        onChanged: (Car car) {
          setState(() {
            this._selectedCar = car;
          });
        },
        items: items);
  }
}

DropDownButton 在选中第一个项目时正确显示,但是当我选择另一个项目时,UI 永远不会更新以显示新项目为选中状态。

【问题讨论】:

    标签: dart flutter dropdownbutton


    【解决方案1】:

    您只需初始化一次列表,因为如果您在每次绘制时都初始化新列表,则 DropDownList 值不会匹配。

    在这里找到工作示例:Gist

    【讨论】:

    • 您的回答无效。它崩溃:I/flutter(5072):'package:flutter/src/material/dropdown.dart':断言失败:第 560 行 pos 15:'items == null ||我/颤振(5072):items.isEmpty ||值 == 空 || items.where((DropdownMenuItem item) => item.value == I/flutter (5072): value).length == 1': 不正确。
    • 如果你想尝试运行,完整的代码要点在这里:gist.github.com/lahsrah/0267bd0e0f6797203e4d4a7a4946219d
    • 哦,好吧,你每次都得到新的列表,所以没有一个对象匹配。这是工作版本:gist.github.com/knezzz/7cc3bb75992413cb43f1d2a3328b7295
    • 如果你愿意,请编辑你的答案,我会将其标记为答案给你信用。
    【解决方案2】:

    尝试在您的initState() 方法中初始化_selectedCar 变量,而不是getDropdown() 方法。

    根据您发布的代码,_selectedCar 变量会在您每次调用 setState() 时重新初始化,因为调用了 build() 方法。

    您还提到在第一个答案中尝试解决方案时遇到以下错误:

    I/flutter (5072): 'package:flutter/src/material/dropdown.dart': 断言失败:第 560 行 pos 15:'items == null ||我/颤振( 5072): 项目.isEmpty ||值 == 空 || items.where((DropdownMenuItem item) => item.value == I/flutter ( 5072): value).length == 1': 不正确。

    这很可能是因为您的下拉列表中有多个项目获得了相同的值。

    可能的解决方法是使用Car 对象的id 参数作为下拉列表value 而不是整个对象,因为id 对于每个对象都是唯一的。有关此错误的更多详细信息,请参阅here

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 1970-01-01
      • 2021-04-02
      • 2020-08-29
      • 1970-01-01
      • 2021-07-08
      • 2017-02-17
      • 1970-01-01
      • 2013-01-12
      相关资源
      最近更新 更多