我正在使用模式格式化程序包以便使用ThousandsFormatter
. 所以当我有值时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
用来填充文本字段中的值,所以我的 TeextField 将是这样的
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")),
],
),
当我点击其中一个按钮并且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();
}
}