Flutter文本输入优化插件perfect_text_field的使用

Flutter文本输入优化插件perfect_text_field的使用

Perfect TextField

PerfectTextField 是一个为 Flutter 提供的多功能且可定制化的文本字段包。它基于 TextFormField 构建,并集成了自动完成和自定义文本控制器等附加功能,适用于高级文本编辑场景。

特性

PerfectTextField

  • 自定义文本控制器:集成 PerfectTextController 以增强对文本编辑和状态管理的控制。
  • 自动完成功能:支持通过 PerfectAutoCompleteTextField 实现自动完成。
  • 灵活的文本输入:允许通过如 cursorColorcursorRadius 等参数进行定制,以更好地集成到用户界面中。
  • 事件处理:对外部点击的自定义事件处理,使表单更具互动性。
  • 样式选项:提供了丰富的样式选项,包括默认和可定制的文本样式和装饰。

PerfectTextController

  • 自定义文本控制器:使用 PerfectTextController 来增强对文本编辑、焦点管理和状态更新的控制,支持通过 get 进行响应式编程。
  • 响应式状态管理:利用 Rx 变量来响应地管理和观察文本字段的内容和焦点状态的变化。
  • 高级焦点控制:提供如 selectAllunfocusrequestFocus 等方法,可以程序化地控制焦点和文本选择。
  • 自动完成功能:无缝集成到 PerfectTextField 中。
  • 事件处理:增强了对文本和焦点变化的事件处理能力,以及外部点击的自定义动作。

PerfectRawAutocomplete

  • 可定制的选项:完全可定制的自动完成选项,可以根据应用需求进行样式和处理方式的调整。
  • 响应式用户输入处理:根据用户输入动态生成建议。
  • 键盘导航:支持通过键盘操作在建议之间导航。
  • 选择回调:提供处理建议选择的回调。
  • 高级文本处理:与自定义的 PerfectTextController 集成,以获得更精细的文本输入和焦点管理控制。

DecimalNumberFormatter

  • 值约束:允许设置输入的最小值和最大值。
  • 小数精度:控制允许的小数点后的数字位数。
  • 智能校正:如果输入超过最大小数长度,可选地替换最后一位数字,确保连续输入而无需手动删除字符。
  • 灵活的输入处理:防止不希望的输入,如前导零和不正确的十进制点位置。

开始使用

要使用此包,请在 pubspec.yaml 文件中添加 perfect_text_field 作为依赖项。

dependencies:
  flutter:
    sdk: flutter
  perfect_text_field: 1.0.0

PerfectTextField 使用

以下是如何在 Flutter 应用程序中使用 PerfectTextField 的简单示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Perfect TextField Example')),
        body: Center(
          child: PerfectTextField(
            controller: PerfectTextController(
              onTextChange: (text) {
                print("Text changed: $text");
              },
              onFocusChange: (hasFocus) {
                print("Field has focus: $hasFocus");
              },
            ),
            inputFormatters: [
              DecimalNumberFormatter(
                min: 1.0,
                max: 100.0,
                decimalLength: 2,
              )
            ],
            keyboardType: TextInputType.numberWithOptions(decimal: true),
          ),
        ),
      ),
    );
  }
}

PerfectRawAutocomplete 使用

以下是 PerfectRawAutocomplete 的使用示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Perfect Raw Autocomplete Example')),
        body: PerfectRawAutocomplete<String>(
          optionsBuilder: (TextEditingValue textEditingValue) {
            // 假设你的逻辑来生成自动完成建议
            return ['Apple', 'Banana', 'Cherry'].where((String option) {
              return option.contains(textEditingValue.text.toLowerCase());
            });
          },
          fieldViewBuilder: (BuildContext context, PerfectTextController textController, VoidCallback onFieldSubmitted) {
            return TextFormField(
              controller: textController.textController,
              onFieldSubmitted: (String value) => onFieldSubmitted(),
            );
          },
          optionsViewBuilder: (BuildContext context, PerfectAutocompleteOnSelected<String> onSelected, Iterable<String> options, void Function(Size?) onSizeChange) {
            return Material(
              elevation: 4.0,
              child: ListView(
                children: options.map((String option) {
                  return GestureDetector(
                    onTap: () {
                      onSelected(option);
                    },
                    child: ListTile(
                      title: Text(option),
                    ),
                  );
                }).toList(),
              ),
            );
          },
          onSelected: (String selection) {
            print('You just selected $selection');
          },
        ),
      ),
    );
  }
}

更多关于Flutter文本输入优化插件perfect_text_field的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文本输入优化插件perfect_text_field的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


perfect_text_field 是一个用于优化 Flutter 应用中的文本输入体验的插件。它提供了多种功能,如自动格式化、输入验证、自动完成、输入限制等,帮助开发者更轻松地创建高效且用户友好的文本输入字段。

以下是如何使用 perfect_text_field 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 perfect_text_field 插件的依赖:

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

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

2. 导入插件

在你的 Dart 文件中导入 perfect_text_field 插件:

import 'package:perfect_text_field/perfect_text_field.dart';

3. 使用 PerfectTextField

PerfectTextFieldperfect_text_field 插件提供的一个小部件,你可以像使用普通的 TextField 一样使用它,但它提供了更多的功能和定制选项。

基本用法

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入内容',
  onChanged: (value) {
    print('输入的内容: $value');
  },
);

自动格式化

你可以使用 inputFormatters 参数来为输入字段添加格式化规则。例如,格式化电话号码:

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入电话号码',
  inputFormatters: [
    FilteringTextInputFormatter.digitsOnly, // 只允许数字
    LengthLimitingTextInputFormatter(10),   // 限制长度为10
  ],
);

输入验证

你可以使用 validator 参数来添加输入验证逻辑。例如,验证电子邮件格式:

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入电子邮件',
  validator: (value) {
    if (value == null || value.isEmpty) {
      return '请输入电子邮件';
    }
    if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value)) {
      return '请输入有效的电子邮件';
    }
    return null;
  },
);

自动完成

你可以使用 suggestions 参数来提供自动完成选项:

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入城市',
  suggestions: ['北京', '上海', '广州', '深圳'],
);

其他定制选项

PerfectTextField 还提供了许多其他定制选项,如 maxLengthkeyboardTypeobscureText 等,你可以根据需要来使用它们。

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入密码',
  obscureText: true, // 隐藏输入内容
  maxLength: 20,     // 最大长度限制
  keyboardType: TextInputType.text, // 键盘类型
);

4. 处理输入结果

你可以通过 TextEditingController 来获取输入内容,或者通过 onChanged 回调来监听输入变化。

TextEditingController _controller = TextEditingController();

PerfectTextField(
  controller: _controller,
  hintText: '请输入内容',
  onChanged: (value) {
    print('输入的内容: $value');
  },
);

// 获取输入内容
String inputText = _controller.text;

5. 自定义样式

PerfectTextField 允许你自定义文本输入字段的样式,如边框、背景颜色、文本样式等。

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入内容',
  decoration: InputDecoration(
    border: OutlineInputBorder(
      borderRadius: BorderRadius.circular(10.0),
    ),
    filled: true,
    fillColor: Colors.grey[200],
    hintStyle: TextStyle(color: Colors.grey),
  ),
);

6. 处理焦点

你可以通过 focusNode 参数来管理输入字段的焦点。

FocusNode _focusNode = FocusNode();

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入内容',
  focusNode: _focusNode,
);

// 手动控制焦点
_focusNode.requestFocus();

7. 处理键盘动作

你可以通过 onSubmitted 回调来处理用户在键盘上按下“完成”按钮时的动作。

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入内容',
  onSubmitted: (value) {
    print('用户提交的内容: $value');
  },
);

8. 其他功能

PerfectTextField 还提供了许多其他功能,如 onTaponEditingCompletetextCapitalization 等,你可以根据需要来使用它们。

PerfectTextField(
  controller: TextEditingController(),
  hintText: '请输入内容',
  onTap: () {
    print('用户点击了输入字段');
  },
  textCapitalization: TextCapitalization.sentences, // 自动大写
);
回到顶部