#flutter #dart
Вопрос:
В настоящее время я пытаюсь переместить счетчик текстового поля наверх (над фактическим полем ввода), и я не уверен, как это сделать.
Поэтому счетчик следует переместить в правый верхний угол над полем поля ввода. Я пытался подумать о создании нового счетчика, но должен быть более простой способ сделать это? Я также попытался поэкспериментировать с дизайном ввода, но, похоже, ничего не работает.
TextFormField(
maxLength: 1000,
decoration: InputDecoration(
labelText: label,
labelStyle: TextStyle(fontSize: 30,
),
)
Был бы признателен за некоторую помощь, спасибо в андвансе!
Ответ №1:
Короткий путь-это использование buildCounter
с transform
. Но это будет содержать несколько дополнительных пробелов, и я думаю, что это в некотором роде нормально.
TextFormField(
maxLength: 1000,
buildCounter: (context,
{required currentLength, required isFocused, maxLength}) {
return Container(
transform: Matrix4.translationValues(0, -kToolbarHeight, 0),
child: Text("$currentLength/$maxLength"),
);
},
),
Другим способом TextEditingController
и Column
final TextEditingController controller = TextEditingController();
final maxLength = 1000;
@override
void initState() {
controller.addListener(() {
setState(() {});
});
super.initState();
}
Column(
children: [
Align(
alignment: Alignment.centerRight,
child: Text("${controller.text.length}/$maxLength"),
),
TextFormField(
key: ValueKey("textFiled in Column"),
controller: controller,
buildCounter: (context,
{required currentLength,
required isFocused,
maxLength}) =>
SizedBox(),
),
],
),
Результат
Комментарии:
1. Это работает очень хорошо, но это довольно странно, так как, когда я использую kToolbarHeight, и в моем случае поле немного больше, чем поле, которое я отобразил в своем вопросе, мне нужно умножить kToolbarHeight, чтобы на самом деле получить его над полем, иначе оно внутри поля. Есть ли способ сделать это согласованным, используя некоторое позиционирование?
2.
TextField
высота зависит от размера родителей, вы можете передать его туда, иначе попробуйте мой 2-й вариантAnother way TextEditingController and Column