颤振:指数超出范围



我正在尝试添加一个动态滑块。我尝试了不同的方法来实现我想要制作的这张幻灯片。当我尝试使用该代码时,我得到一个错误:RangeError (index): index out of range: index应该小于75:75。我不知道为什么。但是当我将category[count]更改为category[i]时,错误消失了,但相同的值重复。

Widget build(BuildContext context) {
final List<Category> category = widget.category;
int slideLenght = ((category.length / 14).floor()) + 1;
List<Widget> slides = [];
List categoryForSlide = [];
var count = 0;
for (var i = 0; i < slideLenght; i++) {
List<Category> subCat = List();
for (var i = 0; i < category.length; i++) {
if (i == 14) break;
subCat.add(category[count]);
print(count);
count++;
}
categoryForSlide.add(subCat);
}
print(categoryForSlide.length);
return Container(),
);

我认为您只需将count重置为0或在外循环中定义它:

Widget build(BuildContext context) {
final List<Category> category = widget.category;
int slideLenght = ((category.length / 14).floor()) + 1;
List<Widget> slides = [];
List categoryForSlide = [];
for (var i = 0; i < slideLenght; i++) {
var count = 0;
List<Category> subCat = List();
for (var i = 0; i < category.length; i++) {
if (i == 14) break;
subCat.add(category[count]);
print(count);
count++;
}
categoryForSlide.add(subCat);
}
print(categoryForSlide.length);
return Container();
};

也正如Ουιλιαμ Αρκευα在评论中指出的那样,为两个嵌套循环使用相同的i变量名称不是一个好的做法。

所以一个简化的版本是:

Widget build(BuildContext context) {
final List<Category> category = widget.category;
int slideLenght = ((category.length / 14).floor()) + 1;
List<Widget> slides = [];
List categoryForSlide = [];
for (var i = 0; i < slideLenght; i++) {
List<Category> subCat = List();
for (var j = 0; j < category.length; j++) {
if (j == 14) break;
subCat.add(category[j]);
print(j);
}
categoryForSlide.add(subCat);
}
print(categoryForSlide.length);
return Container();
};

编辑好的,据我所知你想在每张幻灯片上显示14个类别,你应该在你的问题中提到这一点。

你发布的解决方案工作,但不是最优的IMO,你可以做得更简单,使用模算子。

看这个例子,它为每张幻灯片添加了3个类别:

void main() {
final List<String> categories = List<String>.generate(10, (counter) => "Category $counter");
final int nbCategoriesPerPage = 3;
List<List<String>> slides = [[]];
int slideIndex = 0;
for (var i = 0; i < categories.length; i++) {
if (i != 0 && i % nbCategoriesPerPage == 0) {
slides.add(List());
slideIndex++;
}
slides[slideIndex].add(categories[i]);
}
print(slides);
}

输出:

[[类别0,类别1,类别2],[类别3,类别4,类别5],[类别6,类别7,类别8],[类别9]]

希望有帮助。

我的代码的解决方案

Widget build(BuildContext context) {
final List<Category> category = widget.category;
int slideLenght = ((category.length / 14).floor()) + 1;
List<Widget> slides = [];
List categoryForSlide = [];
var count = 0;
var f = 0;
for (var i = 0; i < slideLenght; i++) {
List<Category> subCat = List();
for (var z = 0; z < category.length; z++) {
if (count < category.length) {
count++;
}
subCat.add(category[count - 1]);
if (count == category.length) break;
if (z == 14) break;
}
categoryForSlide.add(subCat);
}
print(categoryForSlide.length);
return Container();
}

最新更新