我正在尝试添加动态滑块。我尝试了不同的方法来实现我想要创建的这张幻灯片。当我尝试使用该代码时,出现错误:
RangeError(索引):索引超出范围:索引应该小于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(),
);
答案 0 :(得分:2)
我认为您只需将 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 类]]
希望有帮助。
答案 1 :(得分:0)
解决我的代码
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();
}