Another pure dart package for masked text. Implemented as TextInputFormtter Seems to be composable and universal.

Getting Started

There are two properties to pass into constuructor:

  1. mask (not named);
  2. escapeChar - if you need to change the default one ('_')

And useful method getEscapedString. TextController will return masked value So it's hand converter.

With this piece of code:

import 'package:mask_formatter/mask_formatter.dart';

class App extends StatefulWidget {
  AppState createState() => new AppState();

class AppState extends State<App> {
  final maskFormatter = MaskTextInputFormatter('+1 (___) ___-__-__');

  String inputValue = '';
  String unmaskedInputValue = '';
  _onTextChange(String s) {
    setState(() {
      inputValue = s;
      unmaskedInputValue = maskFormatter.getEscapedString(s);

  Widget build(BuildContext context) => 
      title: 'Flutter masked input',
      home: Scaffold(
        body: TextField(
          key: widget.testEnv.textFieldKey,
          onChanged: _onTextChange,
          inputFormatters: [
            decoration: InputDecoration(
              hintText: '+1 (___) ___-__-__'

You'll get quite good looking, functional and composable way to solve the issue (at least nicer than here).

Happy coding!