#flutter #dart
#ошибка flutter #dart
Вопрос:
Я хочу установить пользовательское значение в 0-м индексе _menuItems.
Это то, что я сделал до сих пор:
int _value;
List<custom.DropdownMenuItem<int>> _menuItems;
initDropdown() {
dynamic data = Provider.of<RestApiData>(context, listen: false).data;
List dataList = data[1]["offers"];
_menuItems = List<custom.DropdownMenuItem<int>>(dataList.length 1);
_menuItems[0] = custom.DropdownMenuItem(
value: -1,
child: Text(
'allOffers'.tr().toString(),
style: GoogleFonts.ubuntu(fontWeight: FontWeight.w500, fontSize: 14.0),
),
decoration: BoxDecoration(
border:
Border(bottom: BorderSide(color: Colors.black54, width: 0.5))),
);
for (int i = 1; i <= _menuItems.length; i ) {
_menuItems[i] = custom.DropdownMenuItem(
value: int.parse(dataList[i]["Offer"]["id"]),
child: Text(
"${dataList[i]["Offer"]["name"]}",
style:
GoogleFonts.ubuntu(fontWeight: FontWeight.w500, fontSize: 14.0),
),
decoration: BoxDecoration(
border:
Border(bottom: BorderSide(color: Colors.black54, width: 0.5))),
);
}
}
@override
void initState() {
super.initState();
initDropdown();
}
Я пробовал этот способ, но получаю ошибку диапазона.
Любая помощь будет признательна.
Заранее спасибо.
Ответ №1:
RangeError
означает, что вы пытаетесь получить элемент по индексу, который не существует. Y Ваш список состоит из 14 элементов и индексируется начиная с 0 до 13, и вы пытаетесь получить элемент с индексом 14, что невозможно
Удалите равенство из условия цикла, и оно будет работать
for (int i = 1; i < _menuItems.length; i ){
.....................
}
Если вы запутались, выведите значение i
в цикле
Комментарии:
1. спасибо за ответ, но я хочу поместить пользовательское значение в индекс _menuItems[0] . предложенное вами решение не работает.
2. вы имеете в виду, что вы поместите некоторое значение в индекс 0 и предоставите остальным цикл for?
3. да, верно. другие индексы должны предоставляться данными json, поступающими из api.
4. я пробовал этот способ раньше, но пользовательское значение заменяет первый элемент dataList
5. разве это не то, чего вы хотели достичь?
Ответ №2:
Проблема решена. Я забыл вычесть 1 из упомянутых строк.
int _value;
List<custom.DropdownMenuItem<int>> _menuItems;
initDropdown() {
dynamic data = Provider.of<RestApiData>(context, listen: false).data;
List dataList = data[1]["offers"];
_menuItems = List<custom.DropdownMenuItem<int>>(dataList.length 1);
_menuItems[0] = custom.DropdownMenuItem(
value: -1,
child: Text(
'allOffers'.tr().toString(),
style: GoogleFonts.ubuntu(fontWeight: FontWeight.w500, fontSize: 14.0),
),
decoration: BoxDecoration(
border:
Border(bottom: BorderSide(color: Colors.black54, width: 0.5))),
);
for (int i = 1; i < _menuItems.length; i ) {
_menuItems[i] = custom.DropdownMenuItem(
value: int.parse(dataList[i - 1]["Offer"]["id"]), //**here**
child: Text(
"${dataList[i - 1]["Offer"]["name"]}", //**here**
style:
GoogleFonts.ubuntu(fontWeight: FontWeight.w500, fontSize: 14.0),
),
decoration: BoxDecoration(
border:
Border(bottom: BorderSide(color: Colors.black54, width: 0.5))),
);
}