我想制作一個自定義文本編輯控制器,它將以波斯語(波斯語)顯示文本的數量,但在您呼叫textEditingController.text.
這是我已經實作的,但似乎 TextField 不使用 setter text:
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,
);
}
uj5u.com熱心網友回復:
您的代碼不起作用的原因是您嘗試使用 getter 獲取英文數字text,??在TextEditingController它的內部使用它,所以您總是獲得英文數字,??您需要設定text并farsi定義新getter的英文數字,??如下所示:
class PersianTextEditingController extends TextEditingController {
@override
String get text => value.text.toPersianNumbers;
String get englishText => value.text.toEnglishNumbers;
factory PersianTextEditingController({String? text}) =>
PersianTextEditingController._(text: text);
PersianTextEditingController._({String? text}) {
this.text = text ?? '';
}
}
但是當你想得到你的英文號碼時,請使用:
print("text = ${widget.controller.englishText}")
uj5u.com熱心網友回復:
嘗試這個:
class PersianTextEditingController extends TextEditingController {
@override
String get text => super.value.text.toPersianNumbers;
@override
set text(String persianText) {
super.value = TextEditingValue(
text: persianText.toEnglishNumbers,
selection: TextSelection.collapsed(offset: persianText.length),
);
}
}
和:
TextField(
controller: controller,
onChanged: (value) {
print(controller.text);
},
),
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533183.html
標籤:扑镖文本编辑控制器
