Flutter - DrowpdownMunu Элементы, не попадающие в список
Я застрял с DrowdownButton, который не заполняет никаких данных.
Он заполняется из списка, переданного с предыдущего экрана.
Моя отладка показывает, что в списке есть данные, которые можно проанализировать. Вывод просто создает пустой DropdownButton.
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'menuList.dart';
import 'package:flutter_calendar_carousel/flutter_calendar_carousel.dart' show CalendarCarousel;
class OrderInitiate extends StatefulWidget {
final List childData;
OrderInitiate(this.childData);
@override
_OrderInitiateState createState() => new _OrderInitiateState();
}
class _OrderInitiateState extends State<OrderInitiate> {
double buttonWidth = 200.0;
DateTime selectedDate = DateTime.now();
DateTime tempDate = DateTime.now();
@override
void initState() {
print("OrderInitiate: initstate begin");
print("ChildData: " + widget.childData.toString());
}
_dateSelected(date) {
setState(() {
selectedDate = date;
});
}
String itemSel;
@override
Widget build(BuildContext context) => new Scaffold(
appBar: new AppBar(title: new Text("Start an Order"), actions:
<Widget>[
]),
body: new Column(
children: <Widget>[
Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text("Select child:"),
new DropdownButton<String>(
value: itemSel,
onChanged: null,
hint: Text("Select child"),
items:
widget.childData.map ((item) {
print("DropDownButton item: " + item.toString());
print("Child Id: " + item['ChildId']);
return new DropdownMenuItem<String>(
value: item['ChildId'],
child:
new Text("ChildFirstName"),
);
}).toList(),
),
Text("${selectedDate.toLocal()}"),
SizedBox(
height: 20.0,
),
],
),
),
SizedBox(
width: buttonWidth,
child: RaisedButton(
onPressed: () => _StartOrder(this.context),
child: Text('Start Order'),
),
),
],
),
);
_StartOrder(BuildContext context) {
Navigator.push(
context,
new MaterialPageRoute(
builder: (BuildContext context) => new MenuList()));
}
}
Мои строки отладки дают следующий вывод:
Элемент DropDownButton: {ParentId: 4, ParentLastName: testparent, ParentFirstName: TestParentSur, ParentUserName: TestParent, ChildId: 3, ChildLastName: Test2Last, ChildFirstName: Test2, ChildUserName: test2}
ID ребенка: 3
Я застрял в этом коде последние 2 ночи, так что, надеюсь, кто-нибудь может помочь.
Я безуспешно изучил многочисленные учебники по созданию списков и элементов, а также элементы stackru.
1 ответ
Попробуйте изменить onChanged
ценность вашего DropDownButton
чтобы:
onChanged: (int i) {
setState(() => itemSel = i);
},
Если onChanged == null
тогда поле по существу отключено, поэтому, хотя ваши данные могут быть там, они ничего не отобразят, когда вы нажмете на них. Выбранное значение поля также не обновляется автоматически, поэтому установка состояния с новым выбранным значением также важна.