flutter - 颤振范围错误 ListView 的无效值,而不是 Builder
问题描述
错误: RangeError (index): Invalid value: Valid value range is empty: 0
相关的导致错误的小部件是
主菜单
lib\main.dart:659
抛出异常时,这是堆栈
#0 List._setIndexed (dart:core-patch/growable_array.dart:262:73)
#1 List.[]= (dart:core-patch/growable_array.dart:258:5)
#2 获取菜单数组
包:j_deli/menu/menu_main.dart:92
#3 创建菜单列表
包:j_deli/menu/menu_main.dart:67
#4 MainMenu.build
目标:使用变量_selectedIndex将不同的容器小部件数组加载到列表视图中。
注意:当我注释掉时我没有收到错误,var menuLists = createMenuLists();
所以问题来自我的小部件列表(容器小部件)列表的实例化。我知道我正在使用动态列表,但完全不确定为什么这段代码不起作用。它似乎特别打破了这种方法。知道我做错了什么吗?谢谢!
class MainMenu extends StatelessWidget {
int _selectedIndex;
var menuCategoriesArray;
int numberOfItemsInCart = 0;
MainMenu(this._selectedIndex, this.menuCategoriesArray);
@override
Widget build(BuildContext context) {
var menuLists = createMenuLists();
return ListView(
children: [
Row(
children: [
Expanded(
flex: 8,
child: Text(
menuCategoriesArray[_selectedIndex],
style: GoogleFonts.ubuntu(
fontSize: 39, fontWeight: FontWeight.bold),
),
),
Expanded(
flex: 2,
child: Container(
child: Row(
children: [
Icon(Icons.shopping_cart_outlined),
Text(numberOfItemsInCart.toString()),
],
),
),
),
],
),
menuLists[_selectedIndex],
],
);
}
}
createMenuCard(int whichMenuItem, var currentMenuList) {
return MenuCard(
currentMenuList[0][whichMenuItem],
currentMenuList[1][whichMenuItem],
currentMenuList[2][whichMenuItem],
currentMenuList[3][whichMenuItem]);
}
createMenuList(int numberOfItemsInMenuList, var currentMenuList) {
var listMenuOfCards;
for (int i = 0; i < numberOfItemsInMenuList; i++) {
listMenuOfCards[i] = createMenuCard(i, currentMenuList);
}
return listMenuOfCards;
}
createMenuLists() {
var menuLists;
for (int i = 0; i < getMenuArrays().length; i++) {
menuLists[i] =
createMenuList(getMenuArrays()[i][0].length, getMenuArrays()[i]);
}
return menuLists;
}
getMenuArrays() {
//THE PIT MENU
var nameArray = [
'Angus Beef Brisket',
'Pulled Pork',
'1/2 BBQ Chicken',
'St. Louis Style Pork Ribs - 6 Ribs',
'St. Louis Style Pork Ribs - 12 Ribs',
'Tri-Tip'
];
var imageArray = [];
for (int i = 0; i < nameArray.length; i++) {
imageArray[i] = 'assets/images/empty_image.jpg';
}
var summaryArray = [
'Slow smoked, sliced to provide perfect mix of brisket',
'Pork butt dry rubbed, slow smoked, hand pulled daily',
'Rocky\'s chicken, local favorite',
'Extra meaty, dry rubbed, slow smoked',
'Extra meaty, dry rubbed, slow smoked',
'Black Angus tri-tip trimmed in house, dry rubbed and slow smoked',
];
var priceArray = ['22.00', '20.00', '21.00', '22.00', '35', '23'];
var menuArrays;
menuArrays[0] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[1] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[2] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[3] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[4] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[5] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[6] = [imageArray, nameArray, summaryArray, priceArray];
menuArrays[7] = [imageArray, nameArray, summaryArray, priceArray];
return menuArrays;
}
编辑:我认为错误可能是由于我最后在 getMenuArrays() 方法中实例化列表列表的方式。
编辑 2:我添加了一些 debugPrint()s,它们表明当我尝试将 menuArray 的值设置为其他数组时发生错误,这里:
变种菜单数组;
menuArrays[0] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[1] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[2] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[3] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[4] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[5] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[6] = [imageArray, nameArray, summaryArray, priceArray]; menuArrays[7] = [imageArray, nameArray, summaryArray, priceArray];
解决方案
我能够通过对 menuArrays 数组中的每个项目使用 .add 而不是 [0] = ... [1] = ... 来解决这个问题。我还必须使用 .toList():
menuArrays.add([imageArray.toList(), nameArray.toList(), summaryArray.toList(), priceArray.toList()]);
不完全确定为什么,但这有效。总而言之,不要将 [n] = ... 用于列表。使用 .add 因为它们不是具有设定长度的数组。
推荐阅读
- jenkins-pipeline - Kubernetes 插件 - 声明式管道 - 错误:节点不是 Kubernetes 节点:
- java - 我们如何在 Thymeleaf 条件运算符中获取 java 对象值( url )?
- php - laravel 有一个但有多个相同的 id
- reactjs - 获取/ bin / sh:adb:在android上以反应本机运行应用程序时找不到命令问题
- java - javax.servlet.UnavailableException:从jdk8迁移到openjdk11&weblogic到jetty时,Servlet类MyClass不是javax.servlet.Servlet
- javascript - CSS溢出自动无法平滑滚动以固定在iphone上的位置
- typescript - 如何通过语言服务器扩展在工作区中创建和编辑新文件
- node.js - 在 AS400 / iSeries 中运行原生 Nodejs
- php - Wordpress 错误日志不起作用。该网站遇到技术难题
- phpgrid - 如何从 phpgrid 中的选定行获取 php 变量中的值?