Flutter自定义输入字段插件customized_input_field的使用

Flutter自定义输入字段插件customized_input_field的使用

特性

Image

此自定义输入字段是对Flutter文本字段的修改版本。

  • 可定制的边框:支持下划线和外边框类型。
  • 图标:轻松添加起始和结束图标。
  • 验证:内置验证支持。
  • 自动填充:支持自动填充提示。
  • 自定义样式:丰富的文本、光标和装饰样式选项。
  • 可编辑和可点击状态:字段可以设置为可编辑或只读模式。
  • 输入格式化:支持文本输入格式化。
  • 响应式布局:使用sizer实现响应式布局。

依赖项

开始使用

pubspec.yaml文件中添加依赖:

dependencies:
  ...
  customized_input_field: ^0.0.1

使用示例

以下是一个简单的使用示例:

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

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Customized Input Field Example')),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: CustomizedInputField(
            // 输入字段的标题
            heading: 'Username',
            // 提示文字
            hintText: 'Enter your username',
            // 文本控制器
            controller: TextEditingController(),
            // 起始图标
            startIcon: const Icon(Icons.person),
            // 结束图标
            endIcon: const Icon(Icons.check),
            // 结束图标点击事件
            onEndIconClicked: () {
              print('End icon clicked');
            },
            // 边框类型(下划线或外边框)
            borderType: BorderType.outline,
            // 输入字段背景颜色
            inputFieldFillColor: Colors.grey[200],
            // 边框颜色
            borderColor: Colors.blue,
            // 光标颜色
            cursorColor: Colors.red,
          ),
        ),
      ),
    );
  }
}
1 回复

更多关于Flutter自定义输入字段插件customized_input_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,自定义输入字段可以通过创建一个自定义的TextFieldTextFormField来实现。你可以根据需求定制输入字段的外观、行为和验证逻辑。以下是一个简单的示例,展示如何创建一个自定义输入字段插件CustomizedInputField

1. 创建自定义输入字段插件

首先,创建一个新的Dart文件,例如customized_input_field.dart,并定义一个CustomizedInputField类。

import 'package:flutter/material.dart';

class CustomizedInputField extends StatelessWidget {
  final TextEditingController controller;
  final String labelText;
  final String hintText;
  final bool obscureText;
  final FormFieldValidator<String>? validator;
  final ValueChanged<String>? onChanged;

  const CustomizedInputField({
    Key? key,
    required this.controller,
    required this.labelText,
    this.hintText = '',
    this.obscureText = false,
    this.validator,
    this.onChanged,
  }) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return TextFormField(
      controller: controller,
      obscureText: obscureText,
      decoration: InputDecoration(
        labelText: labelText,
        hintText: hintText,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(8.0),
        ),
        filled: true,
        fillColor: Colors.grey[200],
      ),
      validator: validator,
      onChanged: onChanged,
    );
  }
}

2. 使用自定义输入字段插件

在你的Flutter应用中使用CustomizedInputField插件。例如,在main.dart中:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Customized Input Field Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: CustomizedInputFieldDemo(),
    );
  }
}

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

class _CustomizedInputFieldDemoState extends State<CustomizedInputFieldDemo> {
  final _formKey = GlobalKey<FormState>();
  final _usernameController = TextEditingController();
  final _passwordController = TextEditingController();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Customized Input Field Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              CustomizedInputField(
                controller: _usernameController,
                labelText: 'Username',
                hintText: 'Enter your username',
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter your username';
                  }
                  return null;
                },
              ),
              SizedBox(height: 16.0),
              CustomizedInputField(
                controller: _passwordController,
                labelText: 'Password',
                hintText: 'Enter your password',
                obscureText: true,
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter your password';
                  }
                  return null;
                },
              ),
              SizedBox(height: 24.0),
              ElevatedButton(
                onPressed: () {
                  if (_formKey.currentState!.validate()) {
                    // Perform some action
                    print('Username: ${_usernameController.text}');
                    print('Password: ${_passwordController.text}');
                  }
                },
                child: Text('Submit'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _usernameController.dispose();
    _passwordController.dispose();
    super.dispose();
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!