Почему я не могу получить ожидаемый ответ при первом нажатии кнопки, но получить правильный ответ при втором нажатии во Флаттере? - PullRequest
0 голосов
/ 07 апреля 2020
//FIRST DROPDOWNBUTTON BELOW
//

child: DropdownButton<String>(
                        hint: Text('Select Category'),
                        icon: Icon(Icons.keyboard_arrow_down),
                        iconSize: 28,
                        isDense: true,
                        isExpanded: true ,
                        elevation: 16,
                        style: TextStyle(
                          color: Colors.black,
                          fontSize: 16.0,
                        ),
                        value: categoryManualCurrent.isNotEmpty ? 
categoryManualCurrent : null,
                        onChanged: (String categoryValue) async {

                         //  await dynamicDropDownMainCategory();

                          setState(() {

                            mainCategoryCurrent = categoryValue;
                            categoryManualCurrent = categoryValue;

                          }); 

                                    print('THIS' + 
categoryManual.toString());
                         print('THAT' + subCategoryManual.toString());

                            await dynamicDropDownSubCategory();
                        },
                        items: categoryManual.toList()
                          .map((var value3) {
                            return  DropdownMenuItem<String>(
                              value: value3,
                              child: Text(value3),
                            );
                           }).toList(),
                         ),
                       )   
                      ],
                      ),


                //SECOND DROPDOWNBUTTON BELOW
                //

                      child: DropdownButton<String>(
                        hint: Text('Select subCategory'),
                        icon: Icon(Icons.keyboard_arrow_down),
                        iconSize: 28,
                        isDense: true,
                        isExpanded: true ,
                        elevation: 16,
                        style: TextStyle(
                          color: Colors.black,
                          fontSize: 16.0,
                        ),

           value: subCategoryManualCurrent.isNotEmpty ? 
subCategoryManualCurrent : null,
                        onChanged: (String subCategoryValue) async {

                        //await dynamicDropDownMainCategory();
                         await dynamicDropDownSubCategory();

                            subCategoryCurrent = subCategoryValue;
                           setState(() {
                             subCategoryManualCurrent = subCategoryValue;
                           }); 

                        //   await  dynamicDropDownSubCategory();

                        },
                          items: subCategoryManual.toList()
                          .map((var value1) {
                            return DropdownMenuItem<String>(
                              value: value1,
                              child: Text(value1),
                            );
                           }).toList(),
                         ),
                       ),
                  ]
                      ),


//TWO functions im using to call the list data from firestore and insert 
into the //dropdownbutton

Future dynamicDropDownMainCategory() async{

  await Firestore.instance

          .collection('Products')
          .document('Categories')                                    
          .get()                                                             
          .then((snapshot) => {  

          categoryManual = (snapshot.data['mainCategory']),

          }
          );
         }


   Future dynamicDropDownSubCategory() async{

      await Firestore.instance

          .collection('Products')
          .document('Categories')                                    
          .get()                                                             
          .then((snapshot) => {  

    if (mainCategoryCurrent == categoryManualCurrent){
 subCategoryManual = (snapshot.data['subCategory'+' 
'+mainCategoryCurrent]),

       } else {

        subCategoryManual = ['Error Getting Data'],

          }
          }
      );
}

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

Теперь, когда я выбираю определенное значение в первом раскрывающемся списке, я получаю нулевое значение во втором раскрывающемся меню. (Имеется в виду отсутствие элементов в списке). Если я сделаю тот же выбор в первом раскрывающемся списке снова, я получу желаемый список во втором раскрывающемся списке. Может кто-нибудь, пожалуйста, помогите мне объяснить причину этой проблемы?

Кроме того, если вы делаете другой выбор после первого выбора в раскрывающемся списке, даже это должно быть сделано дважды, в этом случае я получаю ошибку , сказав, что ожидался только один позиционный аргумент, но два были получены.

Я использую Futures и asyn c и жду всех своих функций и вызовов. Так что любая причина задержки кажется маловероятной. Любая помощь по этому вопросу высоко ценится.

Ссылка: Это расширение кейса: Flutter - Зависимый / многоуровневый DropdownButton имеет проблему: должен быть ровно один элемент со значением [DropdownButton]: Мази

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...