如何为文本字段提供初始值?

时间:2017-04-04 17:52:02

标签: dart flutter

我想为文本字段提供初始值,并使用空值重绘它以清除文本。使用Flutter API的最佳方法是什么?

13 个答案:

答案 0 :(得分:52)

(来自邮件列表。我没有想出这个答案。)

class _FooState extends State<Foo> {
  TextEditingController _controller;

  @override
  void initState() {
    super.initState();
    _controller = new TextEditingController(text: 'Initial value');
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new TextField(
          // The TextField is first built, the controller has some initial text,
          // which the TextField shows. As the user edits, the text property of
          // the controller is updated.
          controller: _controller,
        ),
        new RaisedButton(
          onPressed: () {
            // You can also use the controller to manipuate what is shown in the
            // text field. For example, the clear() method removes all the text
            // from the text field.
            _controller.clear();
          },
          child: new Text('CLEAR'),
        ),
      ],
    );
  }
}

答案 1 :(得分:22)

您可以使用TextFormField代替TextField,并使用initialValue属性。例如

TextFormField(initialValue: "I am smart")

答案 2 :(得分:13)

  

如果您使用的是 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

答案 3 :(得分:4)

如果您要处理@MRT在接受的答案的注释中要求的多个TextInput,则可以创建一个采用初始值并返回TextEditingController的函数,如下所示:< / p>

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

然后,将此函数设置为TextInput的控制器,并在其中提供其初始值,如下所示:

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

您可以对其他TextInput重复此操作。

答案 4 :(得分:2)

您不必在小部件范围内定义单独的变量,只需内联即可:

import 'dart:convert';
import 'package:http/http.dart';

fetchDataByPost() async {

Map<String, dynamic> body = {'id': 222, 'name': 'aam'};

String jsonBody = json.encode(body);
final encoding = Encoding.getByName('utf-8');
final header = {'Content-Type': 'application/json'};

Response response = await post(
widget.url + "login",
headers: header,
body: jsonBody,
encoding: encoding,
);

int statusCode = response.statusCode;
String responseBody = response.body;
}

答案 5 :(得分:1)

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...'),
      ),
    );
  }
}

答案 6 :(得分:0)

内部课程

  final usernameController = TextEditingController(text: 'bhanuka');

文本字段

   child: new TextField(
        controller: usernameController,
    ...
)

答案 7 :(得分:0)

TextEdittingController _controller = new TextEdittingController(text: "your Text");

@override
  void initState() {
    super.initState();
    _Controller.text = "Your Text";
    }

答案 8 :(得分:0)

这可以使用TextEditingController实现 1.要获得初始值,您可以添加

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

或 如果您使用的是TextFormField,则那里有一个initialValue属性。基本上,它会自动将这个initialValue提供给控制器。

TextEditingController _controller = TextEditingController();
TextFormField(
  controller: _controller,
  initialValue: 'initial value'
)

2。要清除文字,您可以使用 _controller.clear()方法

答案 9 :(得分:0)

我在这里已经看到了许多方法。但是,我认为这比其他答案更有效或更简洁。

TextField(
   controller: TextEditingController(text: "Initial Text here"),
)

答案 10 :(得分:0)

您可以执行上述所有操作,但是,如果您希望 API 在加载数据时显示您的数据,它会像个人资料页面一样显示。所以这是代码:

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

我希望它清除一切。快乐编码!

答案 11 :(得分:-1)

简单高效的方法

将控制器分配给您的 TextFormFieldTextField,在 initState 中,您可以像这样将其初始化为初始值

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

答案 12 :(得分:-12)

如果您还没有找到答案以及那些来这里寻找答案的人:查看InputDecoration字段的提示文字:

new TextField(
  decoration: new InputDecoration(
    hintText:"My Text String."
  ),
...