在 Flutter 中使用控制器设置文本时 TextField 光标不移动
Posted
技术标签:
【中文标题】在 Flutter 中使用控制器设置文本时 TextField 光标不移动【英文标题】:TextField cursor not moving when setting text using controller in Flutter 【发布时间】:2019-05-31 22:49:20 【问题描述】:我正在使用StreamBuilder
来监听 TextField 的更改并相应地更新 TextField errorText。但是现在我也想通过快照数据给 TextField 设置一些文本。但是打字时光标根本不动。以下是我的代码:
Widget goalField()
return StreamBuilder(
stream: _bloc.goalMessage,
builder: (BuildContext context, AsyncSnapshot<String> snapshot)
return TextField(
controller: TextEditingController(text: snapshot.data),
keyboardType: TextInputType.multiline,
maxLines: 3,
onChanged: _bloc.changeGoalMessage,
decoration: InputDecoration(
hintText: "Enter your goal here", errorText: snapshot.error),
);
);
它在一个循环中进行。我该如何解决这个问题?
【问题讨论】:
***.com/a/53683436/10269042 感谢它的工作@anmol.majhail 【参考方案1】:我已尝试使用 _textEditingController.value.copyWith(text: snapshot.data)
在 cmets 中建议的解决方案,但每次更新 TextField 上显示的值时,光标似乎都位于文本的开头。
对我有用的是使用 _textEditingController.selection.copyWith(extentOffset: _textEditingController.text.length)
在 TextField 上设置偏移量。
以下是如何将其应用于您的代码 sn-p。
var _textEditingController = TextEditingController();
...
StreamBuilder(
stream: _bloc.goalMessage,
builder: (BuildContext context, AsyncSnapshot<String> snapshot)
_textEditingController.text = snapshot.data;
_textEditingController.selection = _textEditingController.selection.copyWith(extentOffset: _textEditingController.text.length);
return TextField(
controller: _textEditingController,
keyboardType: TextInputType.multiline,
maxLines: 3,
onChanged: _bloc.changeGoalMessage,
decoration: InputDecoration(
hintText: "Enter your goal here", errorText: snapshot.error),
);
,
);
【讨论】:
以上是关于在 Flutter 中使用控制器设置文本时 TextField 光标不移动的主要内容,如果未能解决你的问题,请参考以下文章
Flutter中TextField的TextScaleFactor?
如何在 Flutter 中将 textEditiing 控制器与 Provider 一起使用
如何在按钮单击时在 SwiftUI 中为 TextField 设置文本
Boostnote for Mac——如何使用TeX精美地编写数学公式