Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 状态更改后,TextFromField将丢失值_Flutter_Dart_Flutter Dependencies_Flutter Animation - Fatal编程技术网

Flutter 状态更改后,TextFromField将丢失值

Flutter 状态更改后,TextFromField将丢失值,flutter,dart,flutter-dependencies,flutter-animation,Flutter,Dart,Flutter Dependencies,Flutter Animation,当状态更改时,TextFromField将丢失其值 这是完整的代码 我怎样才能解决这个问题 问题在于如何创建TextEditingController。每次调用构建方法时,都会创建新的TextEditingController 您要做的是在_MyHomePageState类的顶部创建3个TextEditingController变量。也不需要在dart中使用新关键字 类_MyHomePageState扩展状态{ 最终_formKey=GlobalKey; TextEditingControlle

当状态更改时,TextFromField将丢失其值

这是完整的代码

我怎样才能解决这个问题


问题在于如何创建TextEditingController。每次调用构建方法时,都会创建新的TextEditingController

您要做的是在_MyHomePageState类的顶部创建3个TextEditingController变量。也不需要在dart中使用新关键字

类_MyHomePageState扩展状态{ 最终_formKey=GlobalKey; TextEditingController name控制器=TextEditingController; TextEditingController CGPACController=TextEditingController; TextEditingController crController=TextEditingController; 把这些传给你的海关卡

孩子:海关卡 键:唯一键, 索引:索引,, cgpa:cgpa, namecontroller:namecontroller, cgpacontroller:cgpacontroller, 控制室控制器:控制室控制器, 希望这有帮助

编辑:

我不知道如何创建拉取请求,但我为您做了一些更改,并在iOS sim卡上进行了测试

我所做的:

将详细信息重命名为课程 将CusomCard转换为状态完整小部件 现在只有一个课程对象被传递到CustomCard dismissable现在根据课程获得一个密钥。 将控制器移动到CustomCard 修改了CGPA中的一些代码,使其能够正常工作 类_MyHomePageState扩展状态{ 最终_formKey=GlobalKey; @凌驾 小部件构建上下文上下文{ 返回脚手架 正文:安全区 子:堆栈 儿童:[ 柱 儿童:[ 扩大 子:Consumerbuilder:上下文,cgpa,\u{ 报税表 键:_formKey, 子项:ListView.builder 滚动方向:轴垂直, 收缩膜:对, itemCount:cgpa.courses.length, itemBuilder:BuildContext上下文,int索引{ 可驳回的回报 关键字:Keycgpa.getKeyValueindex, onDismissed:方向{ cgpa.removeindex; printcgpa.courses.length; }, 孩子:海关卡 课程:cgpa.getCourseindex, , ; }, , ; }, , ], , 排列 对齐:对齐。右下角, 孩子:填充 填充:常量边集。全部15.0, 子:浮动操作按钮 子项:IconIcons.add, 按下按钮:{ Provider.ofcontext,listen:false.add; //printcgpa.details.length; //cgpa.details[indexs]=详细信息; }, , , , ], , , 浮动操作按钮:大纲按钮 按下按钮:{ //对于cgpa中的var项目。详细信息{ //printitem.credit; // } }, 孩子:填充 填充:常量边集。对称水平:30, 孩子:文本计算, , 形状:新的RoundedRectangleBorder borderRadius:新的borderRadius.circular30.0, , , 浮动ActionButtonLocation:浮动ActionButtonLocation.centerFloat, ; } } 海关卡

类CustomCard扩展StatefulWidget{ 自定义卡{@required this.course}; 期末课程; @凌驾 _CustomCardState createState=>\u CustomCardState; } 类_CustomCardState扩展状态{ 文本编辑控制器名称控制器; 文本编辑控制器CGPAC控制器; 文本编辑控制器; @凌驾 无效初始状态{ super.initState; nameController=TextEditingControllertext:widget.course.name; cgpaController=文本编辑控制器 text:widget.course.gpa==null?:widget.course.gpa.toString; crController=文本编辑控制器 文本:widget.course.credit==null ? :widget.course.credit.toString; } @凌驾 小部件构建上下文上下文{ 回程卡 孩子:填充 填充:const EdgeInsets.all8.0, 孩子:排 儿童:[ 扩大 弹性:3, 子项:TextFormField 控制器:名称控制器, 装饰:InputDecorationlabelText:课程名称, 一旦改变:价值{ widget.course.name=值; }, , , 大小盒子 宽度:10, , 扩大 子项:TextFormField 控制器:cgpaController, 键盘类型:TextInputType.number, 装饰:InputDecorationlabelText:GPA, 一旦改变:价值{ //印刷价值; widget.course.gpa=double.parsevalue; }, 验证器:值{ 如果double.parsevalue>4&&double.parsevalue<0{ 返回“不能超过4”; } 返回null; }, , , 大小盒子 宽度:10, , 扩大 子项:TextFormField 控制员:CRC控制员, 键盘类型:TextInputType.number, 装饰:InputDecorationlabelText:CREDIT, 一旦改变:价值{ widget.course.credit=double.parsevalue; }, 验证器:值{ 如果value.isEmpty{ 返回“不能为空”; } 返回null; }, , , ], , , ; } } CGPA

使用ChangeNotifier类CGPA{ 地图课程=新地图; var指数=0; 加{ 课程[索引]=课程; 索引++; 通知听众; } 删除列表索引{ courses.removecourses.keys.toList[listIndex]; 通知听众; } 字符串getKeyValueint listIndex=>courses.keys.toList[listIndex].toString; Course getCourseint listIndex=>courses.values.toList[listIndex]; } 班级课程{ 课程{this.credit,this.gpa,this.name}; 字符串名; 双重信用; 双gpa; @凌驾 串到串{ 返回'Course{name:$name,credit:$credit,gpa:$gpa}'; } }
但是如何将不同的控制器传递给每个文本字段?按照您的步骤操作后,所有字段都将获得相同的控制器@SASaharukh,您必须将您的CustomCard设置为statefull小部件,并在CustomCard的state类中而不是在CustomCard的父级中设置控制器。@SASaharukh哪个问题?状态重置,或者所有字段都获得相同的控制器?设置状态如果您发送一个pull请求@Er,那就太好了