0

を使用するためにパターンフォーマッターパッケージを使用しています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();
  }

}
4

1 に答える 1