form表单的使用方法

2023-03-11 23:37:13 来源:网络

form表单的使用方法

flutter 表单Form使用示例

flutter提供一套表单校验框架Form,可以通过Form框架一步校验所有表单,非常方便,比较常用的用法是Form+TextFormField。

Form继承StatefulWidget,有一个widget 类型的child参数,证明Form是一个容器。

Form里还有一个validate方法,如下

一般通过GlobalKey来访问Form中validate方法,Form的validate方法用来校验所有Form里的FormField表单,validate方法返回值是bool类型,返回true表示所有表单校验成功;返回false表示有校验失败的表单;

TextFormField继承FormField,FormField后面源码分析会讲,所有Form可统一校验的表单都必须继承FormField,可以通过FormField自定义各种各样可校验表单,TextFormField只是FormField自定义表单中的一种。

表单校验必须实现的方法为validator,定义如下:

每个表单的校验规则都在validator里实现,通过返回值来判断是否校验成功。

1、用Form包在所有需要校验的表单最外层,如下:

2、将GlobalKey传给Form,用于调用Form里方法,如下:

3、将TextFormField传给Form容器,如下:

4、实现对应TextFormField的校验规则 ,如下:

5、最后调用Form校验所有表单方法validate,如下:

使用form表单进行前后台传值

例如通过提交表单进行更新操作,原生表单的写法如下:

方法1:

对应的controller中update action的传值是:

方法2:

对应的controller中update action的传值是:

方法3:

由于form中引用了@user这个实例变量,那么其中的

等价于方法2的写法,这时候就需要透过user去取值,传到后台的params其实是hash套user的hash的格式,

对应的controller中update action的传值是:

方法4.

和方法3不同在于@user是一个实例变量,而如果用 :user 则是指向user这个model进行增删改查,因此还可以写成:

这里我们用的是 f 去遍历form_for中每个字段,因此写法和上面三种原生的form表单略有不同

由于在form_for中指定了user这个model,因此我们需要透过user去取name,age的值,传到后台的params其实是hash套user的hash的格式,

对应的controller中update action的传值是:

1.params.permit(:name)这样的写法是只有一层,那么直接可以通过params[:name]来获取name的值;而params.require(:user).permit(:name)是有两层关系,需要通过params[:user][:name]才能获取name的值

2.使用f.text_field传值和input传值方式有所不同

(1)用input获取后台的值

(2)用f.text_field获取后台的值

两者的区别在于value=后面跟的是字符串"<%=@user.user_name%>",可以用字符串拼接的方法;而value: 后面不跟字符串而是直接用@user.user_name获取栏位中的内容

如果不确定传到后台的params是什么格式,那么可以使用pry加入断点来看

免责声明:内容来自网络,若侵犯您的权利,请在一个月内通知我们,会及时删除 @轻流