我想做一个自定义的文本编辑控制器,它将显示波斯语(波斯语)的文本数字,但当你调用textEditingController.text
时,它返回的是英语数字。
下面是我实现的内容,但似乎TextField不使用text
的setter:
class PersianTextEditingController extends TextEditingController {
@override
String get text => value.text.toEnglishNumbers;
@override
set text(String newText) {
value = value.copyWith(
text: newText.toPersianNumbers,
selection: const TextSelection.collapsed(offset: -1),
composing: TextRange.empty,
);
}
factory PersianTextEditingController({String? text}) =>
PersianTextEditingController._(text: text);
PersianTextEditingController._({String? text}) {
this.text = text ?? '';
}
}
下面是文本字段:
PersianTextEditingController controller = PersianTextEditingController();
@override
Widget build(BuildContext context) {
return TextField(
controller: widget.controller,
);
}
2条答案
按热度按时间fnvucqvd1#
你的代码不工作的原因是你试图用getter
text
获取英语数字,在TextEditingController
中使用它,所以你总是得到英语数字,你需要将text
设置为farsi
并为英语数字定义新的getter
,如下所示:但是当你想得到你的英语号码时,使用这个:
fcipmucu2#
试试这个:
以及: