我正在尝试添加一个动态滑块。我尝试了不同的方法来实现我想要制作的这张幻灯片。当我尝试使用该代码时,我得到一个错误: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();
}