Secure TextField
A Flutter package that provides a secure text field widget which blocks copy, paste, cut, and select all operations across iOS, Android, and web platforms.
Features
✅ Cross-platform support: Works on iOS, Android, and web browsers
✅ Comprehensive blocking: Prevents copy, paste, cut, and select all operations
✅ Keyboard shortcuts prevention: Blocks Ctrl+C/V/X/A and Cmd+C/V/X/A using Flutter's Shortcuts widget
✅ Context menu blocking: Disables right-click and long-press context menus with custom contextMenuBuilder
✅ Text selection disabled: Prevents text selection with enableInteractiveSelection: false
✅ All TextField features: Supports all standard TextField properties and callbacks
Getting started
Add the package to your pubspec.yaml
:
dependencies:
secure_textfield: ^1.0.0
Then run:
flutter pub get
Usage
Import the package and use SecureTextField
instead of the standard TextField
:
import 'package:flutter/material.dart';
import 'package:secure_textfield/secure_textfield.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SecureTextField(
decoration: InputDecoration(
labelText: 'Secure Input',
hintText: 'Copy/paste is blocked here',
border: OutlineInputBorder(),
),
onChanged: (value) {
print('Text changed: $value');
},
);
}
}
Password Field Example
SecureTextField(
obscureText: true,
decoration: InputDecoration(
labelText: 'Password',
prefixIcon: Icon(Icons.lock),
border: OutlineInputBorder(),
),
)
Multiline Example
SecureTextField(
maxLines: 4,
decoration: InputDecoration(
labelText: 'Comments',
hintText: 'Enter your comments here...',
border: OutlineInputBorder(),
alignLabelWithHint: true,
),
)
With Controller
final TextEditingController controller = TextEditingController();
SecureTextField(
controller: controller,
decoration: InputDecoration(
labelText: 'Controlled Input',
border: OutlineInputBorder(),
),
onSubmitted: (value) {
print('Submitted: $value');
},
)
Supported Properties
SecureTextField
supports all the same properties as Flutter's standard TextField
:
controller
: TextEditingController for managing textdecoration
: InputDecoration for stylingobscureText
: Hide text input (for passwords)maxLines
: Number of lines (1 for single line, null for unlimited)maxLength
: Maximum character countonChanged
: Callback when text changesonSubmitted
: Callback when user submitskeyboardType
: Type of keyboard to showtextInputAction
: Action button on keyboardstyle
: Text stylingtextAlign
: Text alignmentenabled
: Enable/disable the fieldautofocus
: Auto-focus on widget creationreadOnly
: Make field read-onlyfocusNode
: Custom focus management- And many more...
Platform-Specific Behavior
iOS & macOS
- Blocks Cmd+C, Cmd+V, Cmd+X, Cmd+A keyboard shortcuts
- Disables context menus through right-click/long-press
- Prevents text selection (enableInteractiveSelection is false)
Android & Windows/Linux
- Blocks Ctrl+C, Ctrl+V, Ctrl+X, Ctrl+A keyboard shortcuts
- Disables context menus through right-click/long-press
- Prevents text selection (enableInteractiveSelection is false)
Web
- Blocks both Ctrl and Cmd keyboard shortcuts
- Disables right-click context menu
- Prevents browser's built-in copy/paste functionality
Implementation Details
The package uses a unified approach across all platforms:
Shortcuts
widget to intercept and block keyboard combinationsListener
widget to detect and block right-click mouse events- Custom
contextMenuBuilder
that returns an empty widget enableInteractiveSelection: false
to prevent text selection
Example App
Check out the example app for a comprehensive demonstration of all features:
cd example
flutter run
Testing
The package includes comprehensive tests covering:
- Widget behavior and rendering
- Platform-specific functionality
- Keyboard shortcut blocking
- All TextField property support
- Edge cases and error scenarios
Run tests with:
flutter test
Test Coverage
Generate and view test coverage:
# Generate coverage report
flutter test --coverage
# View coverage in browser (requires lcov)
genhtml coverage/lcov.info -o coverage/html
open coverage/html/index.html
Coverage reports are automatically generated and uploaded to Codecov on every PR and push to main.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Commit Convention
This project uses Conventional Commits for automated changelog generation and version bumping. Please format your commit messages as:
<type>[optional scope]: <description>
Examples:
feat: add new validation feature
fix: resolve input focus issue
docs: update README with new examples
See .github/CONVENTIONAL_COMMITS.md for detailed guidelines.
Release Process
Releases are automated using Release Please:
- Commit changes using conventional commit format
- Push to main branch
- Release Please automatically creates a release PR with updated version and changelog
- When the release PR is merged, a new GitHub release is created
- The package can then be published to pub.flutter-io.cn (currently manual)
License
This project is licensed under the MIT License - see the LICENSE file for details.
Additional Information
- Issue Tracker: GitHub Issues
- Documentation: Check the API documentation for detailed information about all available properties and methods
- Changelog: See CHANGELOG.md for version history
Security Considerations
This package provides UI-level protection against copy/paste operations. For sensitive data:
- Use additional server-side validation
- Implement proper data encryption
- Consider using secure storage solutions
- Be aware that determined users may still find ways to extract data
The package is designed to prevent casual copy/paste operations and improve user experience, but should not be relied upon as the sole security measure for highly sensitive data.
Libraries
- secure_textfield
- Secure TextField Package