flutter - 当构建器获取大于 9 的值时,PageView 小部件中出现超出范围错误

标签 flutter

数据长度为10。 对于第 10 个值,我遇到了超出范围的错误,而我的项目计数仍然> 10。为什么会出现这种情况

import 'package:flutter/material.dart';
import 'dart:ui';
import 'package:momnts/landscape.dart';
import 'myCard.dart';
import 'data.dart';

class Homepage extends StatefulWidget {
  @override
  _HomepageState createState() => _HomepageState();
}

class _HomepageState extends State<Homepage> {
  var controller =PageController(initialPage: 0, viewportFraction: 0.8);
  int currentPage = 0;
  @override
  void initState(){
    controller.addListener((){
      int next = controller.page.round();

      if(currentPage!=next){
        setState(() {
          currentPage = next;
        });
      }
    });
  }

  int totalLen = data.length+1;
  @override
  Widget build(BuildContext context) {
    if (MediaQuery.of(context).orientation == Orientation.portrait) {
      return Container(
        color: Colors.white,
              child: SafeArea(
          child: Scaffold(
              body: Container(
                  child: Column(
                    children: <Widget>[
                      Container(
                        height: 80.0,
                        child: Row(
                          children: <Widget>[
                            Expanded(
                              child: Text(
                                "Momnts",
                                textAlign: TextAlign.center,
                                style: TextStyle(
                                  fontSize: 25.0,
                                  fontFamily: "Pacifico",
                                ),
                              ),
                            ),
                          ],
                        ),
                      ),
                      Expanded(
                        child: PageView.builder(
                          itemCount: totalLen+1,
                          itemBuilder: (context,int currentIdx){
                            if(currentIdx==0)
                            return SimplePage();
                            else if(currentIdx<10)
                            return MyCard(id:currentIdx,text:data[currentIdx],image: AssetImage('images/S$currentIdx.jpg'),name:name[currentIdx]);
                            else
                            return MyCard(id:currentIdx,text:data[currentIdx],image: AssetImage('images/S$currentIdx.jpg'),name:name[currentIdx]);
                          },
                          scrollDirection: Axis.horizontal,
                          controller: controller,
                        ),
                      ),
                    ],
                  ))),
        ),
      );
    } else
      return Landscape();
  }
}

class SimplePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: Row(children: <Widget>[
        Expanded(
                  child: Text("Yes",
          style: TextStyle(fontSize: 30.0,),),
        ),
        CircleAvatar(child: Icon(Icons.arrow_right),)
      ],)
    );
  }
}

这是显示的错误

The following RangeError was thrown building:
I/flutter (16859): RangeError (index): Invalid value: Not in range 0..9, inclusive: 10
I/flutter (16859): 
I/flutter (16859): When the exception was thrown, this was the stack:
I/flutter (16859): #0      List.[] (dart:core-patch/growable_array.dart:149:60)
I/flutter (16859): #1      _HomepageState.build.<anonymous closure> (package:momnts/homepage.dart:65:66)
I/flutter (16859): #2      SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:446:15)**     

最佳答案

如果您的 data.length 是 10,那么您将传递 12 作为构建器的项目计数,我假设您应该有 10 个,所以 data.length .

int totalLen = data.length+1; //10+1


...



itemCount: totalLen+1, //10+1+1

关于flutter - 当构建器获取大于 9 的值时,PageView 小部件中出现超出范围错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61734613/

相关文章:

flutter - 为什么用这个简单的initState代码使flutter崩溃?

flutter - 如何在顶部附加新的 ListView 项

flutter - 无法在苹果 m1 芯片的 flutter 项目上执行 pod 安装

flutter - 如何使 DraggableScrollableSheet 在拖动 handle 时向上滚动,就像谷歌地图一样

flutter - 错误 : Method not found: 'FallThroughError' . 抛出 FallThroughError();

flutter - .forEach 在 Flutter 中接受多行

firebase - Flutter:Firebase FieldValue.serverTimestamp() 到 DateTime 对象

flutter - 如何在Flutter中制作这种动画?

flutter - 有没有我可以使用的文件选择器。我尝试了很少但他们没有工作

flutter - 如何通过列/行容器中的左(或右)边缘提供项目的对齐方式?