【发布时间】:2019-05-10 00:11:21
【问题描述】:
我们正在创建一个用户的编辑数据页面,所以文本字段已经填充了用户数据,用户可以更改并保存它...问题是当我开始在文本字段中输入字符时,光标会丢失,我输入的每个字符(从设备键盘),光标转到第一个字符......如果我用我的初始值删除控制器,它工作正常,但是我不能让我的文本字段填充用户数据.
代码示例:
child: StreamBuilder<String>(
stream: _bloc.myStream,
builder: (context, snap) => TextField(
decoration: InputDecoration(
hintText: 'example',
labelText: 'Name',
errorText: snap.error,
),
onChanged: _bloc.updateMyStream,
controller: TextEditingController(text: snap.data),
),
),
【问题讨论】:
-
您陷入了循环-您在 TextField 中输入数据-它调用-
onChanged: _bloc.updateMyStream-更新流-再次更新数据stream: _bloc.myStream获取新数据然后转到controller: TextEditingController(text: snap.data)再次更新文本字段。因此您的光标会再次转到第一个字符。 -
我也试过:child: StreamBuilder
( stream: _bloc.myInitialValueStream, builder: (context, snap) => TextField( decoration: InputDecoration( errorText: snap.error, ), onChanged: _bloc.updateAnotherStream, controller: TextEditingController(text: snap.data), ), ),然后只有当我第一次关注文本字段时,光标才会转到第一个字符...... -
而不是直接返回 TextField - 使用条件 if (snap.hasDate){return TextField...} 因为流初始数据始终为 Null。检查 - docs.flutter.io/flutter/widgets/StreamBuilder-class.html
-
anmol.majhail,做到了,但没有任何改变......光标仍然移动到第一个字符...... =/
-
如果你评论
onChanged: _bloc.updateMyStream,会怎样
标签: controller flutter textfield default-value stream-builder