Как показать название выбранного элемента в выпадающем меню при работе с объектом? - PullRequest
0 голосов
/ 11 декабря 2018

В этом коде я пытаюсь показать список местоположений в выпадающем меню.Здесь я работаю с моделью местоположения, которая состоит из имени и идентификатора пользователя.Оно работает.Однако я не могу показать выбранную опцию пользователю.объект для меня - это Местоположение (this.name, this.uid).

class DropButt extends StatelessWidget {
  DropButt({Key key,this.locations,this.onchange});
  // final String _selectedLocation='';
  final List<Location> locations;  
  Function(Location) onchange;

  @override
  Widget build(BuildContext context) {
  return DropdownButton<Location>(
    //value:, here I donot know which value Should I put when I come to put //name it didnot accept it as dropdownbutton is of type location

          items: locations.map((Location val) {
                   return new DropdownMenuItem<Location>(
                        value: val,
                        child: new Text(val.name),
                         );
                    }).toList(),
                    onChanged:(_){ 
                      onchange(_);
                      //here I will sink to the ream the value of th choosen location
                    },
                  );}

}

1 Ответ

0 голосов
/ 11 декабря 2018

Вы должны установить значение текущего выбранного местоположения.Его необходимо передать этому новому пользовательскому объекту без сохранения состояния.

Вот рабочий пример:

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  Location _selectedLocation;
  final _locations = [
    new Location("home", "1"),
    new Location("office", "2"),
    new Location("work", "3"),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Sample"),),
      body: DropButt(
        _selectedLocation,
        locations: _locations,
        onchange: (location) {
          setState(() {
            _selectedLocation = location;
          });
        },
      ),
    );
  }
}

class DropButt extends StatelessWidget {
  DropButt(this.selectedLocation, {Key key, this.locations, this.onchange});

  final Location selectedLocation;
  final List<Location> locations;
  Function(Location) onchange;

  @override
  Widget build(BuildContext context) {
    return DropdownButton<Location>(
      value: selectedLocation, // <--- this is the current selected object
      items: locations.map((Location val) {
        return new DropdownMenuItem<Location>(
          value: val,
          child: new Text(val.name), // <--- this is what the user sees
        );
      }).toList(),
      onChanged: onchange,
    );
  }
}

class Location {
  final String name;
  final String uid;

  Location(this.name, this.uid);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...