Flutter表单输入插件input_form_field的使用
Flutter表单输入插件input_form_field的使用
插件简介
input_form_field
是一个围绕默认 TextFormField
小部件的包装器,支持所有Flutter支持的平台。它提供了许多增强功能,如标签文本不会与边框重叠、默认的空值验证、动态高度支持、密码可见性处理等。
更新日志 (0.0.4)
- 移除
disabledBorder
参数,现在由BorderType.none
处理。 - 移除 默认56px高度,支持动态高度。
- 移除
isPasswordField
参数,新增Password
类型,支持自定义显示/隐藏图标。 - 修复 密码显示/隐藏UI逻辑。
功能特性
- 标签文本不会与边框重叠。
- 支持默认的空值验证 (
isNullOrEmpty
)。 - 支持底部外边距。
- 支持动态高度。
- 简化的密码可见性处理。
- 主题支持。
- 支持所有平台。
安装
请从 pub.dev 安装最新版本。
使用方法
在Dart代码中引入 input_form_field
:
import 'package:input_form_field/input_form_field.dart';
示例代码
以下是一个完整的示例demo,展示了如何使用 input_form_field
插件创建不同类型的输入字段。
import 'package:flutter/material.dart';
import 'package:input_form_field/input_form_field.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: "Input Form Field Example",
home: DemoScreen(),
);
}
}
class DemoScreen extends StatelessWidget {
DemoScreen({Key? key}) : super(key: key);
final TextEditingController _controller = TextEditingController();
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Demo")),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
children: [
/// 基本输入字段
InputFormField(
textEditingController: _controller,
bottomMargin: 10,
),
/// 自定义顶部标签
InputFormField(
textEditingController: _controller,
label: const Padding(
padding: EdgeInsets.only(bottom: 5),
child: Text("Custom Label"),
),
borderRadius: BorderRadius.zero,
fillColor: Colors.grey.shade300,
bottomMargin: 10,
borderType: BorderType.none,
),
/// 标准 - 外边框
InputFormField(
textEditingController: _controller,
labelText: "Standard - Outlined Border",
hintText: "Hint Text",
bottomMargin: 10, // 可选
),
/// 无边框 - 填充背景
InputFormField(
textEditingController: _controller,
labelText: "No Border - Filled",
hintText: "Hint Text",
fillColor: Colors.black12,
borderType: BorderType.none,
bottomMargin: 10, // 可选
),
/// 默认密码字段
InputFormField(
textEditingController: _controller,
labelText: "Default Password",
hintText: "*****",
password: EnabledPassword(),
bottomMargin: 10, // 可选
),
/// 自定义默认密码字段
InputFormField(
textEditingController: _controller,
labelText: "Custom Default Password",
hintText: "*****",
obscuringCharacter: "*",
password: EnabledPassword(
showPasswordIcon: const Icon(
Icons.add,
color: Colors.amber,
),
hidePasswordIcon: const Icon(
Icons.visibility_off_sharp,
color: Colors.amber,
),
),
bottomMargin: 10, // 可选
),
/// 自定义样式1
InputFormField(
textEditingController: _controller,
labelText: "Custom",
labelTextStyle: const TextStyle(fontSize: 25),
hintText: "Hint Text",
hintTextStyle: const TextStyle(fontSize: 18),
borderColor: Colors.deepOrange,
borderRadius: BorderRadius.circular(10),
bottomMargin: 10,
// 可选
floatingLabelBehavior: FloatingLabelBehavior.always,
),
/// 自定义样式2
InputFormField(
textEditingController: _controller,
labelText: "Custom 2",
labelTextStyle: const TextStyle(color: Colors.deepOrange),
hintText: "Hint Text",
hintTextStyle: const TextStyle(color: Colors.deepOrangeAccent),
borderType: BorderType.outlined,
borderColor: Colors.deepOrange,
bottomMargin: 10,
// 可选
borderRadius: BorderRadius.circular(10),
),
/// 自定义样式3 (带前缀图标)
InputFormField(
textEditingController: _controller,
prefix: const Icon(Icons.mail),
labelText: "Email",
hintText: "abc@email.com",
borderType: BorderType.outlined,
bottomMargin: 10, // 可选
),
/// 自定义样式4 (带前后缀图标)
InputFormField(
textEditingController: _controller,
prefix: const Icon(Icons.mail),
labelText: "Email",
hintText: "abc@email.com",
suffix: const Icon(Icons.info),
borderType: BorderType.outlined,
bottomMargin: 10, // 可选
),
],
),
),
),
);
}
}
更多关于Flutter表单输入插件input_form_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter表单输入插件input_form_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 input_form_field
插件的 Flutter 代码示例。input_form_field
插件并不是一个官方插件,但假设它提供了一些自定义的表单输入字段,我们可以基于常见的表单输入字段编写一个类似的示例代码。
在 Flutter 中,通常我们会使用 TextField
组件来创建表单输入字段。然而,为了模拟一个自定义的 input_form_field
插件的使用,我们可以创建一个自定义的表单字段组件。
假设我们有一个自定义的表单字段组件 CustomInputField
,它的用法类似于 TextField
。以下是如何实现和使用这个组件的代码示例:
1. 创建自定义输入字段组件 custom_input_field.dart
import 'package:flutter/material.dart';
class CustomInputField extends StatefulWidget {
final String label;
final ValueChanged<String> onChanged;
final String initialValue;
const CustomInputField({
Key? key,
required this.label,
required this.onChanged,
this.initialValue = '',
}) : super(key: key);
@override
_CustomInputFieldState createState() => _CustomInputFieldState();
}
class _CustomInputFieldState extends State<CustomInputField> {
late TextEditingController _controller;
@override
void initState() {
super.initState();
_controller = TextEditingController(text: widget.initialValue);
_controller.addListener(() {
widget.onChanged(_controller.text);
});
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(widget.label),
SizedBox(height: 8),
TextField(
controller: _controller,
decoration: InputDecoration(
border: OutlineInputBorder(),
),
),
],
);
}
}
2. 使用自定义输入字段组件 main.dart
import 'package:flutter/material.dart';
import 'custom_input_field.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _email = '';
String _password = '';
void _submitForm() {
print('Email: $_email');
print('Password: $_password');
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Form Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: <Widget>[
CustomInputField(
label: 'Email',
onChanged: (value) => setState(() => _email = value),
),
SizedBox(height: 16),
CustomInputField(
label: 'Password',
onChanged: (value) => setState(() => _password = value),
initialValue: _password, // In a real app, avoid setting password initially
),
SizedBox(height: 24),
ElevatedButton(
onPressed: _submitForm,
child: Text('Submit'),
),
],
),
),
);
}
}
解释
-
custom_input_field.dart
:我们创建了一个自定义的CustomInputField
组件,它接受一个标签、一个值改变回调和一个初始值。内部使用TextField
来显示输入框,并通过TextEditingController
管理文本输入。 -
main.dart
:在主应用程序中,我们使用CustomInputField
来创建两个输入字段:一个用于电子邮件,一个用于密码。当用户输入文本时,onChanged
回调会更新状态中的相应变量。最后,我们有一个提交按钮,点击后会打印出输入的电子邮件和密码。
这个示例展示了如何创建一个自定义的表单输入字段组件并在 Flutter 应用程序中使用它。虽然这不是一个真正的 input_form_field
插件的示例,但它演示了类似的概念和用法。如果你有一个具体的 input_form_field
插件,并希望获得更具体的代码示例,请提供更多关于该插件的信息。