Làm cách nào để cung cấp giá trị ban đầu cho trường văn bản?


142

Tôi muốn cung cấp một giá trị ban đầu cho một trường văn bản và vẽ lại nó với một giá trị trống để xóa văn bản. Cách tiếp cận tốt nhất để làm điều đó với API của Flutter là gì?

Câu trả lời:


105

(Từ danh sách gửi thư. Tôi không đưa ra câu trả lời này.)

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

Tôi đoán máy chủ gợi ý cùng một mục đích.
dhuma1981

3
Chỉ cần tự hỏi danh sách gửi thư mà bạn đã đề cập đến trong câu trả lời?
stt106

2
Và làm thế nào để chúng ta nối / ghi đè giá trị trường văn bản vào giá trị ban đầu?
kẹt trong dòng chảy

2
Ngoài ra, hãy chắc chắn loại bỏ _controll trên xử lý của widget. Nó được đề xuất bởi Google. Nó đảm bảo rằng các tài nguyên được giải phóng khi không cần thiết.
Amrit Pal Singh

89

Bạn có thể sử dụng TextFormFieldthay thế TextFieldvà sử dụng initialValuetài sản. ví dụ

TextFormField(initialValue: "I am smart")

2
Vì một số lý do, tôi không thể sử dụng nó với một đối tượng động. Đã kết thúc cần bộ điều khiển.
S1r-Lanzelot

6
Điều này chỉ hợp lệ khi bộ điều khiển không được chỉ định với TextFormField. docs.flutter.io/flutter/m vật liệu / TexFormField / từ
Alex Fallenstedt

@AlexFallenstedt không cần tài sản này khi bộ điều khiển khả dụng
Sami Kanafani

Tôi nghĩ rằng điều này là rủi ro vì khi xây dựng lại cây widget của bạn, văn bản của bạn có thể được thay thế bằng giá trị ban đầu.
Gotkberk Yağcı

46

Bạn không phải xác định một biến riêng trong phạm vi widget, chỉ cần thực hiện nội tuyến:

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

Dấu chấm kép trong "TextEditingContoder () .. text" nghĩa là gì?
Ray Li

3
@RayLi Nó được gọi là toán tử tầng. Để biết thông tin và ví dụ, hãy kiểm tra tại đây stackoverflow.com/questions/53136945/ từ
vovahost

1
Cảm ơn!. Điều này hoàn hảo để tạo động các vật dụng từ danh sách các đối tượng :)
davaus

Đây là những gì tôi đang tìm kiếm !! Cảm ơn rất nhiều!
TaeJung Shim

1
@vovahost thật là thiếu phần vứt bỏ.
Chris Rutkowski

28

Nếu bạn đang sử dụng TextEditingControll thì hãy đặt văn bản thành nó, như bên dưới

TextEditingController _controller = new TextEditingController();


_controller.text = 'your initial text';

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

và nếu bạn không sử dụng bất kỳ TextEditingCont kiểm soát nào thì bạn có thể trực tiếp sử dụng initValue như bên dưới

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

Để tham khảo thêm TextEditingCont kiểm


Tôi không chắc có nên đặt giá trị ban đầu cho thuộc texttính theo tài liệu của TextEditingController.texttài sản hay không: Cài đặt này sẽ thông báo cho tất cả những người nghe về TextEditingContoder này mà họ cần cập nhật (nó gọi notifyListener). Vì lý do này, giá trị này chỉ nên được đặt giữa các khung, ví dụ như để đáp ứng với hành động của người dùng, không phải trong các giai đoạn xây dựng, bố trí hoặc sơn. ( api.flutter.dev/flutter/widgets/TextEditingControll/text.html )
Kirill Karmazin

15

Tôi đã thấy nhiều cách để làm điều này ở đây. Tuy nhiên tôi nghĩ rằng điều này là hiệu quả hơn một chút hoặc ít nhất là súc tích hơn các câu trả lời khác.

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

7

Nếu bạn muốn xử lý nhiều TextInputs như yêu cầu của @MRT trong nhận xét cho câu trả lời được chấp nhận, bạn có thể tạo một hàm lấy giá trị ban đầu và trả về TextEditingControllernhư sau:

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

Sau đó, đặt chức năng này làm bộ điều khiển cho TextInputvà cung cấp giá trị ban đầu của nó như thế này:

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

Bạn có thể lặp lại điều này cho các TextInputs khác .


4

Điều này có thể đạt được bằng cách sử dụng TextEditingController.

Để có giá trị ban đầu, bạn có thể thêm

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

hoặc là

Nếu bạn đang sử dụng TextFormFieldbạn có một initialValuetài sản ở đó. Mà về cơ bản cung cấp điều này initialValuecho bộ điều khiển tự động.

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

Để xóa văn bản, bạn có thể sử dụng _controller.clear()phương pháp.


3

trong lớp

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

Trương Văn bản,

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

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

hoặc là

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

-12

Nếu bạn chưa tìm thấy câu trả lời cho điều này và cho những người đến đây tìm kiếm câu trả lời: InputDecorationHãy kiểm tra gợi ý của trường:

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

Văn bản Gợi ý không phải là giá trị ban đầu. Khi người dùng gõ một cái gì đó nó sẽ biến mất. Văn bản ban đầu giống như viết trước một cái gì đó cho người dùng.
Arman Ordookhani

Đây là văn bản Gợi ý, Công cụ khởi tạo không giá trị
Tàu điện ngầm

2
Điều đó đúng, nhưng điều này tốt cho những người đến đây tìm kiếm văn bản gợi ý, nhưng không biết gọi nó là gì.
ThinkDigital
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.