Flutter表单管理插件flutter_formik的使用
Flutter 表单管理插件 flutter_formik 的使用
Flutter Formik 是一个受 React Formik 启发的 Flutter 表单管理库。它提供了一种简单直观的方式来处理表单状态、验证和提交操作。Flutter Formik 设计简单、灵活且可扩展,允许你在 Flutter 应用程序中构建复杂的表单而无需编写大量样板代码。它基于 form_validator 包来提供可自定义的验证规则和错误消息。
特性
- 简单声明式的 API 来管理表单状态
- 使用 form_validator 包支持内置验证功能,并可自定义验证规则
- 支持表单提交,可选异步操作
- 与 Flutter 的小部件树无缝集成
- 促进关注点分离和可重用性
安装
要在你的 Flutter 项目中使用 Flutter Formik,请在 pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter_formik: ^1.0.0
然后运行 flutter pub get
来安装包。
使用
以下是一个基本的使用示例:
import 'package:flutter/material.dart';
import 'package:flutter_formik/flutter_formik.dart';
import 'package:form_validator/form_validator.dart';
void main() {
runApp(const Demo());
}
class Demo extends StatelessWidget {
const Demo({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Formik Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: const Text('Flutter Formik Demo'),
),
body: Formik(
initialValues: {
'email': '',
'password': '',
},
validationSchema: {
'email': ValidationBuilder()
.required('Email is required')
.email('Email is not valid'),
'password': ValidationBuilder()
.required('Password is required')
.minLength(6, 'Password must be at least 6 characters'),
},
onSubmit: (payload, errors) {
if (errors.isNotEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(errors.values.first),
),
);
return;
}
UserModel user = UserModel.fromJson(payload);
// 发送用户对象到业务逻辑
// ...
},
child: (values, isValid, handleSubmit, handleReset, handleChange, errors) {
return Column(
children: [
TextField(
decoration: InputDecoration(
labelText: 'Email',
errorText: errors['email'],
),
onChanged: (value) {
handleChange('email', value);
},
),
TextField(
decoration: InputDecoration(
labelText: 'Password',
errorText: errors['password'],
),
onChanged: (value) {
handleChange('password', value);
},
),
ElevatedButton(
onPressed: () {
handleSubmit();
},
child: const Text('Submit'),
),
],
);
},
),
),
);
}
}
代码解释
-
导入必要的包:
import 'package:flutter/material.dart'; import 'package:flutter_formik/flutter_formik.dart'; import 'package:form_validator/form_validator.dart';
-
初始化应用:
void main() { runApp(const Demo()); }
-
创建应用主界面:
class Demo extends StatelessWidget { const Demo({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Formik Demo', theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: Scaffold( appBar: AppBar( backgroundColor: Theme.of(context).colorScheme.inversePrimary, title: const Text('Flutter Formik Demo'), ), body: Formik( // 初始化表单字段值 initialValues: { 'email': '', 'password': '', }, // 设置验证规则 validationSchema: { 'email': ValidationBuilder() .required('Email is required') .email('Email is not valid'), 'password': ValidationBuilder() .required('Password is required') .minLength(6, 'Password must be at least 6 characters'), }, // 处理表单提交 onSubmit: (payload, errors) { if (errors.isNotEmpty) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(errors.values.first), ), ); return; } UserModel user = UserModel.fromJson(payload); // 发送用户对象到业务逻辑 // ... }, // 构建表单组件 child: (values, isValid, handleSubmit, handleReset, handleChange, errors) { return Column( children: [ TextField( decoration: InputDecoration( labelText: 'Email', errorText: errors['email'], ), onChanged: (value) { handleChange('email', value); }, ), TextField( decoration: InputDecoration( labelText: 'Password', errorText: errors['password'], ), onChanged: (value) { handleChange('password', value); }, ), ElevatedButton( onPressed: () { handleSubmit(); }, child: const Text('Submit'), ), ], ); }, ), ), ); } }
更多关于Flutter表单管理插件flutter_formik的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单管理插件flutter_formik的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,flutter_formik
是一个用于 Flutter 的表单管理库,它提供了一种简洁的方式来处理表单状态、验证和提交。以下是一个简单的示例,展示如何使用 flutter_formik
来管理一个包含用户名和密码的登录表单。
首先,确保在你的 pubspec.yaml
文件中添加 flutter_formik
依赖:
dependencies:
flutter:
sdk: flutter
flutter_formik: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,创建一个简单的 Flutter 应用,并使用 flutter_formik
来管理表单。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_formik/flutter_formik.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Formik Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyFormScreen(),
);
}
}
class MyFormScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Formik Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: FormikProvider(
initValues: {
'username': '',
'password': '',
},
validationRules: {
'username': (value) =>
value!.isEmpty ? 'Username is required' : null,
'password': (value) =>
value!.isEmpty ? 'Password is required' : null,
},
child: FormikBuilder(
builder: (context, formik, setField) {
return Column(
children: [
TextFormField(
decoration: InputDecoration(labelText: 'Username'),
onChanged: (value) => setField('username', value),
validator: (value) => formik.errors['username'],
),
TextFormField(
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
onChanged: (value) => setField('password', value),
validator: (value) => formik.errors['password'],
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
final isValid = await formik.validate();
if (isValid) {
// 提交表单数据
print('Username: ${formik.values['username']}');
print('Password: ${formik.values['password']}');
// TODO: 在这里处理表单提交逻辑
}
},
child: Text('Submit'),
),
],
);
},
),
),
),
);
}
}
在这个示例中:
FormikProvider
用于初始化表单的值和验证规则。initValues
包含了表单的初始值。validationRules
定义了每个字段的验证逻辑。FormikBuilder
是一个构建器,它提供了对FormikState
的访问,允许我们获取表单的值和错误,并设置字段值。- 每个
TextFormField
的onChanged
回调使用setField
方法来更新表单状态。 validator
属性使用formik.errors
来显示验证错误。ElevatedButton
的onPressed
回调首先调用formik.validate()
来验证表单,如果验证通过,则处理表单提交逻辑。
这个示例展示了如何使用 flutter_formik
来管理表单状态、验证和提交,希望对你有帮助!