텍스트 필드에 초기 값을 어떻게 제공합니까?


142

텍스트 필드에 초기 값을 제공하고 빈 값으로 다시 그려서 텍스트를 지우고 싶습니다. Flutter의 API를 사용하여이를 수행하는 가장 좋은 방법은 무엇입니까?

답변:


105

(메일 링리스트에서. 나는이 답변을 찾지 못했습니다.)

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

힌트 서버도 같은 목적인 것 같습니다.
dhuma1981

3
답변에서 어떤 메일 링리스트를 참조했는지 궁금하십니까?
stt106

2
그리고 어떻게 텍스트 필드 값을 초기 값에 추가 / 무시합니까?
stuckedoverflow

2
또한 위젯의 처분에 _controller를 처분하십시오. Google에서 권장합니다. 필요하지 않을 때 리소스를 확보 할 수 있습니다.
Amrit Pal Singh

89

당신은 사용할 수있는 TextFormField대신을 TextField하고 사용하는 initialValue속성을. 예를 들어

TextFormField(initialValue: "I am smart")

2
어떤 이유로 나는 이것을 동적 객체와 함께 사용할 수 없었습니다. 컨트롤러가 필요했습니다.
S1r-Lanzelot

6
이것은 컨트롤러가 TextFormField로 지정되지 않은 경우에만 유효합니다. docs.flutter.io/flutter/material/TextFormField/…
Alex Fallenstedt

@AlexFallenstedt 컨트롤러를 이용할 수있는 경우이 숙박 시설이 필요하지 않습니다
Sami Kanafani

위젯 트리를 다시 작성할 때 텍스트가 초기 값으로 대체 될 수 있기 때문에 이것이 위험하다고 생각합니다.
Gökberk Yağcı

46

위젯 범위에서 별도의 변수를 정의 할 필요는 없으며 인라인으로 수행하십시오.

TextField(
  controller: TextEditingController()..text = 'Your initial value',
  onChanged: (text) => {},
)

"TextEditingController () .. text"의 이중 점은 무엇을 의미합니까?
Ray Li

3
@RayLi 캐스케이드 연산자라고합니다. 정보 및 예를 보려면 여기를 확인하십시오 stackoverflow.com/questions/53136945/…
vovahost

1
감사!. 이것은 객체 목록에서 위젯을 동적으로 생성하기에 완벽합니다. :)
davaus

이것은 내가 찾던 것입니다! 고마워요!
TaeJung Shim

1
@vovahost 불행히도 처분 부분이 없습니다.
Chris Rutkowski

28

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


text속성 값에 따라 초기 값을 속성으로 설정하는 것이 좋은 생각인지 확실하지 않습니다 TextEditingController.text.이를 설정하면이 TextEditingController의 모든 리스너에게 업데이트해야한다고 알립니다 (notifyListeners 호출). 이러한 이유로이 값은 빌드, 레이아웃 또는 페인트 단계가 아닌 사용자 작업에 대한 응답으로 프레임간에 만 설정해야합니다. ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
Kirill Karmazin

15

나는 여기에서 이것을하는 많은 방법을 보았습니다. 그러나 나는 이것이 다른 답변보다 조금 더 효율적이거나 간결하다고 생각합니다.

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

7

TextInput허용 된 답변에 대한 주석에서 @MRT가 요청 한대로 여러 s 를 처리 하려면 초기 값을 가져 와서 다음 TextEditingController과 같이 반환하는 함수를 만들 수 있습니다 .

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

그런 다음이 기능을 컨트롤러로 설정하고 다음 TextInput과 같이 초기 값을 제공하십시오.

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

다른 TextInputs에 대해서도이 작업을 반복 할 수 있습니다 .


4

이것은를 사용하여 달성 할 수 있습니다 TextEditingController.

초기 값을 갖기 위해 추가 할 수 있습니다

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

또는

당신이 사용 TextFormField하는 initialValue경우 거기 에 속성이 있습니다. 기본적으로 initialValue컨트롤러에 자동 으로 제공합니다 .

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

텍스트를 지우려면 _controller.clear()방법 을 사용할 수 있습니다 .


3

내부 수업,

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

텍스트 필드,

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

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

또는

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

-12

이에 대한 답변을 찾지 못한 경우 여기에 오는 사람들에게 답을 찾지 못한 경우 : InputDecoration필드의 힌트 텍스트를 확인하십시오.

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

힌트 텍스트는 초기 값이 아닙니다. 사용자가 무언가를 입력하면 사라질 것입니다. 초기 텍스트는 사용자를위한 사전 쓰기와 같습니다.
Arman Ordookhani

이것은 힌트 텍스트입니다. 값이 아닌 이니셜 라이저
MRT

2
그것은 사실이지만 힌트 텍스트를 찾고 있지만 그것을 부를 줄 모르는 사람들에게는 좋습니다.
ThinkDigital
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.