如何解决 "RangeError (index): Invalid value: Only valid value is 0: 1" 错误

How to solve "RangeError (index): Invalid value: Only valid value is 0: 1" error

我遇到了这个异常我搜索了 Whosebug 但我不明白如何处理这个,我只是开始玩代码并尝试理解和尝试 solve.It 会对我有所帮助,如果有人的话帮助我,提前谢谢你。

======== Exception caught by widgets library =======================================================
The following RangeError was thrown building CardWithTextformfield(dirty, state: _CardWithTextformfieldState#a698e):
RangeError (index): Invalid value: Only valid value is 0: 1

The relevant error-causing widget was: 
  CardWithTextformfield file:///E:/flutter%20apps/flutter%20apps/cardview_textformfield/lib/main.dart:11:13
When the exception was thrown, this was the stack: 
#0      List.[] (dart:core-patch/growable_array.dart:254:60)
#1      _CardWithTextformfieldState.cardslist (package:cardview_textformfield/main.dart:134:35)
#2      _CardWithTextformfieldState.build (package:cardview_textformfield/main.dart:107:60)
#3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4691:27)
#4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4574:15)

红屏出现几秒后正常,我尝试生成最多 4 张卡片并且第一张卡片可见性为真,因为我希望第一张卡片在屏幕出现时立即可见并且当我点击 floatingActionButton 时,剩余的卡片将可见。 下面是我的完整代码。

import 'package:flutter/material.dart';

    void main() {
      runApp(App());
    }
    
    class App extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: CardWithTextformfield(),
        );
      }
    }
    
    class CardWithTextformfield extends StatefulWidget {
      const CardWithTextformfield({Key? key}) : super(key: key);
    
      @override
      _CardWithTextformfieldState createState() => _CardWithTextformfieldState();
    }
    
    class _CardWithTextformfieldState extends State<CardWithTextformfield>  {
    
    
      var name =<TextEditingController>[];
      var id =<TextEditingController>[];
      
    
      var addCard =2;
      bool cardOneVisibility=true;
      bool cardTwoVisibility=false;
      bool cardThreeVisibility=false;
      bool cardFourVisibility=false;
    
    
      void incrementcard(){
        setState(() {
          
          if(addCard==1){
            cardOneVisibility=true;
          }
          else if(addCard==2){
            cardOneVisibility=true;
            cardTwoVisibility=true;
          }
          else if(addCard==3){
            cardOneVisibility=true;
            cardTwoVisibility=true;
            cardThreeVisibility=true;
          }
          else if(addCard==4){
            cardOneVisibility=true;
            cardTwoVisibility=true;
            cardThreeVisibility=true;
            cardFourVisibility=true;
          }
          addCard++;
    
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Card with TextformField'),
          ),
          floatingActionButton: FloatingActionButton(
            onPressed: addCard>=5 ? null : incrementcard,
            child: Icon(Icons.add),
          ),
          body: Container(
    
            child:SingleChildScrollView(
              child: Column(
                children: [
                  Visibility(visible: cardOneVisibility,child: cardslist(1)),
                  Visibility(visible: cardTwoVisibility,child: cardslist(2)),
                  Visibility(visible: cardThreeVisibility,child: cardslist(3)),
                  Visibility(visible: cardFourVisibility,child: cardslist(4)),
                ],
              ),
            ),
          ),
        );
      }
      Widget cardslist(int index){
        if(name.length <= index){
          name.add(TextEditingController());
          id.add(TextEditingController());
        }
        return Card(
          margin: EdgeInsets.all(10),
          child: Container(
            child: Column(
              children: [
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    Container(
                        margin: EdgeInsets.all(10),
                        child: Text('Team Name: ')),
                    Expanded(child: TextFormField(
                      controller: name[index],
                        decoration: InputDecoration(hintText: 'Team Name'),
                    ),),
                    Container(
                      margin: EdgeInsets.all(10),
                      child: Text('Team Id: '),),
                    Expanded(child: TextFormField(
                      controller: id[index],
                        decoration: InputDecoration(hintText: 'Team Id'),
                    ),),
                  ],
                ),
                Row(
                  mainAxisAlignment: MainAxisAlignment.spaceBetween,
                  children: [
                    GestureDetector(
                      child: Container(
                        width: 50,height: 50,
                        margin: EdgeInsets.all(10),
                        decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          color:Colors.grey,
                        ),
                        child: Center(child: Text('IT'),),
                      ),

                    ),
                    GestureDetector(
                      child: Container(
                        width: 50,height: 50,
                        margin: EdgeInsets.all(10),
                        decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          color: Colors.grey,
                        ),
                        child: Center(child: Text('DEV'),),
                      ),
                    ),
                    GestureDetector(
                      child: Container(
                        width: 50,height: 50,
                        margin: EdgeInsets.all(10),
                        decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          color: Colors.grey,
                        ),
                        child: Center(child: Text('TEST'),),
                      ),
                    ),
                    GestureDetector(
                      child: Container(
                        width: 50,height: 50,
                        margin: EdgeInsets.all(10),
                        decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          color: Colors.grey,
                        ),
                        child: Center(child: Text('HR'),),
                      ),
                    ),
                  ],
                )
              ],
            ),
          ),
        );
      }
    }

索引从0开始,不是1,需要在不同的位置改变。我为您更新了代码,请查看。

import 'package:flutter/material.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: CardWithTextformfield(),
    );
  }
}

class CardWithTextformfield extends StatefulWidget {
  const CardWithTextformfield({Key key}) : super(key: key);

  @override
  _CardWithTextformfieldState createState() => _CardWithTextformfieldState();
}

class _CardWithTextformfieldState extends State<CardWithTextformfield>  {


  var name =<TextEditingController>[];
  var id =<TextEditingController>[];


  var addCard =0;
  bool cardOneVisibility=true;
  bool cardTwoVisibility=false;
  bool cardThreeVisibility=false;
  bool cardFourVisibility=false;


  void incrementcard(){
    setState(() {

      if(addCard==0){
        cardOneVisibility=true;
      }
      else if(addCard==1){
        cardOneVisibility=true;
        cardTwoVisibility=true;
      }
      else if(addCard==2){
        cardOneVisibility=true;
        cardTwoVisibility=true;
        cardThreeVisibility=true;
      }
      else if(addCard==3){
        cardOneVisibility=true;
        cardTwoVisibility=true;
        cardThreeVisibility=true;
        cardFourVisibility=true;
      }
      addCard++;

    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Card with TextformField'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: addCard>=4 ? null : incrementcard,
        child: Icon(Icons.add),
      ),
      body: Container(

        child:SingleChildScrollView(
          child: Column(
            children: [
              Visibility(visible: cardOneVisibility,child: cardslist(0)),
              Visibility(visible: cardTwoVisibility,child: cardslist(1)),
              Visibility(visible: cardThreeVisibility,child: cardslist(2)),
              Visibility(visible: cardFourVisibility,child: cardslist(3)),
            ],
          ),
        ),
      ),
    );
  }
  Widget cardslist(int index){
    if(name.length <= index){
      name.add(TextEditingController());
      id.add(TextEditingController());
    }
    return Card(
      margin: EdgeInsets.all(10),
      child: Container(
        child: Column(
          children: [
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                Container(
                    margin: EdgeInsets.all(10),
                    child: Text('Team Name: ')),
                Expanded(child: TextFormField(
                  controller: name[index],
                  decoration: InputDecoration(hintText: 'Team Name'),
                ),),
                Container(
                  margin: EdgeInsets.all(10),
                  child: Text('Team Id: '),),
                Expanded(child: TextFormField(
                  controller: id[index],
                  decoration: InputDecoration(hintText: 'Team Id'),
                ),),
              ],
            ),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                GestureDetector(
                  child: Container(
                    width: 50,height: 50,
                    margin: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      shape: BoxShape.rectangle,
                      color:Colors.grey,
                    ),
                    child: Center(child: Text('IT'),),
                  ),

                ),
                GestureDetector(
                  child: Container(
                    width: 50,height: 50,
                    margin: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      shape: BoxShape.rectangle,
                      color: Colors.grey,
                    ),
                    child: Center(child: Text('DEV'),),
                  ),
                ),
                GestureDetector(
                  child: Container(
                    width: 50,height: 50,
                    margin: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      shape: BoxShape.rectangle,
                      color: Colors.grey,
                    ),
                    child: Center(child: Text('TEST'),),
                  ),
                ),
                GestureDetector(
                  child: Container(
                    width: 50,height: 50,
                    margin: EdgeInsets.all(10),
                    decoration: BoxDecoration(
                      shape: BoxShape.rectangle,
                      color: Colors.grey,
                    ),
                    child: Center(child: Text('HR'),),
                  ),
                ),
              ],
            )
          ],
        ),
      ),
    );
  }
}

输出:

卡片 1 使用 idname 数组的第一个元素。数组第一个元素的索引为0.

cardslist函数中,

name[index] 更改为 name[index - 1]

id[index]更改为id[index - 1]