Невозможно установить значение для выпадающей кнопки из списка редактирования во флаттере
Я пытаюсь заполнить выпадающий список из API, который работает нормально, используется в форме, и все представления формы отображаются в списке. Из списка, когда я иду к редактированию, все поля заполняются значениями из элемента списка, но не кнопкой раскрывающегося списка,
вот код для кнопки выпадающего меню, где я получаю значение для категории из списка, но получаю ошибку ниже
Неудачное утверждение: строка 560 поз 15: 'items == null || items.isEmpty || значение == ноль || items.where((DropdownMenuItem item) => item.value == значение).length == 1': не соответствует действительности.
любая помощь приветствуется.
Прикрепленный ниже мой код для списка и редактирования
list Widget _buildWidget() {
return new RefreshIndicator(
child: new ListView.builder(
padding: new EdgeInsets.all(10.0),
itemCount: data == null ? 0 : data.length,
itemBuilder: (BuildContext context, i) {
return new Column(
children: <Widget>[
new Padding(padding: EdgeInsets.only(top: 20.0)),
new ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(10.0)),
child: new Container(
padding: new EdgeInsets.all(10.0),
color: Colors.white70,
child: new Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
new Text((i+1).toString(), style: new TextStyle(fontSize: 14.0),),
new Text(data[i]['Category_name'],style: new TextStyle(fontSize: 14.0, color: Colors.black),),
new Text(data[i]['name'],style: new TextStyle(fontSize: 14.0, color: Colors.black),),
new Container(
child: new Row(
children: <Widget>[
new IconButton(icon: new Icon(Icons.edit), onPressed: (){
debugPrint("Edit");
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => new ItemEdit(list: data, index:i)));
}),
new Switch(
value: (data[i]['status']=="0" ? true : false),
onChanged: (bool value) {
debugPrint(value.toString());
String status = (value.toString()=="false")?"1":"0";
debugPrint("Status :: "+status);
changeItemStatus(data[i]['itemid'], status);
setState(() {
value = (data[i]['status']=="0" ? false : true);
_saving = false;
});
}
),
],
),
),
],
),
),
),
],
);
},
),
onRefresh: getItems);
}
редактировать
Widget _buildWidget() {
return Form(
key: _formKey,
child: Container(
margin: new EdgeInsets.all(20.0),
child: new Column(
children: <Widget>[
new TextFormField(
controller: _itemName,
keyboardType: TextInputType.text,
autocorrect: false,
maxLength: 20,
autofocus: true,
style: new TextStyle(
fontFamily: 'Quicksand', color: Colors.black, fontSize: 16.0),
decoration: InputDecoration(
icon: new Icon(
Icons.category,
color: Colors.black,
),
labelText: 'Item Name',
counterText: "",
labelStyle: TextStyle(color: Colors.black),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black)),
),
validator: (val) {
if (val.isEmpty) {
return "Name can't be empty";
}
if (val.isNotEmpty && val.length < 3) {
return "Name is too short";
}
},
),
new TextFormField(
controller: _description,
keyboardType: TextInputType.multiline,
maxLines: 3,
autocorrect: false,
maxLength: 50,
autofocus: true,
style: new TextStyle(
fontFamily: 'Quicksand', color: Colors.black, fontSize: 16.0),
decoration: InputDecoration(
icon: new Icon(
Icons.edit,
color: Colors.black,
),
labelText: 'Description',
counterText: "",
labelStyle: TextStyle(color: Colors.black),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.black)),
),
validator: (val) {
if (val.isEmpty) {
return "Description can't be empty";
}
if (val.isNotEmpty && val.length < 5)
return "Description too short";
},
),
new Row(
children: <Widget>[
new Icon(Icons.category),
new Padding(padding: EdgeInsets.only(left: 20.0)),
// new Text(category),
new Flexible(
child: new Container(
child: new DropdownButton<String>(
value: category,
hint: new Text("Select Category"),
onChanged: (String newValue) {
setState(() {
category = newValue;
});
},
isExpanded: true,
items: catJson.map((Map map) {
return new DropdownMenuItem<String>(
value: map["id"].toString(),
child: new Text(
map["name"],
),
);
}).toList(),
),
),
),
],
),
new MaterialButton(
height: 35.0,
minWidth: 100.0,
color: Colors.blueAccent,
textColor: Colors.white,
child: new Text(
"Create",
style: new TextStyle(
fontSize: 18.0,
fontFamily: 'Quicksand',
),
),
onPressed: () => _formKey.currentState.validate()
? updateItem()
: Toast.show('Validation failed', context,
gravity: Toast.BOTTOM),
splashColor: Colors.redAccent,
)
],
),
),
);
}