Flutter表单字段插件my_formfield的使用

Flutter表单字段插件my_formfield的使用

本包提供了一个可定制且详细的TextFormField小部件,用于在Flutter中创建复杂的表单,并内置了验证和错误处理功能。

特性

  • 可定制的输入装饰
  • 内置验证和错误处理

安装

在你的pubspec.yaml文件中添加以下依赖项:

dependencies:
  my_formfield: ^latest_version

然后,在终端中运行flutter pub get

使用

要使用MyFormField,首先导入该包并创建一个实例,指定所需的属性:

import 'package:my_formfield/my_formfield.dart';

// 创建一个带有标签的密码输入框
MyFormField(
  isLabel: true,
  inputLabel: 'Password',
  label: 'Password',
  inputHint: 'Enter password',
  obscureText: true,
  prefixIcon: const Icon(Icons.lock_outline),
  suffixIcon: const Icon(Icons.visibility),
  border: OutlineInputBorder(
    borderRadius: BorderRadius.circular(12),
  ),
),

示例代码

下面是一个完整的示例代码,展示了如何使用MyFormField来创建一个包含全名、电子邮件和密码输入框的表单。

import 'package:flutter/material.dart';
import 'package:my_formfield/my_formfield.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 const MaterialApp(
      home: Example(),
    );
  }
}

class Example extends StatelessWidget {
  const Example({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('My FormField'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.min,
            children: [
              // 全名输入框
              MyFormField(
                isLabel: true,
                label: 'Full name',
                labelStyle: const TextStyle(fontWeight: FontWeight.w700),
                inputHint: 'Enter full name',
                prefixIcon: const Icon(Icons.person_outline),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(12),
                ),
              ),
              const SizedBox(height: 20),

              // 邮箱输入框
              MyFormField(
                isLabel: true,
                label: 'Email',
                labelSpacing: 12,
                inputHint: 'Enter email address',
                prefixIcon: const Icon(Icons.alternate_email),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(12),
                ),
              ),
              const SizedBox(height: 20),

              // 密码输入框
              MyFormField(
                inputLabel: 'Password',
                label: 'Password',
                inputHint: 'Enter password',
                obscureText: true,
                prefixIcon: const Icon(Icons.lock_outline),
                suffixIcon: const Icon(Icons.visibility),
                border: OutlineInputBorder(
                  borderRadius: BorderRadius.circular(12),
                ),
              ),
              const SizedBox(height: 40),

              // 注册按钮
              ElevatedButton(
                onPressed: () {
                  // 执行操作
                },
                style: ElevatedButton.styleFrom(
                    minimumSize: const Size(double.infinity, 60),
                    backgroundColor: Colors.blueAccent,
                    foregroundColor: Colors.white,
                    shape: ContinuousRectangleBorder(
                      borderRadius: BorderRadius.circular(12),
                    )),
                child: const Text('Sign Up'),
              )
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter表单字段插件my_formfield的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter表单字段插件my_formfield的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


my_formfield 是一个自定义的 Flutter 表单字段插件,用于简化表单字段的创建和管理。以下是如何使用 my_formfield 插件的基本步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 my_formfield 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  my_formfield: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 导入包

在你的 Dart 文件中导入 my_formfield 包:

import 'package:my_formfield/my_formfield.dart';

3. 使用 MyFormField

MyFormField 是一个自定义的表单字段组件,可以包含标签、输入框、验证逻辑等。以下是一个简单的使用示例:

import 'package:flutter/material.dart';
import 'package:my_formfield/my_formfield.dart';

class MyForm extends StatefulWidget {
  [@override](/user/override)
  _MyFormState createState() => _MyFormState();
}

class _MyFormState extends State<MyForm> {
  final _formKey = GlobalKey<FormState>();
  String _name = '';
  String _email = '';

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('My Form'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: <Widget>[
              MyFormField(
                labelText: 'Name',
                hintText: 'Enter your name',
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter your name';
                  }
                  return null;
                },
                onSaved: (value) {
                  _name = value!;
                },
              ),
              SizedBox(height: 20),
              MyFormField(
                labelText: 'Email',
                hintText: 'Enter your email',
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter your email';
                  }
                  if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value)) {
                    return 'Please enter a valid email';
                  }
                  return null;
                },
                onSaved: (value) {
                  _email = value!;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    _formKey.currentState!.save();
                    // 处理表单数据
                    print('Name: $_name, Email: $_email');
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: MyForm(),
  ));
}
回到顶部