在Flutter DropdownButtonFormField中获取多个值

时间:2020-11-05 10:06:36

标签: flutter dart

我是Flutter的新手,如果问题听起来很傻,请原谅我。 我正在开发一个具有DropdownButtonFormField的Flutter应用程序。

jest.mock("./browser", () => {
    const br = jest.requireActual("browser");
    return { 
       ...br, 
       browser: {id:'changed value'} 
    };
})

实际上,我可以从下拉列表中获取城市ID。问题是,我想获取城市ID和城市国家/地区,并将国家/地区存储在_selectedCountry中。

我尝试向onchanged添加第二个参数,但出现错误。

  String _selectedCity;
  String _selectedCountry;

DropdownButtonFormField(
  value: _selectedCity,
  hint: Container(
    child: Text(
      "Select City",
    ),
  ),
  onChanged: (val) {
    setState(() {
      _selectedCity = val;
      _selectedCountry = val;
      //what i would like is : _selectedCountry = name
    });
    print(_selectedCity);
  },
  items: city.map((city) {
    return DropdownMenuItem(
      value: city.cityId,
      child: Text(city.country),
    );
  }).toList(),
);

我不知道该怎么办,Flutter文档没有提供有关如何执行此操作的太多信息。

我将非常感谢我能获得的任何方法建议。

谢谢。

1 个答案:

答案 0 :(得分:0)

onChanged方法不能为您提供多个值,但是该值不必是字符串!

假设您有一个名为Region的类,如下所示:

class Region {
  final String country;
  final String city;

  Region(this.country, this.city);
}

然后可以使用Region类来定义它,而不是使用DropdownButtonFormField中默认的String。现在,onChange方法也返回一个Region,您可以访问其中的所有数据。因此您的代码应如下所示:

  Region _selectedRegion;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: DropdownButtonFormField<Region>(
      value: _selectedRegion,
      onChanged: (val) {
        setState(() {
          _selectedRegion = val;
        });
      },

      items: {your data}.map((regionData) {
        return DropdownMenuItem<Region>(
          value: Region(regionData.country, regionData.city),
          child: Text(regionData.city),
        );
      }).toList(),
    ));
  }