Как установить массив, хранящийся в Firebase (в виде значений), в раскрывающийся список и привязать к предыдущему раскрывающемуся списку в Flutter

# #android #firebase #flutter #dart

Вопрос:

Я выполняю проект flutter, в котором у меня есть данные, хранящиеся в Firebase следующим образом:

Компании и их категории пополнения (например, у компании Asiacell есть следующие категории пополнения) :

введите описание изображения здесь

Значения пополнения хранятся в виде массива чисел. Я сохраняю эту пару ключевых значений для каждой компании (всего 3 компании) на карте.

 Map phoneCompany = new Map<String, dynamic>();
String client, company, rechargeAmount;
 

Теперь мне нужно 3 выпадающих списка следующим образом:

  1. Выбирает Клиента или Владельца магазина — Готово
  2. Заполняет 3 названия компаний, если выше указано только для клиента (отключается при выборе Владельца магазина).
  3. Основываясь на 2 выше, он должен заполнять заряды, хранящиеся в firebase.

В то время как я заполнял список компаний, использующих:

 Iterable<String> companies = phoneCompany.keys;
 

И

  items: companies.map<DropdownMenuItem<String>>((String val) {
          return DropdownMenuItem<String>(
            value: val,
            child: Text('${val}'),
          );
        }).toList(),
 

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

Мой класс перезарядки:

 class RechargeValue extends StatefulWidget {
  @override
  _RechargeValueState createState() => _RechargeValueState();
}

class _RechargeValueState extends State<RechargeValue> {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: DropdownButton<String>(
        hint: Text(
          'Select Recharge Amount',
          style: TextStyle(
            color: Colors.red,
          ),
        ),
        value: rechargeAmount,
        icon: const Icon(Icons.arrow_downward),
        iconSize: 55,
        dropdownColor: Colors.white,
        elevation: 16,
        style: const TextStyle(color: Colors.deepPurple, fontSize: 18),
        underline: Container(
          height: 2,
          color: Colors.deepPurpleAccent,
        ),
        onChanged: (newValue) {
          setState(() {
            rechargeAmount = newValue;
          });

          print(rechargeAmount);
        },
        items:  getRechar().map<DropdownMenuItem<String>>((String val) {
          return DropdownMenuItem<String>(
            value: val,
            child: Text('${val}'),
          );
        }),
      ),
    );
  }

  getRechar() {
    List<String> lists = [];
    if (company == null || client == 'Shopkeeper') {
      lists = ['1000', '2000', '3000', '4000', '5000'];
    } else {
      var listCharges = phoneCompany[company] as List;
      listCharges.forEach((element) {
        lists.add(element.toString());
      });
    }

    print(lists);

    return lists;
  }
}
 

I had so many errors that it is difficult to recall which approach gave what error, this is the error I get for above approach

 ======== Exception caught by widgets library =======================================================
The following _TypeError was thrown building RechargeValue(dirty, state: _RechargeValueState#7a12b):
type 'MappedListIterable<String, DropdownMenuItem<String>>' is not a subtype of type 'List<DropdownMenuItem<String>>?'
 

The interface :

введите описание изображения здесь

Была бы признательна любая помощь, чтобы рассказать мне, как создать 3-й выпадающий список, используя массив пополнений, хранящихся на карте.