Flutter表单管理插件stateful_form的使用
Flutter表单管理插件stateful_form的使用
简介
stateful_form 是一个用于简化 Flutter 表单验证和状态管理的插件。它可以帮助开发者轻松地处理表单输入的校验逻辑,并提供友好的错误提示。
以下是一个完整的使用示例,展示如何使用 stateful_form 插件来管理表单。
示例代码
import 'package:flutter/material.dart';
import 'package:stateful_form/stateful_form.dart';
// 定义用户名字段
class UsernameField extends StatefulFormTextField {
const UsernameField({required super.controller});
@override
String? validate() {
return value.isNotEmpty ? null : '用户名不能为空';
}
}
// 定义密码字段
class PasswordField extends StatefulFormTextField {
const PasswordField({required super.controller});
@override
String? validate() {
if (value.isEmpty) {
return '密码不能为空';
}
if (value.length > 20) {
return '密码太长了';
}
if (value.length < 8) {
return '密码太短了';
}
return null;
}
}
// 主应用页面
class Example extends StatefulWidget {
const Example({super.key});
@override
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
final _usernameController = TextEditingController();
final _passwordController = TextEditingController();
final _form = StatefulForm();
@override
void initState() {
super.initState();
_form.fields = [
UsernameField(controller: _usernameController),
PasswordField(controller: _passwordController),
];
}
@override
void dispose() {
_usernameController.dispose();
_passwordController.dispose();
_form.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
int count = 0;
return Scaffold(
appBar: AppBar(title: const Text('登录示例')),
body: SingleChildScrollView(
padding: const EdgeInsets.all(20),
child: StatefulFormBuilder(
form: _form,
builder: (context, state, child) {
return Column(
children: [
// 用户名输入框
TextField(
controller: _usernameController,
decoration: InputDecoration(
labelText: '用户名',
errorText: state.errorText<UsernameField>(),
),
),
// 密码输入框
TextField(
controller: _passwordController,
obscureText: true,
decoration: InputDecoration(
labelText: '密码',
errorText: state.errorText<PasswordField>(),
),
),
// 登录按钮
Container(
padding: const EdgeInsets.only(top: 20),
width: 200,
child: ElevatedButton(
onPressed: () {
// 验证表单
if (!_form.validate()) {
return;
}
// 模拟密码错误逻辑
if (_passwordController.text == '00000000') {
_form.setError<PasswordField>('密码错误');
return;
}
// 第一次提交时设置通用错误
if (count++ == 0) {
_form.setError('服务器异常,请稍后再试');
return;
}
// 成功提示
showDialog<void>(
context: context,
builder: (context) => const AlertDialog(
title: Text('登录成功'),
actions: [CloseButton()],
),
);
},
child: const Text('登录'),
),
),
// 显示全局错误
if (state.errorText() != null) ...[
const SizedBox(height: 10),
Text(
state.errorText()!,
textAlign: TextAlign.center,
style: const TextStyle(color: Colors.red),
),
]
],
);
},
),
),
);
}
}
使用步骤详解
1. 安装插件
在 pubspec.yaml 文件中添加依赖:
dependencies:
stateful_form: ^0.1.0
然后运行 flutter pub get。
2. 创建自定义表单字段
通过继承 StatefulFormTextField 来创建自定义表单字段,并实现 validate() 方法以定义校验逻辑。
例如:
class UsernameField extends StatefulFormTextField {
const UsernameField({required super.controller});
@override
String? validate() {
return value.isNotEmpty ? null : '用户名不能为空';
}
}
3. 初始化表单
在 StatefulWidget 中初始化 StatefulForm 并添加字段:
final _form = StatefulForm();
@override
void initState() {
super.initState();
_form.fields = [
UsernameField(controller: _usernameController),
PasswordField(controller: _passwordController),
];
}
4. 表单验证
调用 _form.validate() 方法进行表单验证:
if (!_form.validate()) {
return;
}
可以针对特定字段验证:
_form.validate([PasswordField]);
5. 错误渲染
使用 StatefulFormBuilder 渲染表单状态和错误信息:
StatefulFormBuilder(
form: _form,
builder: (context, state, child) {
return Column(
children: [
TextField(
controller: _usernameController,
decoration: InputDecoration(
labelText: '用户名',
errorText: state.errorText<UsernameField>(),
),
),
TextField(
controller: _passwordController,
obscureText: true,
decoration: InputDecoration(
labelText: '密码',
errorText: state.errorText<PasswordField>(),
),
),
],
);
},
)
6. 手动设置错误
可以通过 _form.setError() 方法手动设置错误信息:
_form.setError<PasswordField>('密码错误');
_form.setError('服务器异常,请稍后再试');
更多关于Flutter表单管理插件stateful_form的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单管理插件stateful_form的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
stateful_form 是一个用于 Flutter 的表单管理插件,它可以帮助开发者更轻松地管理和验证表单数据。以下是如何使用 stateful_form 插件的简单指南。
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 stateful_form 依赖:
dependencies:
flutter:
sdk: flutter
stateful_form: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get 来获取依赖。
2. 基本用法
2.1 创建表单
stateful_form 提供了一个 StatefulForm 组件,你可以将表单字段包裹在其中。这个组件会自动管理表单的状态和验证。
import 'package:flutter/material.dart';
import 'package:stateful_form/stateful_form.dart';
class MyForm extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Stateful Form Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: StatefulForm(
child: Column(
children: [
StatefulTextField(
name: 'username',
decoration: InputDecoration(labelText: 'Username'),
validator: (value) {
if (value.isEmpty) {
return 'Username is required';
}
return null;
},
),
SizedBox(height: 16),
StatefulTextField(
name: 'password',
obscureText: true,
decoration: InputDecoration(labelText: 'Password'),
validator: (value) {
if (value.isEmpty) {
return 'Password is required';
}
if (value.length < 6) {
return 'Password must be at least 6 characters';
}
return null;
},
),
SizedBox(height: 24),
ElevatedButton(
onPressed: () {
if (StatefulForm.of(context).validate()) {
// 表单验证通过,处理表单数据
final formData = StatefulForm.of(context).value;
print(formData);
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
}

