] TextFormField。 ( initialValue: "初始值" ), ], ); } } 通过TextFormField这个组件,轻松解决掉这个问题了。 问题2: TextField和TextFormField的区别? 问题虽然解决了,但是现在又有另外一个问题了: **问题2: ** TextField和TextFormField的区别是什么? 什么时候使用TextFormField? TextFormField: 例如制作一个表单,表单中有用户姓名,姓名必须包含@符号。这个时候就需要使用TextFormField这个组件 ? TextFormField TextFormField( autovalidateMode: AutovalidateMode.always, // 开启自动验证 decoration: const
二、Form 的核心组成(先记住) Flutter 表单由 三部分 组成: 1️⃣ Form 2️⃣ FormField(通常是 TextFormField) 3️⃣ GlobalKey 三、最简单的 Form 示例 Form( child: Column( children: [ TextFormField(), ElevatedButton( onPressed (表单专用输入框) 1️⃣ 基本写法 TextFormField( decoration: InputDecoration( hintText: '请输入用户名', border: 六、表单校验(核心功能) 1️⃣ 使用 validator TextFormField( decoration: InputDecoration( hintText: '请输入用户名', 九、Form 的常见使用场景 登录 / 注册 修改资料 地址填写 反馈提交 搜索筛选 十、新手最容易犯的错误 ❌ 使用 TextField 而不是 TextFormField ❌ 忘记绑定 Form key
Flutter表单基础在Flutter中,表单通常由Form组件和TextFormField组件构成。Form组件包裹TextFormField组件,用于管理表单的状态和验证。 dartForm( key: _formKey, // 用于跟踪表单状态 child: Column( children: <Widget>[ TextFormField( child: Text('Submit'), ), ], ),)封装表单组件为了封装表单,我们可以创建一个通用的表单组件,它接受一个字段列表,并根据这些字段生成对应的TextFormField ( key: _formKey, child: Column( children: widget.fields .map((field) => TextFormField 在Flutter中,表单封装涉及到Form和TextFormField的使用,以及自定义组件的创建。掌握这些技能,可以帮助开发者构建更加健壮和用户友好的移动应用。
override void dispose() { _usernameController.dispose(); super.dispose(); } 三、Form 与表单校验 1️⃣ Form + TextFormField final _formKey = GlobalKey<FormState>(); Form( key: _formKey, child: Column( children: [ TextFormField Form 包裹 → validator 无效 ❌ GlobalKey未定义 → validate 调用报错 ❌ 校验逻辑写在 onChanged → 每输入一次触发,不推荐 建议: 表单校验统一使用 TextFormField 你已经学会: TextField 输入控件基本用法 TextEditingController 获取和管理输入内容 Form + TextFormField 表单校验 提交表单与业务逻辑处理 校验必填、 正则等常用规则 到这里为止: 你的 App 已经可以收集用户输入并进行表单校验和提交了 ✅ 七、一句话总结 TextField 输入 TextEditingController 管理内容 Form + TextFormField
注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本:1.12.13+hotfix.5 Dart版本:2.7.0 Form、FormField、TextFormField是表单相关控件 FormField FormField是一个表单控件,此控件包含表单的状态,方便更新UI,通常情况下,我们不会直接使用FormField,而是使用TextFormField。 TextFormField TextFormField继承自FormField,是一个输入框表单,因此TextFormField中有很多关于TextField的属性,TextFormField的基本用法 : TextFormField( onSaved: (value){ print('$value'); }, autovalidate: false, validator: (String null:'账号最少6个字符'; }, ) TextFormField效果如下: ? onSaved是一个可选参数,当Form调用FormState.save时才会回调此方法。
[1240] 注意:无特殊说明,Flutter版本及Dart版本如下:Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Form、FormField、TextFormField FormField FormField是一个表单控件,此控件包含表单的状态,方便更新UI,通常情况下,我们不会直接使用FormField,而是使用TextFormField。 TextFormField TextFormField继承自FormField,是一个输入框表单,因此TextFormField中有很多关于TextField的属性,TextFormField的基本用法 : TextFormField( onSaved: (value){ print('$value'); }, autovalidate: false, validator: (String null:'账号最少6个字符'; }, ) TextFormField效果如下: [1240] onSaved是一个可选参数,当Form调用FormState.save时才会回调此方法。
8.0), child:Column( children: <Widget>[ TextFormField SizedBox( height: 20.0, ), TextFormField SizedBox( height: 20.0, ), TextFormField SizedBox( height: 20.0, ), TextFormField
Flutter 提供了两个开箱即用的文本框组件:TextField 和 TextFormField。 TextField TextField 是最常用的文本输入组件。 TextFormField 内部封装了一个 TextField 并被集成在表单组件 Form 中。 如果需要对文本输入进行验证或者需要与其他表单组件 FormField 交互联动,可以考虑使用 TextFormField。 a TextField or a TextFormField. 给 TextField 或 TextFormField 绑定 onChanged() 回调 每当文本内容改变时,回调函数会被触发。
在 Flutter中,Form和TextFormField是输入文本时非常有用的Widget。 我们如何在键盘上按“下一步”时,正确的移动输入焦点的呢? crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ // email TextFormField onEditingComplete: _node.nextFocus, ), // password TextFormField ), ), ); } } 通过添加 一个FocusScopeNode 和 FocusScope关联,通过使用_node.nextFocus就可以轻松地将焦点移动到下一个TextFormField
---- Form和TextFormField是在 Flutter 中输入文本时非常有用的小部件。 我们可以提供一种在键盘上按“下一步”时移动输入焦点的便捷方法吗? CrossAxisAlignment.stretch, children: <Widget>[ // email TextFormField onEditingComplete: _node.nextFocus, ), // password TextFormField
登录注册模块 登录注册模块主要涉及表单Form这个Widget,其中TextFormField使用TextEditingController进行控制,可以通过该类来获取对应TextFormField的数据 TextFormField( controller: _repasswordController, decoration: InputDecoration
Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ TextFormField '), ), ), ], ), ); } } 在这个例子中,创建了一个带有 GlobalKey 的表单,它包含一个 TextFormField
text_field_main.dart 文件 那么如果有个需求,在点击按钮的时候需要对输入的内容的合理性进行检测,当然可以通过 TextEditingController 的结果进行检测,但是还有个更加方便的方法,可以直接使用部件 TextFormField 来实现,不过需要我们在外层加一个 Form 部件,接下来,就要准备通过 TextFormField 来撸一个登录界面,但是这之前,前面有个坑需要先解决下 导入自定义的图标 在这之前,涉及到 Icon EdgeInsets.symmetric(vertical: 4.0), // 表单输入框,参数同 TextField 基本类似 child: TextFormField Padding( padding: const EdgeInsets.symmetric(vertical: 4.0), child: TextFormField )), ), ) ], )); } } 撸完界面后,可以试下登录效果,如果输入框的内容,和 TextFormField
child: Form( key: _formKey, child: Column( children: [ TextFormField '请输入用户名' : null, ), SizedBox(height: 10), TextFormField(
页面反馈与用户交互必学 到目前为止,你已经可以: 写动态页面(StatefulWidget + setState) 处理异步操作(Future / async / await) 表单校验(Form / TextFormField
这样,在 TextFormField 构建时,你可以指定自己需要的装饰。 到此,我们就实现了上面,输入过程中,浮层面板内容关键字高亮显示的效果。 该方法,返回 _AutocompleteField 组件,本质上也就是构建了一个 TextFormField 组件。
在Flutter中,我们可以通过Form和TextFormField组件来实现表单验证。validator函数用于检查用户输入是否符合预期,如果不符合,将显示错误信息,提供动态反馈给用户。
textEditingController, FocusNode focusNode, VoidCallback onFieldSubmitted) { return TextFormField
Widget类型 核心作用 常用场景 Text 文本展示 标题、描述、提示文字 Image 图片加载(本地/网络) 头像、轮播图、图标 ElevatedButton 带阴影的按钮 主要操作(提交、确认) TextFormField flex比例分配剩余空间); 示例(输入框+提交按钮): Row( children: [ Expanded( // 输入框占满剩余空间 flex: 3, child: TextFormField
同样的也需用使用Hero包裹,并且使用和login界面同样的tag 当然在这里例子中我们没有对用户输入的用户名和密码做校验,一般这个过程是服务端校验的,当然大家也可以根据自己的需要来做下校验 另外: TextFormField