Невозможно установить значение для выпадающей кнопки из списка редактирования во флаттере

Я пытаюсь заполнить выпадающий список из 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,
            )
          ],
        ),
      ),
    );
  }

0 ответов

Другие вопросы по тегам