flutter_code_input_fields 1.0.0
flutter_code_input_fields: ^1.0.0 copied to clipboard
Split box-style text fields controlled by a single controller
Code Input Fields #
A Flutter widget that provides split box-style text input fields controlled by a single controller. Perfect for verification codes, PIN inputs, and other multi-digit input scenarios.
Features #
- 🔢 Split Box Input: Individual input fields that work as a single unit
- 🎯 Auto Focus Management: Automatic focus movement between fields
- 📱 Flexible Configuration: Customizable styling, spacing, and behavior
- ⚡ Performance Optimized: Efficient rendering with border caching
- 🎨 Customizable Design: Border colors, widths, radius, and spacing
- ⌨️ Keyboard Support: Configurable keyboard types and input formatters
Demo #
CodeInputFields Demo 1
|
CodeInputFields Demo 2
|
Installation #
Flutter pub add:
flutter pub add flutter_code_input_fields
copied to clipboard
or
Add this package to your pubspec.yaml:
dependencies:
flutter_code_input_fields: ^1.0.0
copied to clipboard
Then run:
flutter pub get
copied to clipboard
Usage #
Basic Usage #
import 'package:flutter_code_input_fields/flutter_code_input_fields.dart';
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
final TextEditingController _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return CodeInputFields(
length: 6,
controller: _controller,
onChanged: (value) {
print('Entered code: $value');
},
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
copied to clipboard
Custom Styling #
CodeInputFields(
length: 4,
controller: _controller,
onChanged: (value) => print('Code: $value'),
activeBorderColor: Colors.blue,
enabledBorderColor: Colors.grey,
borderWidth: 2.0,
borderRadius: 8.0,
spacing: 12.0,
boxWidth: 50.0,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
),
)
copied to clipboard
Numeric Input #
CodeInputFields(
length: 6,
controller: _controller,
onChanged: (value) => print('PIN: $value'),
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
],
activeBorderColor: Colors.green,
enabledBorderColor: Colors.grey.shade300,
)
copied to clipboard
Auto Focus #
CodeInputFields(
length: 8,
controller: _controller,
onChanged: (value) => print('Code: $value'),
autofocus: true,
cursorColor: Colors.blue,
)
copied to clipboard
How It Works #
- Single Controller: All input fields are managed by one
TextEditingController - Auto Focus Movement: When 2 characters are entered in a field (except the last), focus automatically moves to the next field
- Backward Navigation: When a field is cleared, focus moves to the previous field
- Performance Optimization: Border styles are cached to prevent unnecessary rebuilds
Parameters #
| Parameter | Description | Type | Required | Default |
|---|---|---|---|---|
length |
Number of input fields (1-8) | int |
✅ | - |
controller |
TextEditingController that manages all fields | TextEditingController |
✅ | - |
onChanged |
Callback function when text changes | void Function(String)? |
✅ | - |
keyboardType |
Keyboard type for input fields | TextInputType? |
❌ | null |
autofocus |
Whether to auto-focus on the first field | bool? |
❌ | false |
style |
Text style for input fields | TextStyle? |
❌ | null |
inputFormatters |
List of input formatters | List<TextInputFormatter>? |
❌ | null |
activeBorderColor |
Border color when field has content | Color? |
❌ | Colors.blue |
enabledBorderColor |
Border color when field is empty | Color? |
❌ | Colors.grey |
borderWidth |
Width of the border | double? |
❌ | 2.0 |
borderRadius |
Border radius for rounded corners | double? |
❌ | 0.0 |
spacing |
Spacing between input fields | double? |
❌ | 8.0 |
boxWidth |
Width of each input field | double? |
❌ | 40.0 |
cursorColor |
Color of the text cursor | Color? |
❌ | null |
Contributing #
Contributions are welcome! Please feel free to submit a Pull Request.
License #
This project is licensed under the MIT License - see the LICENSE file for details.
Support #
If you encounter any issues or have questions, please file an issue on the GitHub repository.