TextFormField onSave 和onChange

2024-05-25 16:04

本文主要是介绍TextFormField onSave 和onChange,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:用户在注册发送验证码的时候,发现一直获取不了_username

原因:_username 用的是 TextFormField onSave 由于这个时候表单并未提交,未触发onSave事件,所以一直取不到_username的值。

  submit() {var state = this._formKey.currentState;if (state != null && state.validate()) {state.save();Future(() async {return OauthService.loginVerCode(_username, _validateCodeId, _validateCode);}).then((value) =>{if (value) {Navigator.pushNamed(context, '/')}});}}

在Flutter的TextFormField中,onSaved和onChange是两个重要的回调函数,它们分别用于处理表单字段的保存逻辑和实时输入变化。下面是这两个属性的详细说明及如何使用它们:
1. onSaved
用途: 当调用FormState.save()方法时(通常在表单提交时),会触发onSaved回调。这个回调适合用来验证用户输入并持久化数据到模型对象中。
参数: 接受一个ValueSetter<T>类型的参数,其中T是TextFormField的controller的text属性的类型(通常是String)。这个回调允许你直接对表单字段的值进行操作或存储。
示例:

TextFormField(onSaved: (value) {// 这里的"value"就是用户输入的内容,你可以在这里进行数据验证和保存操作// 例如:_username = value; // 假设_username是类的一个成员变量,用于存储用户名},
)

2. onChanged
用途: 每当TextFormField中的文本发生变化时,就会调用onChanged回调。这个回调适用于实时响应用户输入,比如进行实时验证或更新UI。
参数: 接受一个ValueChanged<String>类型的参数,即每当文本变化时都会调用的函数,传入最新的文本值。
示例:

TextFormField(onChanged: (value) {// "value"是当前输入框的最新值,可以在此处执行实时验证或更新其他UI元素// 例如显示字符计数或即时反馈输入是否有效setState(() {_inputText = value; // 更新状态,以便可能影响UI的其他部分});},
)

综合使用
通常,onChanged用于提供即时反馈或动态处理,而onSaved则在表单提交时用于数据验证和最终保存。结合两者,可以创建交互性好且健壮的表单体验。

TextFormField(onChanged: (value) {// 实时处理逻辑setState(() {_username = value;});},onSaved: (value) {// 表单提交时的处理逻辑_finalUsername = value; // 确保数据有效后保存到最终变量},
)

记得在表单的RaisedButton或ElevatedButton的onPressed中调用_formKey.currentState.save();来触发所有onSaved回调。这里_formKey是与Form widget关联的GlobalKey<FormState>。

这篇关于TextFormField onSave 和onChange的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001974

相关文章

input文本框没有onchange事件,可以通过下面两种方法实现当input内容改变时触发事件

文本框内容改变是触发事件 jsp: <input type="text" class="currentPage"> input文本框没有onchange事件,可以通过下面两种方法实现当input内容改变时触发事件 方法一: $(".currentPage").on('input',function(e){      alert("TextChanged!"

EasyUI——numberspinner的onChange事件

之前写了篇博客叫:EasyUI——Combobox的onChange事件,今天这篇博客,我们就来谈一谈选课页面的另一个EasyUI控件——numberspinner,说英文可能陌生了,也叫数值微调器。    样子是张酱紫的:                   html的样式代码: <input id="ss" class="easyui-numberspinner" valu

EasyUI——Combobox的onChange事件

首先说一下我的业务需求:选课的时候,我们涉及到了设置容量,在这里,我们设置了三种方式:百分比,数值和等于剩余容量。界面如图: 现在有一个问题,就是选择了课程之后,无论如何修改数值的combobox,下面的datagrid的值都不会变。当然,理所当然,我就想到了combobox的onchange()事件,于是有了代码 <select id="txtPercent" class="ea

input元素的oninput事件和onchange事件

1、input元素上绑定事件的三种方式:第一种:直接在元素标签上添加oninput属性,属性值为处理事件函数的调用<input type="text" id="input" οninput="handleInput()"></input> function handleInput() { // 处理事件代码 } 第二种:获取input元素,然后在元素对象上添加oninput属性,属性值为函数,

oniput事件和onchange事件

oniput事件和onchange事件的区别是: input   在val改变时就触发input事件; change 在失去焦点时触发input事件;  jquery也有对应的 change() 支持onchange事件的HTML标签 <input type="text">, <select>, <textarea> // toUpperCase() 转为大写 另外

oninput、onchange和onpropertychange事件的区别

1、onchange事件与onpropertychange事件的区别:  onchange事件在内容改变(两次内容有可能还是相等的)且失去焦点时触发;onpropertychange事件却是实时触发,即每增加或删除一个字符就会触发,通过js改变也会触发该事件,但是该事件IE专有。  2、oninput事件与onpropertychange事件的区别:

JavaScript HTML DOM 事件 onchange onmouseover onmouseout

onchange 事件会在域的内容改变是发生 支持该事件的标签 <input type = "text">,<select>,<textarea> <html><head><script>function upperCase(x){var y = document.getElementById(x).value;document.getElementById(x).value = y

select的onchange事件问题

转自:http://blog.sina.com.cn/s/blog_5f7b8c2c0100l7yf.html 一、onChange事件只有在值改变时才可触发,所以必须在每一次选择时(尤其第一次)保证选择的值是改变的! 所以<select name="inv_payee" id="ECS_INVPAYEE" οnchange="show_payee();" style="bord

JavaScript中的onchange、oninput以及onpropertychange

一、onchange事件属性 onchange事件可以用于<input>元素和<textarea></textarea>元素,表示当内容改变并且失去焦点后触发,onchange也可以用于<select></seclet>元素,当改变选择的项时会触发此事件。 但是要注意,在js代码中改变input的value值或者改变<textarea>框中的值,或者改变<select>的选中项(这个可以通过给

js onchange事件,以及setAttribute,getAttribute

onchange为form表单中select标签发生改变时产生的事件,从                            <select style="width:160px" class="select2" name="mix_{$val.sign}" οnchange="gradeChange(this)" >                             <opt