を使用するためにパターンフォーマッターパッケージを使用していますThousandsFormatter
。したがって、 value がある場合10000000
、自動的に として表示され10.000.000
ます。最初はこのようなコードで、意図したとおりに動作します
TextFormField(
autofocus: false,
autocorrect: false,
maxLines: 1,
textAlign: TextAlign.end,
keyboardType: TextInputType.number,
onChanged: (newNominal) {
final newValue = newNominal.replaceAll(".", "");
controller.selectedNominal = int.tryParse(newValue) ?? 0;
},
inputFormatters: [
ThousandsFormatter(formatter: NumberFormat("#,###.##", "in_ID")),
],
),
そして、私はこのようないくつかのボタンを作ります
ご覧のとおり、$4000 を選択すると、テキストフィールドが表示4000
されます。4.000
TextEditingController
ボタンから値を選択した後、Textfield に値を入力するために使用するため、TextField は次のようになります。
final _textEditingController = TextEditingController();
TextFormField(
controller: _textEditingController, // I add this line
autofocus: false,
autocorrect: false,
maxLines: 1,
textAlign: TextAlign.end,
keyboardType: TextInputType.number,
onChanged: (newNominal) {
final newValue = newNominal.replaceAll(".", "");
controller.selectedNominal = int.tryParse(newValue) ?? 0;
},
inputFormatters: [
ThousandsFormatter(formatter: NumberFormat("#,###.##", "in_ID")),
],
),
これらのボタンの1つをタップすると、build
再び呼び出されるので、このようにテキストフィールドにテキストを設定します
@override
Widget build(context) {
final selectedNominal = pageController.selectedNominal.toString();
final editingValue = TextEditingValue(
text: selectedNominal,
selection: TextSelection.fromPosition(
TextPosition(offset: selectedNominal.length),
),
);
_textEditingController.value = editingValue;
return Scaffold(
appBar: AppBar(
title: Text("Title here"),
),
body: _buildWidgets(),
);
}
}
ThousandsFormatter
の後に が機能しなくなった理由がわかりません。_textEditingController.value
キーボードを使用して数値を入力しても、ThousandsFormatter
も機能しません。
公称コントローラーはこのようなものです
class NominalController with ChangeNotifier {
int _selectedNominal = 0;
int get selectedNominal => _selectedNominal;
set selectedNominal(int newValue) {
_selectedNominal = newValue;
notifyListeners();
}
}