如何从提供商创建dropdownList? (扑)

时间:2020-03-02 17:22:55

标签: flutter flutter-layout flutter-dependencies flutter-provider flutter-widget

我已经创建了城市模型,并为此创建了提供程序类

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;
  }
}

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

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;
      },
    ),

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

2 个答案:

答案 0 :(得分:0)

我相信问题在于您有

class CitiesProviders extends ChangeNotifier {}

您应该具有:

class CitiesProviders with ChangeNotifier {}

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

答案 1 :(得分:0)

我的错!

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

我添加了toList(),并且现在可以正常工作。