ListView中TextField值全部相同:传递前两索引值计算为何失效?
所有TextField共用同一个TextEditingController
你在ListView.builder中给每一个TextField都绑定了同一个_costtextController,只要这个控制器的文本内容发生变化,所有输入框都会同步显示相同的值,这是导致所有输入框内容一致的直接原因。存储输入值的Map每次调用都会被重置
在takeCostingValue方法里,每次触发输入事件都会新建一个空的quantitiesMap:Map<String, int> quantities = {};,这意味着每次输入只能保存当前输入的那个值,之前输入的内容会被完全清空,根本无法同时存储第一个和第二个输入框的数值,自然无法正确计算两者的乘积。错误的类型转换与控制器更新逻辑
你将计算得到的int类型乘积result直接强制转换为TextEditingController类型:_costtextController = result as TextEditingController;,这是完全错误的类型转换操作。正确的做法应该是设置控制器的text属性(比如_costtextController.text = result.toString();),但即便修正这一步,由于所有输入框共享同一个控制器的问题,所有输入框依然会显示相同内容。索引处理与乘积逻辑存在漏洞
一方面你将int类型的索引转为String类型传递,但更关键的是,当前逻辑不管用户输入的是第几个输入框,都直接取totalObj[0] * totalObj[1]计算乘积,既没有判断是否已经输入了前两个值,也没有区分哪些输入框用于输入乘数、哪些用于显示乘积,逻辑完全混乱。
内容的提问来源于stack exchange,提问作者Marimuthu Kannayiram

