RangeError (index): Invalid value: Not in inclusive range 0..13: 14 Flutter

时间:2020-12-23 03:08:12

标签: android flutter dart controller textfield

有人帮我吗?我是初学者。我正在尝试从文本字段中获取控制器编号。为此,我尝试将字符转换为 int。注意:在文本字段中,用户将输入最多三位数的数字 出现此错误: RangeError (index): Invalid value: Not in inclusive range 0..13: 14

validate(textController)
  {
    List textCode = List();
    List messageInCode = List();
    int validateRepeticions;
    var stringText = textController;

    for (var b = 0; b < stringText.length; b++)
    {
      textCode.insert(b, stringText[b]);
    }

    validateRepeticions = textCode.length;
    print(validateRepeticions);
    int g = 0;
    int k = 0;
    
    do 
    {
      
      bool comma = true;
      List tryToParseInt = List();
      int d = 0;// 'd' is responsible for identifying the positional value of a digit
      int a = 1;// 'a' increment values to k
      int c = 0;// 'c' defines the positions used in tryToParseInt
      int completeNumber;

        tryToParseInt.insert(c, int.tryParse(textCode[k]));

        if (tryToParseInt[c] == null)
        {
          validateRepeticions--;
        }
        else
        {
          d++;
          c++;
          do
          {
            tryToParseInt.insert(c, int.tryParse(textCode[k+a]));

            if (tryToParseInt[c] == null)
            {
              completeNumber = tryToParseInt[0];
              messageInCode.insert(g, completeNumber);
              g++;
              comma = false;
              validateRepeticions -= 2;
            }
            else
            {
              d++;
              a++;
              c++;
              tryToParseInt.insert(c, int.tryParse(textCode[k+a]));

              if (tryToParseInt[c] == null)
              {
                completeNumber = tryToParseInt[0]*10 + tryToParseInt[1];
                messageInCode.add(completeNumber);
                g++;
                comma = false;
                validateRepeticions -= 3;
                d++;
              }
              else
              {
                d++;
                completeNumber = tryToParseInt[0]*100 + tryToParseInt[1]*10 + tryToParseInt[2];
                messageInCode.add(completeNumber);
                g++;
                comma = false;
                validateRepeticions -= 3;
              }
            }
          } while (comma);
        }
        d++;
        k += d;
    } while (validateRepeticions >= 0);
  }

更新代码

validate(textEditingController) {
  int validateRepeticions = textEditingController.text.length;
  List textString = textEditingController.text.split('');
  List messageInCode = List();
  int k = 0;

  do {
    bool comma = true;
    List tryToParseInt = List();
    int d = 0; // 'd' is responsible for identifying the value of a number that has already been verified
    int a = 1; // 'a' increment values to k
    int c = 0; // 'c' defines the positions used in tryToParseInt
    int completeNumber;

    tryToParseInt.insert(c, int.tryParse(textString[k]));

    if (tryToParseInt[c] == null) {
      validateRepeticions--;
    } else {
      d++; //1
      c++; //1
      do {
        tryToParseInt.insert(c, int.tryParse(textString[k + a]));

        if (tryToParseInt[c] == null) {
          completeNumber = tryToParseInt[0];
          messageInCode.add(completeNumber);
          comma = false;
          validateRepeticions -= 2;
        } else {
          d++; //2
          a++; //2
          c++; //2
          tryToParseInt.insert(c, int.tryParse(textString[k + a]));

          if (tryToParseInt[c] == null) {
            completeNumber = tryToParseInt[0] * 10 + tryToParseInt[1];
            messageInCode.add(completeNumber);
            comma = false;
            validateRepeticions -= 3;
            d++;
          } else {
            d++;
            completeNumber = tryToParseInt[0] * 100 + tryToParseInt[1] * 10 + tryToParseInt[2];
            messageInCode.add(completeNumber);
            comma = false;
            validateRepeticions -= 3;
          }
        }
      } while (comma);
    }
    d++;
    k += d;
  } while (validateRepeticions > 0);
}

现在几乎可以工作了,但仍然出现错误: '_addFromInteger' 方法在 null 上被调用。 接收器:空 尝试调用:_addFromInteger(0)

validate(textEditingController) {
  int validateRepeticions = textEditingController.text.length;
  List textString = textEditingController.text.split('');
  List messageInCode = List();
  int k = 0;
  messageInCode.clear();

  do {
    bool comma = true;
    List tryToParseInt = List();
    int d = 0; // 'd' is responsible for identifying the positional value of a digit
    int a = 0; // 'a' increment values to k
    int c = 0; // 'c' defines the positions used in tryToParseInt
    int completeNumber;

    if (k < textEditingController.text.length) {
      tryToParseInt.insert(c, int.tryParse(textString[k]));

      if (tryToParseInt[c] == null) {
        validateRepeticions--;
      } else {
        d++; //1 these comments are examples
        c++; //1
        a++; //1

        do {
          if ((k + a) < textEditingController.text.length) {
            tryToParseInt.insert(c, int.tryParse(textString[k + a]));

            if (tryToParseInt[c] == null) {
              completeNumber = tryToParseInt[0];
              messageInCode.add(completeNumber);
              comma = false;
              validateRepeticions -= 2;
            } else {
              d++; //2
              a++; //2
              c++; //2

              if ((k + a) < textEditingController.text.length) {
                tryToParseInt.insert(c, int.tryParse(textString[k + a]));

                if (tryToParseInt[c] == null) {
                  completeNumber = tryToParseInt[0] * 10 + tryToParseInt[1];
                  messageInCode.add(completeNumber);
                  comma = false;
                  validateRepeticions -= 3;
                  d++;
                } else {
                  d++;
                  completeNumber = tryToParseInt[0] * 100 + tryToParseInt[1] * 10 + tryToParseInt[2];
                  messageInCode.add(completeNumber);
                  comma = false;
                  validateRepeticions -= 3;
                }
              } else {
                completeNumber = tryToParseInt[0] * 10 + tryToParseInt[1];
                messageInCode.add(completeNumber);
                comma = false;
                validateRepeticions -= 3;
                d++;
              }
            }
          } else {
            completeNumber = tryToParseInt[0];
            messageInCode.add(completeNumber);
            comma = false;
            validateRepeticions -= 2;
          }
        } while (comma);
      }
    } else {
      validateRepeticions--;
    }
    d++;
    k += d;
  } while (validateRepeticions > 0 && k < textEditingController.text.length);
}

2 个答案:

答案 0 :(得分:0)

textCode.insert(b, stringText[b]);替换textCode.add(stringText[b]);

答案 1 :(得分:0)

在您的函数中,我假设参数 textControllerTextEditingController。在这种情况下,您需要使用 textController.text.length

检查长度

要从字符串创建字符列表,您只需要使用 split() 而不是创建新列表并遍历字符串。例如:textController.text.split('')