advanced_text_input_formatters_codespark 0.0.4
advanced_text_input_formatters_codespark: ^0.0.4 copied to clipboard
A Flutter package with advanced custom TextInputFormatters—simulate typing, block clipboard, allow only palindromes, enforce naming conventions and more.
import 'package:advanced_text_input_formatters_codespark/controllers/typing_delay_controller.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/camel_case_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/digits_only_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/kebab_case_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/mirror_text_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/no_paste_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/no_repeat_characters_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/only_alphabets_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/palindrome_only_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/pan_card_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/prevent_multiple_spaces_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/replace_whitespace_with_underscore_formatter.dart';
import 'package:advanced_text_input_formatters_codespark/formatters/snake_case_formatter.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Text Formatter Demo',
home: Scaffold(
appBar: AppBar(title: const Text('Formatter Playground')),
body: const Padding(
padding: EdgeInsets.all(16.0),
child: FormatterDemo(),
),
),
);
}
}
class FormatterDemo extends StatefulWidget {
const FormatterDemo({super.key});
@override
State<FormatterDemo> createState() => _FormatterDemoState();
}
class _FormatterDemoState extends State<FormatterDemo> {
final TextEditingController _controller = TextEditingController();
final typingController = TypingDelayController();
@override
Widget build(BuildContext context) {
final keyboardType = PanCardInputHelper.getKeyboardType(_controller.text);
return ListView(
children: [
const SizedBox(height: 20),
const Text('Pan Card Formatter'),
TextFormField(
key: ValueKey(keyboardType), // Rebuild on type change
controller: _controller,
decoration: const InputDecoration(
labelText: 'Enter PAN Card Number',
border: OutlineInputBorder(),
),
autofocus: true,
keyboardType: keyboardType,
inputFormatters: [PanCardInputHelper.formatter],
validator: (val) => PanCardInputHelper.validate(val ?? ''),
onChanged: (value) => setState(() {}),
),
const Text('Digits Only'),
TextField(inputFormatters: [DigitsOnlyFormatter()]),
const SizedBox(height: 20),
const Text('Input Mirror'),
TextField(inputFormatters: [MirrorTextFormatter()]),
const SizedBox(height: 20),
const Text('Prevent Repeat Characters'),
TextField(inputFormatters: [NoRepeatCharactersFormatter()]),
const SizedBox(height: 20),
const Text('Block Clipboard (no paste)'),
TextField(inputFormatters: [NoPasteFormatter()]),
const SizedBox(height: 20),
const Text('Only Palindromes'),
TextField(inputFormatters: [PalindromeOnlyFormatter()]),
const SizedBox(height: 20),
const Text('Only Alphabets'),
TextField(inputFormatters: [OnlyAlphabetsFormatter()]),
const SizedBox(height: 20),
const Text('CamelCase'),
TextField(inputFormatters: [CamelCaseFormatter()]),
const SizedBox(height: 20),
const Text('snake_case'),
TextField(inputFormatters: [SnakeCaseFormatter()]),
const SizedBox(height: 20),
const Text('kebab-case'),
TextField(inputFormatters: [KebabCaseFormatter()]),
const SizedBox(height: 20),
const Text('Whitespace → Underscores'),
TextField(inputFormatters: [WhitespaceToUnderscoreFormatter()]),
const SizedBox(height: 20),
const Text('Prevent multiple spaces'),
TextField(inputFormatters: [NoMultipleSpacesFormatter()]),
const SizedBox(height: 20),
const Text('Typing Delay (simulated typing)'),
TextField(
controller: typingController,
onChanged: (value) {
if (!typingController.text.endsWith(value.characters.last)) {
typingController.typeCharacter(value.characters.last);
}
},
),
],
);
}
}