# #android #firebase #flutter #dart
Вопрос:
Я выполняю проект flutter, в котором у меня есть данные, хранящиеся в Firebase следующим образом:
Компании и их категории пополнения (например, у компании Asiacell есть следующие категории пополнения) :
Значения пополнения хранятся в виде массива чисел. Я сохраняю эту пару ключевых значений для каждой компании (всего 3 компании) на карте.
Map phoneCompany = new Map<String, dynamic>();
String client, company, rechargeAmount;
Теперь мне нужно 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-й выпадающий список, используя массив пополнений, хранящихся на карте.