繁体   English   中英

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

[英]Out of range error in PageView widget when the builder gets a value greater than 9

Data.length 为 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM