【问题标题】:How I fix RangeError (index): Invalid value: Only valid value is 0: 1我如何修复 RangeError(索引):无效值:只有有效值是 0:1
【发布时间】:2021-03-02 00:18:15
【问题描述】:

我正在从 api 数据创建一个接口,一切正常,但是当我向我的 TextEditingController 列表添加一个值时,出现“RangeError (index): Invalid value: Only valid value is 0: 1”的错误,并且我不知道为什么会发生这种情况,如果您能帮助我,我将不胜感激

这是我的代码。

List<TextEditingController> openQuest = List<TextEditingController>();

Widget _questions(){
return FutureBuilder(
  future: widget.questSect,
  builder: (BuildContext context, AsyncSnapshot snapshot){
    if(snapshot.hasData){
      return Container(
        child: ListView.builder(
          shrinkWrap: true,
          physics: NeverScrollableScrollPhysics(),
          itemCount: snapshot.data.length,
          itemBuilder: (BuildContext context, int index){
            if(snapshot.data[index]['tipo_pregunta'] == 2){
              return Padding(
                padding: const EdgeInsets.all(8.0),
                child: Column(
                  children: <Widget>[
                    SizedBox(height:5),
                    Container(
                      width: MediaQuery.of(context).size.width * .88,
                      child: Text(
                        snapshot.data[index]['pregunta'],
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          color: SECONDARY_TEXT,
                          fontSize: 16,
                        )
                      ),
                    ),
                    SizedBox(height: 5),
                  ],
                ),
              );
            }else{
              openQuest.add(TextEditingController());
              return Padding(
                padding: const EdgeInsets.all(8.0),
                child: Column(
                  children: <Widget>[
                    SizedBox(height:5),
                    Container(
                      width: MediaQuery.of(context).size.width * .88,
                      child: Text(
                        snapshot.data[index]['pregunta'],
                        textAlign: TextAlign.left,
                        style: TextStyle(
                          color: SECONDARY_TEXT,
                          fontSize: 16,
                        )
                      ),
                    ),
                    SizedBox(height: 5),
                    InputCustom(
                      cont: openQuest.length < 0 ? TextEditingController() : openQuest[index],
                      icono: null,
                      labelText: null,
                      validate: (String val){
                        if(val.isEmpty){
                          return 'Se debe contestar la pregunta';
                        }
                        return null;
                      },
                      max: 100,
                    )
                  ],
                ),
              );
            }
            
          },
        ),
      );
    }else if(snapshot.hasError){
      return Center(
        child: Text('Error al traer las preguntas.'),
      );
    }

    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          SizedBox(
            child: CircularProgressIndicator(),
            width: 60,
            height: 60,
          ),
          const Padding(
            padding: EdgeInsets.only(top: 16),
            child: Text('Obteniendo preguntas...'),
          )
        ]
      ),
    );
  },
);

}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    快速浏览一下,我认为问题出在这一行

    cont: openQuest.length < 0 ? TextEditingController() : openQuest[index],
    

    您已经创建了openQuest,并且只向列表中添加了一项。但就你的情况而言

    itemBuilder: (BuildContext context, int index){
                if(snapshot.data[index]['tipo_pregunta'] == 2){
    

    任何value 除了 2 之外,index 都被传递到 else 部分,它可能大于 openQuest 的长度,而您的 openquest 列表只有一个元素...尝试将其更改为喜欢openQuest[openQuest.length - 1]

    【讨论】:

    • 当我写 cont:openQuest.length
    猜你喜欢
    • 2021-08-02
    • 2021-06-16
    • 2020-10-07
    • 2019-07-25
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2021-01-01
    • 2021-10-06
    相关资源
    最近更新 更多