Flutter - 无法在不点击文本字段的情况下编辑文本
Flutter - cannot edit text in textfield without tapping on it
所以,我有一个如下所示的 TextField:
TextField(
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
controller: _amountController,
autofocus: true,
keyboardType: TextInputType.number,
decoration: InputDecoration(
hintText: '0',
hintStyle: TextStyle(color: Painter.gray500),
border: InputBorder.none,
prefixIcon: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: SvgPicture.asset(icon),
),
prefixIconConstraints: BoxConstraints(
maxHeight: 20,
maxWidth: 20,
),
),
),
这是我用来添加数据的底部 sheet。我还想启用编辑,所以点击底部 sheet 加载具有现有值的 TextField,如果有的话。为此,_amountController
被初始化为:
AddDataSheet({
required this.title,
required this.subtitle,
this.amount,
}) {
_amountController = TextEditingController.fromValue(
amount == null
? TextEditingValue.empty
: TextEditingValue(
text: amount.toString()
),
);
}
问题是,当 TextField 加载时,它带有焦点,但我无法编辑它,直到我点击它。我试着添加这个,
selection: TextSelection.fromPosition(
TextPosition(offset: amount.toString().length),
),
到控制器初始化,但它不起作用。
我怎样才能拥有 TextField,这样我就不必点击它来开始编辑值了?
我认为你需要使用 focusnode 属性
https://api.flutter.dev/flutter/material/TextField/focusNode.html
另请参考这些答案
所以,我有一个如下所示的 TextField:
TextField(
inputFormatters: [FilteringTextInputFormatter.digitsOnly],
controller: _amountController,
autofocus: true,
keyboardType: TextInputType.number,
decoration: InputDecoration(
hintText: '0',
hintStyle: TextStyle(color: Painter.gray500),
border: InputBorder.none,
prefixIcon: Padding(
padding: const EdgeInsets.only(right: 8.0),
child: SvgPicture.asset(icon),
),
prefixIconConstraints: BoxConstraints(
maxHeight: 20,
maxWidth: 20,
),
),
),
这是我用来添加数据的底部 sheet。我还想启用编辑,所以点击底部 sheet 加载具有现有值的 TextField,如果有的话。为此,_amountController
被初始化为:
AddDataSheet({
required this.title,
required this.subtitle,
this.amount,
}) {
_amountController = TextEditingController.fromValue(
amount == null
? TextEditingValue.empty
: TextEditingValue(
text: amount.toString()
),
);
}
问题是,当 TextField 加载时,它带有焦点,但我无法编辑它,直到我点击它。我试着添加这个,
selection: TextSelection.fromPosition(
TextPosition(offset: amount.toString().length),
),
到控制器初始化,但它不起作用。
我怎样才能拥有 TextField,这样我就不必点击它来开始编辑值了?
我认为你需要使用 focusnode 属性
https://api.flutter.dev/flutter/material/TextField/focusNode.html
另请参考这些答案