簡體   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