Я все еще изучаю Flutter и пытаюсь создать собственный выпадающий список. Ниже приведен мой пользовательский выпадающий список, который, кажется, работает и возвращает выбранное значение, но мне по-прежнему нужна помощь в отображении всплывающего списка при нажатии на чернильницу. Кроме того, как передать массив строк для создания / заполнения элементов всплывающего списка. Спасибо за вашу помощь в этом.
return new Expanded(
flex: 4,
child: new InputDropdownList(
labelText: "Select a value",
valueText: viewModel.selectedValue,
valueStyle: Theme.of(context).inputDecorationTheme.labelStyle,
items: <String>["ValueA", "ValueB", "ValueC", "ValueD"],
onPressed: () {
},
selectedValue: (String value) {
setState(() { viewModel.selectedValue= value; });
},
),
),
class InputDropdownList extends StatelessWidget {
const _InputDropdownList({
Key key,
this.labelText,
this.valueText,
this.valueStyle,
this.items,
this.onPressed,
this.selectedValue }) : super(key: key);
final String labelText;
final String valueText;
final TextStyle valueStyle;
final List<String> items;
final Function() onPressed;
final ValueChanged<String> selectedValue;
@override
Widget build(BuildContext context) {
return new InkWell(
onTap: () {},
child: new InputDecorator(
decoration: new InputDecoration(
labelText: labelText,
),
baseStyle: valueStyle,
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
new Text(valueText, style: valueStyle),
new PopupMenuButton<String>(
icon: new Icon(Icons.arrow_drop_down, color: Theme.of(context).brightness == Brightness.light ? Colors.grey.shade700 : Colors.white70),
padding: EdgeInsets.zero,
onSelected: (value) {
selectedValue(value);
},
itemBuilder: (BuildContext context) => <PopupMenuItem<String>>[
new PopupMenuItem<String>(
value: "ValueA",
child: const Text('ValueA')
),
new PopupMenuItem<String>(
value: "ValueB",
child: const Text('ValueB')
),
]
),
],
),
),
);
}
}