Flutter: пользовательская функция выпадающего меню не показывает выбранное значение - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь создать пользовательскую функцию, которая возвращает выпадающее меню. Функция принимает 3 аргумента: menuTitle, selectedValue и список строк.

List<String> cities= ['Rome', 'London', 'Paris'];
String selectedCity;
String title='Select a city';

  Widget _buildDropdown(
      String menuTitle, String selectedItem, List<String> list) {
    return Container(
      width: MediaQuery.of(context).size.width * 0.8,
      margin: EdgeInsets.all(10.0),
      decoration: BoxDecoration(
          border: Border.all(color: Colors.grey[300]),
          borderRadius: BorderRadius.circular(10.0)),
      child: DropdownButtonHideUnderline(
        child: ButtonTheme(
          alignedDropdown: true,
          child: DropdownButton<String>(
            isExpanded: true,
            hint: Text(
              menuTitle.toUpperCase(),
              style: GoogleFonts.lato(
                  textStyle: TextStyle(
                color: Colors.grey[500],
                fontWeight: FontWeight.bold,
              )),
            ),
            value: selectedItem,
            items: list.map((String val) {
              return DropdownMenuItem(
                value: val,
                child: Text(
                  val.toUpperCase(),
                  style: GoogleFonts.lato(
                      textStyle: TextStyle(
                    color: Colors.grey[500],
                  )),
                ),
              );
            }).toList(),
            onChanged: (String value) {
              setState(() {
                selectedItem = value;
              });
            },
          ),
        ),
      ),
    );
  }

В раскрывающемся меню отображаются все доступные параметры, но после выбора одного я вижу только текст подсказки, а не выбранное значение. Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 19 марта 2020

Чтобы раскрывающийся список отражал выбранное значение, оно должно быть частью состояния. Так что следуйте как показано в коде ниже. Я проверил этот код и он работает для меня.


class _MyAppState extends State<MyApp> {

  List<String> cities= ['Rome', 'London', 'Paris'];
//Initialize your selectedItem to selectedCity
//default selectedCity
  String selectedCity='Rome';
  String title='Select a city';



  @override
  Widget build(BuildContext context) {
    Color color=Colors.blueAccent;
    int x=color.value;

    return MaterialApp(

      home: Scaffold(
        body: Column(
          children: <Widget>[_buildDropdown("Title","",cities)],
        ),
      ),
    );
  }

  Widget _buildDropdown(
      String menuTitle, String selectedItem, List<String> list) {

    return Container(
      margin: EdgeInsets.all(10.0),
      decoration: BoxDecoration(
          border: Border.all(color: Colors.grey[300]),
          borderRadius: BorderRadius.circular(10.0)),
      child: DropdownButtonHideUnderline(
        child: ButtonTheme(
          alignedDropdown: true,
          child: DropdownButton<String>(
            isExpanded: true,
            hint: Text(
              menuTitle.toUpperCase(),
            ),
            value: selectedCity,
            items: list.map((String val) {
              return DropdownMenuItem(
                value: val,
                child: Text(
                  val.toUpperCase(),
                ),
              );
            }).toList(),
            onChanged: (String value) {
              setState(() {
                selectedCity = value;
              });
            },
          ),
        ),
      ),
    );
  }
}

...