我想为文本字段提供一个初始值,并重新绘制一个空值以清除文本。用Flutter的api实现这一点的最佳方法是什么?


当前回答

你可以做以上所有的事情,但如果你想让API在加载时显示你的数据,它会像配置文件页面一样显示。下面是代码:

TextEditingController _nameController = TextEditingController(); // initialize the controller
 // when API gets the data, do this:
 _nameController.text = response.data.fullName; or _nameController.text = "Apoorv Pandey"

我希望这能澄清一切。编码快乐!

其他回答

class _YourClassState extends State<YourClass> {
  TextEditingController _controller = TextEditingController();

  @override
  void initState() {
    super.initState();
    _controller.text = 'Your message';
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      color: Colors.white,
      child: TextFormField(
        controller: _controller,
        decoration: InputDecoration(labelText: 'Send message...'),
      ),
    );
  }
}

至于上述答案都是正确的,但有一件事是缺失的,我想添加到它是如何自定义TextFormField的默认文本的风格。

TextEditingController textController = TextEditingController(text: '4');

 TextFormField(
    controller: textController,
     // This style property will customize the default controller text
    style: TextStyle(
    color: Colors.white,
    fontSize: 18,
    fontWeight: FontWeight.bold,
   ),
    ),

对于这种情况,我更喜欢使用TextEditingController而不是initialValue,因为如果你想改变它以后或修改它,那么textController将不断监听你的TextFormField输入的变化。 这是我个人的观点,如果我错了请告诉我。

这可以通过使用TextEditingController来实现。

要有一个初始值,你可以加上

TextEditingController _controller = TextEditingController(text: 'initial value');

or

如果你正在使用TextFormField,你有一个initialValue属性。它基本上自动地将这个initialValue提供给小部件。

TextFormField(
  initialValue: 'initial value'
)

清除文本可以使用 _controller.clear()方法。

如果你正在使用TextEditingController,然后设置文本为它,如下所示

TextEditingController _controller = new TextEditingController();


_controller.text = 'your initial text';

final your_text_name = TextFormField(
      autofocus: false,
      controller: _controller,
      decoration: InputDecoration(
        hintText: 'Hint Value',
      ),
    );

如果你不使用任何TextEditingController,那么你可以直接使用initialValue如下

final last_name = TextFormField(
      autofocus: false,
      initialValue: 'your initial text',
      decoration: InputDecoration(
        hintText: 'Last Name',
      ),
    );

更多参考TextEditingController

如果你想处理多个textinput,因为@MRT在接受的答案的评论中要求,你可以创建一个函数,接受一个初始值,并返回一个TextEditingController,像这样:

initialValue(val) {
  return TextEditingController(text: val);
}

然后,将这个函数设置为TextInput的控制器,并像这样提供它的初始值:

controller: initialValue('Some initial value here....')

您可以为其他textinput重复此操作。