TextFormField(
inputFormatters: [
FilteringTextInputFormatter.deny(RegExp('[a-zA-Z]')),
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
],
maxLength: 2,
controller: controller,
),
),
我想阻止用戶在 TextFormField 中輸入大于 12 的數字。只能寫1-12(含12)之間的數字。
uj5u.com熱心網友回復:
您可以嘗試使用此自定義格式化程式:
TextFormField(
inputFormatters: [
TextInputFormatter.withFunction((oldValue, newValue) {
if (newValue.text == '') return newValue;
final i = int.tryParse(newValue.text);
if (i == null) return oldValue;
if (i > 12) return newValue.copyWith(text: '12', selection: const TextSelection.collapsed(offset: 2));
return newValue;
})
],
maxLength: 2,
)
uj5u.com熱心網友回復:
你必須定義一個自定義格式化程式,檢查這個答案
class LimitRangeTextInputFormatter extends TextInputFormatter {
LimitRangeTextInputFormatter(this.min, this.max) : assert(min < max);
final int min;
final int max;
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
var value = int.parse(newValue.text);
if (value < min) {
return TextEditingValue(text: min.toString());
} else if (value > max) {
return TextEditingValue(text: max.toString());
}
return newValue;
}
}
您也可以這樣實作,不確定這是最好的方法,但它的想法是使用對話框來阻止用戶并在不符合您想要的要求時強制使用先前的值。
onChanged: (String value) async {
if (value.isEmpty || int.tryParse(value) > 12) {
await showDialog<void>(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Error '),
content: const Text('must be defined and lower than 12.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.pop(context);
},
child: const Text('OK'),
),
],
);
},
);
// force old value
controller.text = oldValue;
return;
}
},
uj5u.com熱心網友回復:
試試這個對你有幫助
TextField(
controller: textEditingEventController,
inputFormatters: [
FilteringTextInputFormatter.deny(RegExp('[a-zA-Z]')),
FilteringTextInputFormatter.allow(RegExp('[0-9]')),
],
onChanged: (val) {
if (int.parse(((val.isEmpty) ? '00' : (val))) > 60) {
textEditingEventController.text = '12';
}
textEditingEventController.value = TextEditingValue(
text: textEditingEventController.text,
selection: TextSelection.fromPosition(
TextPosition(
offset: textEditingEventController
.value.selection.baseOffset),
),
);
textEditingEventController.selection =
TextSelection.fromPosition(TextPosition(
offset:
textEditingEventController.text.length));
},
),
uj5u.com熱心網友回復:
您仍然可以像這樣使用正則運算式
FilteringTextInputFormatter.allow(RegExp(r'^([1][0-2]?|[1-9])$'))
但最好在文本欄位中使用 onChange 并創建函式來檢查值是否 > 12
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/535787.html
標籤:扑镖
上一篇:flutter中呼叫API報錯_InternalLinkedHashMap<String,dynamic>如何解決?