Flutter表单构建插件glade_forms的使用
Flutter表单构建插件glade_forms的使用
Glade Forms 提供了一种统一的方式定义可重用的表单输入,并支持流畅的API来定义输入验证器和翻译功能。以下是如何在Flutter应用中使用 glade_forms
插件的详细步骤和示例代码。
🚀 开始使用
首先,您需要在您的项目中添加 glade_forms
依赖项。在 pubspec.yaml
文件中添加如下内容:
dependencies:
flutter:
sdk: flutter
glade_forms: ^最新版本号
然后运行 flutter pub get
来安装依赖。
创建模型类
创建一个持有 GladeInputs 的模型类。例如:
class _Model extends GladeModel {
late GladeInput<String> name;
late GladeInput<int> age;
late GladeInput<String> email;
@override
List<GladeInput<Object?>> get inputs => [name, age, email];
@override
void initialize() {
name = GladeInput.stringInput(inputKey: 'name');
age = GladeInput.intInput(value: 0, useTextEditingController: true, inputKey: 'age');
email = GladeInput.stringInput(
validator: (validator) => (validator..isEmail()).build(),
inputKey: 'email'
);
super.initialize();
}
}
使用 GladeFormBuilder
接下来,使用 GladeFormBuilder
将模型连接到标准的Flutter表单及其输入组件:
import 'package:flutter/material.dart';
import 'package:glade_forms/glade_forms.dart';
class Example extends StatelessWidget {
const Example({super.key});
@override
Widget build(BuildContext context) {
return GladeFormBuilder.create(
create: (context) => _Model(),
builder: (context, model, _) => Padding(
padding: const EdgeInsets.all(32),
child: Form(
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
children: [
TextFormField(
controller: model.name.controller,
validator: model.name.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Name'),
),
TextFormField(
controller: model.age.controller,
validator: model.age.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Age'),
),
TextFormField(
controller: model.email.controller,
validator: model.email.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Email'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: model.isValid ? () {} : null,
child: const Text('Save'),
),
],
),
),
),
);
}
}
✨ 特性
GladeInput
每个表单输入由 GladeInput<T>
实例表示,其中 T
是输入持有的值类型。您可以为每个输入定义验证器、翻译错误消息等功能。
验证
通过 ValidatorFactory
方法如 notNull()
、satisfy()
等部分定义验证规则。例如,定义一个整数值必须大于或等于18的验证规则:
ageInput = GladeInput.create(
validator: (v) => (v
..notNull()
..satisfy(
(value) => value >= 18,
devError: (_, __) => 'Value must be greater or equal to 18',
key: _ErrorKeys.ageRestriction,
))
.build(),
value: 0,
valueConverter: GladeTypeConverters.intConverter,
);
翻译
每个验证错误可以被翻译。提供 translateError
函数以根据需要翻译错误信息。例如:
translateError: (error, key, devMessage, {required dependencies}) {
if (key == _ErrorKeys.ageRestriction) return LocaleKeys.ageRestriction_under18.tr();
if (error.isConversionError) return LocaleKeys.ageRestriction_ageFormat.tr();
return devMessage;
}
示例 Demo
完整示例代码如下:
import 'package:flutter/material.dart';
import 'package:glade_forms/glade_forms.dart';
// 模型类
class _Model extends GladeModel {
late GladeInput<String> name;
late GladeInput<int> age;
late GladeInput<String> email;
@override
List<GladeInput<Object?>> get inputs => [name, age, email];
@override
void initialize() {
name = GladeInput.stringInput(inputKey: 'name');
age = GladeInput.intInput(value: 0, useTextEditingController: true, inputKey: 'age');
email = GladeInput.stringInput(
validator: (validator) => (validator..isEmail()).build(),
inputKey: 'email'
);
super.initialize();
}
}
// 主应用类
class ExampleApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Glade Forms Example')),
body: Example(),
),
);
}
}
// 表单页面
class Example extends StatelessWidget {
const Example({super.key});
@override
Widget build(BuildContext context) {
return GladeFormBuilder.create(
create: (context) => _Model(),
builder: (context, model, _) => Padding(
padding: const EdgeInsets.all(32),
child: Form(
autovalidateMode: AutovalidateMode.onUserInteraction,
child: Column(
children: [
TextFormField(
controller: model.name.controller,
validator: model.name.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Name'),
),
TextFormField(
controller: model.age.controller,
validator: model.age.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Age'),
),
TextFormField(
controller: model.email.controller,
validator: model.email.textFormFieldInputValidator,
decoration: const InputDecoration(labelText: 'Email'),
),
const SizedBox(height: 10),
ElevatedButton(
onPressed: model.isValid ? () {} : null,
child: const Text('Save'),
),
],
),
),
),
);
}
}
void main() {
runApp(ExampleApp());
}
以上是一个完整的 Flutter 应用程序示例,展示了如何使用 glade_forms
插件来构建和验证表单。希望这对您有所帮助!
更多关于Flutter表单构建插件glade_forms的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单构建插件glade_forms的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于Flutter表单构建插件glade_forms
的使用,以下是一个简单的代码示例,展示了如何利用该插件来创建一个基本的表单。请注意,由于glade_forms
可能是一个特定社区或项目中的插件(并非官方广泛认可的Flutter插件),以下示例基于假设的插件API设计。如果实际插件的API有所不同,请根据插件的官方文档进行调整。
首先,确保你的pubspec.yaml
文件中已经添加了glade_forms
依赖:
dependencies:
flutter:
sdk: flutter
glade_forms: ^x.y.z # 替换为实际版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个使用glade_forms
插件创建表单的示例代码:
import 'package:flutter/material.dart';
import 'package:glade_forms/glade_forms.dart'; // 假设插件的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Glade Forms Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: FormScreen(),
);
}
}
class FormScreen extends StatefulWidget {
@override
_FormScreenState createState() => _FormScreenState();
}
class _FormScreenState extends State<FormScreen> {
final _formKey = GlobalKey<FormState>();
late Map<String, dynamic> formData;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Glade Forms Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
children: <Widget>[
// 使用GladeForms插件提供的组件构建表单
GladeTextFormField(
name: 'name',
label: 'Name',
validator: (value) {
if (value == null || value.isEmpty) {
return 'Name is required';
}
return null;
},
),
GladeEmailFormField(
name: 'email',
label: 'Email',
validator: (value) {
if (value == null || !value.contains('@')) {
return 'Please enter a valid email address';
}
return null;
},
),
GladePasswordFormField(
name: 'password',
label: 'Password',
validator: (value) {
if (value == null || value.length < 6) {
return 'Password must be at least 6 characters long';
}
return null;
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () {
if (_formKey.currentState!.validate()) {
formData = _formKey.currentState!.fields.values
.map((field) => MapEntry(field.key, field.value))
.cast<String, dynamic>();
// 在这里处理表单数据,比如发送到服务器
print('Form Data: $formData');
}
},
child: Text('Submit'),
),
],
),
),
),
);
}
}
// 假设GladeTextFormField, GladeEmailFormField, 和 GladePasswordFormField 是 glade_forms 插件提供的组件
// 这些组件的具体实现和API可能有所不同,请参考插件的官方文档
注意:
- 上面的代码示例假设
glade_forms
插件提供了GladeTextFormField
、GladeEmailFormField
和GladePasswordFormField
等组件。实际插件可能提供不同的组件或API。 glade_forms
插件的具体安装和使用方法,请参考其官方文档或GitHub仓库。- 如果
glade_forms
插件不存在或API不同,你可能需要使用其他表单构建插件,如flutter_form_builder
,或者手动构建表单。
希望这个示例能帮助你开始使用glade_forms
插件构建Flutter表单。如果有任何特定的问题或需要进一步的帮助,请随时提问。