Ниспадающее значение не может быть установлено в ноль - PullRequest
0 голосов
/ 16 апреля 2020

Я реализовал два раскрывающихся списка. когда я выбираю штат и район, он работает нормально. когда я меняю состояние, это показывает мне ошибку. Установка нулевого значения раскрывающегося списка в методе getDistricts (). Пожалуйста, помогите и спасибо заранее.

получение этой ошибки в консоли:

Должен быть ровно один элемент со значением [DropdownButton]: 1. Обнаружены либо ноль, либо 2, либо более [DropdownMenuItem] с тем же значением «package: flutter / src / material / dropdown.dart»: ошибочное утверждение: строка 828, позиция 15: «items == null || items.isEmpty || value == null || items.where ((DropdownMenuItem item) {return item.value == value;}). length == 1 '

class AddAddress extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return AddAddressPage();
  }
}

class AddAddressPage extends StatefulWidget {
  @override
  _AddAddressPageState createState() => _AddAddressPageState();
}

class _AddAddressPageState extends State<AddAddressPage> {
  bool loader = false;
  int intState;
  int intDistrict;
  List<Location> districts=listDistricts;
  List<Location> states=listStates;
  getDistricts()async{
    setState(() {
      loader=false;
    });
  List<Location> district= await service.getDistrictsByStateId(intState);
   setState(() {
     districts=district;
      loader=false;
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Address"),
        backgroundColor: Colors.white,
        centerTitle: true,
      ),
      body: Stack(
        children: <Widget>[
          SingleChildScrollView(
            child: Padding(
              padding: const EdgeInsets.only(top: 10.0, left: 30, right: 30),
              child: Form(
                child: Container(
                  child: Column(
                    children: <Widget>[
                      Padding(
                        padding: const EdgeInsets.only(top: 15.0),
                        child: DropdownButtonFormField<int>(
                            decoration: InputDecoration(
                              contentPadding:
                                  const EdgeInsets.only(left: 30, right: 10),
                              border: OutlineInputBorder(
                                  borderRadius:
                                      BorderRadius.all(Radius.circular(15))),
                            ),
                            hint: Text('state'),
                            value: intState,
                            items: states.map((location) {
                              return new DropdownMenuItem<int>(
                                child: Text(location.name),
                                value: location.id,
                              );
                            }).toList(),
                            onChanged: (int value) {
                              setState(() {
                                intState = value;
                             intDistrict=null;
                              getDistricts();
                              });

                            }),
                      ),
                     Padding(
                        padding: const EdgeInsets.only(top: 15.0),
                        child: DropdownButtonFormField<int>(
                            decoration: InputDecoration(
                              contentPadding:
                                  const EdgeInsets.only(left: 30, right: 10),
                              border: OutlineInputBorder(
                                  borderRadius:
                                      BorderRadius.all(Radius.circular(15))),
                            ),
                            hint: Text(' district'),
                            value: intDistrict,
                            items: districts.map((location) {
                              return new DropdownMenuItem<int>(
                                child: Text(location.name),
                                value: location.id,
                              );
                            }).toList(),
                            onChanged: (int value) {
                              intDistrict = value;
                            }),
                      ),

                    ],
                  ),
                ),
              ),
            ),
          ),
          ProgressLoader(
            loader: loader,
          )
        ],
      ),
    );
  }
}

this is happening

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Спасибо за помощь, ребята. Я обнаружил проблему. С тех пор, как я обновил Flutter SDK (не Stable SDK) в файле dropdown.dart, есть некоторые изменения по сравнению с предыдущим. Поэтому я сравнил со стабильным SDK и изменил файл. Спасибо за ваше время и помощь, ребята.

0 голосов
/ 17 апреля 2020

Я думаю, что проблема в том, что при выборе нового состояния вы просто устанавливаете значение intDistrict в ноль, в то время как раскрывающийся список "Район" имеет элементы dropdown, поэтому я думаю, что если вы очистите районы перед установкой значения intDistrict в ноль, то это должно сработать.

 onChanged: (int value) {
            setState(() {
          intState = value;
          districts.clear(); // added line
          intDistrict=null;
          getDistricts();
      });
    }),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...