在StreamBuilder中具有初始值的TextField

Vin*_*lla 1 controller default-value textfield flutter stream-builder

我们正在创建用户的编辑数据页面,因此文本字段已经充满了用户数据,用户可以更改并保存它。问题是,当我开始在文本字段中输入字符时,光标会丢失,每个字符我输入(从设备键盘输入),光标移到第一个字符...并且如果我删除带有初始值的控制器,它可以正常工作,但是我的文本字段无法填充用户数据。

代码示例:

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),
        ),
  ),
Run Code Online (Sandbox Code Playgroud)

Vin*_*lla 7

@XoXo 这里是完整代码,但您可以按照自己的方式进行。

TextEditingController _controller = TextEditingController();

return StreamBuilder<String>(
    stream: _bloc.myStream,
    builder: (context, snap) {
      _controller.value =
          _controller.value.copyWith(text: snap.data);

      return TextField(
        decoration: InputDecoration(
          hintText: 'ex: Centro',
          labelText: 'Bairro',
          errorText: snap.error,
        ),
        onChanged: _bloc.updateMyStream,
        controller: _controller,
      );
    });
Run Code Online (Sandbox Code Playgroud)


Sae*_*bil 5

每当您需要更新TextController文本时,要进行编辑,就需要像这样固定光标位置

textController.value = textController.value.copyWith(text:<NEW_VALUE>,);
Run Code Online (Sandbox Code Playgroud)

用新文本替换NEW_VALUE。