🙆

[Flutter]3桁ごとに「,」を追加するTextInputFormatter

2023/04/16に公開

はじめに

TextFieldやTextFormFieldで入力された数字をコンマを付けて表示したいことがあると思います
例)1200→1,200

そんな時に、使えるTextInputFormatterを作りました。コピペで使えます。このクラスをInputFormattersプロパティに入れて使ってください。

コード

import 'package:flutter/services.dart';

class CommaFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
    TextEditingValue oldValue,
    TextEditingValue newValue,
  ) {
    final text = newValue.text;
    if (text.isEmpty) {
      return newValue;
    }
    final value = int.tryParse(text.replaceAll(',', ''));
    if (value == null) {
      return oldValue;
    }
    // 3桁ごとにカンマを挿入 例:1234567 → 1,234,567
    newValue = TextEditingValue(
      text: value.toString().replaceAllMapped(
        RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'),
        (Match m) {
          return '${m[1]},';
        },
      ),
    );
    // カーソルを末尾に移動
    newValue = newValue.copyWith(
      selection: TextSelection.collapsed(
        offset: newValue.text.length,
      ),
    );
    return newValue;
  }
}

Discussion