如何从 Provider 创建一个下拉列表? (扑)

Posted

技术标签:

【中文标题】如何从 Provider 创建一个下拉列表? (扑)【英文标题】:How do I create a dropdownList from Provider ? (Flutter) 【发布时间】:2020-06-15 00:57:10 【问题描述】:

我创建了一个城市模型,并为此创建了一个提供者类,

class CityModel 
  String cityId;
  String cityName;

  CityModel(this.cityId, this.cityName);

这是提供者类

class CitiesProviders extends ChangeNotifier 
  List<CityModel> citiesData = [];

  void addData(CityModel data) 
    citiesData.add(data);
    notifyListeners();
  

  List<String> get cityNames 
    List<String> names = [];
    citiesData.map((value) 
      names.add(value.cityName);
    );
    return names;
  

我只是想从城市数据列表中获取城市名称,并使用该名称列表创建一个下拉列表。

DropdownButton<String>(
      value: currVal,
      items: Provider.of<CitiesProviders>(context)
          .cityNames
          .map<DropdownMenuItem<String>>((String value) 
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      ).toList(),
      onChanged: (value) 
        currVal = value;
      ,
    ),

但我没有在屏幕上看到任何内容,也没有错误消息。我做的一切正确吗?还是有更好的方法来做到这一点?任何建议和答案都会有所帮助。谢谢!

【问题讨论】:

【参考方案1】:

我认为问题在于您有:

class CitiesProviders extends ChangeNotifier 

你应该有:

class CitiesProviders with ChangeNotifier 

我在您的其余代码中没有看到任何其他问题,但我还是 Flutter 的新手。

【讨论】:

【参考方案2】:

我的错!

List<String> get cityNames 
    List<String> names = [];
    citiesData.map((value) 
      names.add(value.cityName);
    ).toList(); // Added here
    return name)s;
  

我添加了 toList(),它现在可以工作了。

【讨论】:

以上是关于如何从 Provider 创建一个下拉列表? (扑)的主要内容,如果未能解决你的问题,请参考以下文章

如何从列表 Dart 中删除重复项 |扑

如何创建多个从同一个数组中获取值的动态下拉列表,而无需更改 Javascript 中的其他下拉列表

如何使用 Flask 和 HTML 从 python 列表创建下拉菜单

如何实现 Stream 以获取每个文档的子集合列表? -扑

Flutter 中如何从字符串中获取语言代码扑

如何从动态填充的下拉列表中动态选择一个选项