首页 > 解决方案 > “int”类型不是“String”类型的子类型,但一切都是整数

问题描述

我知道它看起来是重复的,但事实并非如此,其他主题的答案与我在这里所面临的完全不同。

我真的不知道发生了什么,一切都是整数,但仍然适用于字符串......

问题出现在 FOR LOOP 上(如果我打印 somaModulos,它会正确显示数学,只有当我在 FOR LOOP 内打印,如果我在 FOR 外部打印,它会带来下面的错误)。

后来的一切都没有执行,因为问题“类型'int'不是'String'类型的子类型”

      var textModulos = modulosNecessarios.toString();

      int somaModulos = 0;
      void recalcularModulos() {
        print(modulosConfig);
        print(int.parse(modulosConfig[0][0]) * int.parse(modulosConfig[0][1])); //THIS WORKS

        for (var i = 0; i < modulosConfig.length; i++) { // THIS DONT WORK
          somaModulos +=
              int.parse(modulosConfig[i][0]) * int.parse(modulosConfig[i][1]);
        }

        /*
        setState(() {
          textModulos = (modulosNecessarios - somaModulos).toString();
        });
        */
      }

打印结果:

[[20, 3, colonial, retrato], [0, 0, colonial, retrato]]

60

标签: flutterdart

解决方案


好吧,它看到 textField onChange 上的数组类型值发生了变化。

即使文本输入类型是一个数字,如果我把它放在 onChange 方法上,它也会变成字符串,我没有注意到它(我是飞镖的新手)。

列表中的项目始终使用 int 值创建,但在过程中间更改为字符串...

              TextField(
                keyboardType: TextInputType.number,
                decoration: InputDecoration(labelText: "Quantidade de módulos"),
                style: TextStyle(fontSize: 18),
                controller: _controllerQnt,
                onChanged: (String value) {
                  setState(() {
                    modulosConfig[itemUtilized][0] = value;
                  });
                },

为了使它工作,我改变了数组增量:

modulosConfig.insert(indexStart, [0, 0, 'colonial', 'retrato']);

到:

modulosConfig.insert(indexStart, ['0', '0', 'colonial', 'retrato']);

或者更改 TextField onChange 方法的整数。

我选择将增量更改为所有字符串,然后在 FOR LOOP 上对其进行解析。


推荐阅读