मैं किसी पाठ क्षेत्र को प्रारंभिक मूल्य कैसे प्रदान कर सकता हूं?


142

मैं एक टेक्स्ट फ़ील्ड को एक प्रारंभिक मूल्य प्रदान करना चाहता हूं और पाठ को खाली करने के लिए इसे खाली मान के साथ फिर से तैयार करना चाहता हूं। फ्लटर के एपीआई के साथ ऐसा करने के लिए सबसे अच्छा तरीका क्या है?

जवाबों:


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
बस आश्चर्य है कि आपने किस मेलिंग सूची का जवाब दिया है?
15

2
और हम प्रारंभिक मूल्य में टेक्स्टफील्ड मूल्य को कैसे जोड़ते हैं / ओवरराइड करते हैं?
स्टिकओवरफ़्लो

2
इसके अलावा, विजेट के निपटान पर _controller को निपटाना सुनिश्चित करें। यह Google द्वारा अनुशंसित है। यह सुनिश्चित करता है कि संसाधनों को जरूरत न होने पर मुक्त किया जाए।
अमृत ​​पाल सिंह

89

आप TextFormFieldइसके बजाय का उपयोग कर सकते हैं TextField, और initialValueसंपत्ति का उपयोग कर सकते हैं। उदाहरण के लिए

TextFormField(initialValue: "I am smart")

2
किसी कारण से मैं इसे एक गतिशील वस्तु के साथ उपयोग नहीं कर सका। नियंत्रक की आवश्यकता समाप्त।
S1r-Lanzelot

6
यह केवल तब मान्य होता है जब कोई नियंत्रक TextFormField के साथ निर्दिष्ट नहीं होता है। docs.flutter.io/flutter/material/TextFormField/…
एलेक्स

@AlexFallenstedt नियंत्रक उपलब्ध होने पर इस संपत्ति की कोई आवश्यकता नहीं है
सामी कानाफनी

मुझे लगता है कि यह जोखिम भरा है क्योंकि जब आपके विजेट ट्री का पुनर्निर्माण किया जाता है तो आपके पाठ को प्रारंभिक मूल्य से बदला जा सकता है।
गोकर्क यिकस

46

आपको विजेट स्कोप में एक अलग वैरिएबल को परिभाषित करने की आवश्यकता नहीं है, बस इसे इनलाइन करें:

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

"TextEditingController () .. पाठ" में डबल डॉट्स का क्या अर्थ है?
रे ली

3
@RayLi इसे कैस्केड ऑपरेटर कहा जाता है। जानकारी और उदाहरण के लिए यहां देखें stackoverflow.com/questions/53136945/…
vovahost

1
धन्यवाद!। वस्तुओं की सूची से विगेट्स के गतिशील निर्माण के लिए यह एकदम सही है :)
davaus

यह वही है जिसे मैं देख रहा था !! आपका बहुत बहुत धन्यवाद!
तैजंग शिम

1
@vovahost यह दुर्भाग्य से भाग को याद कर रहा है।
क्रिस रुतकोव्स्की

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 का उपयोग नहीं कर रहे हैं तो आप सीधे नीचे दिए गए तरह प्रारंभिक उपयोग कर सकते हैं

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

अधिक संदर्भ के लिए TextEditingController


मुझे यकीन नहीं है कि textसंपत्ति के डॉक्स के अनुसार संपत्ति का प्रारंभिक मूल्य निर्धारित करना एक अच्छा विचार है TextEditingController.text: इसे सेट करना इस TextEditingController के सभी श्रोताओं को सूचित करेगा कि उन्हें अपडेट करने की आवश्यकता है (इसे कॉल करते हैं InformListeners)। इस कारण से, यह मान केवल फ़्रेम के बीच सेट किया जाना चाहिए, उदाहरण के लिए उपयोगकर्ता कार्यों के जवाब में, न कि निर्माण, लेआउट, या पेंट चरणों के दौरान। ( api.flutter.dev/flutter/widgets/TextEditingController/text.html )
किरिल

15

मैंने यहाँ पर इसे करने के कई तरीके देखे हैं। हालाँकि मुझे लगता है कि यह अन्य उत्तरों की तुलना में थोड़ा अधिक कुशल या कम से कम संक्षिप्त है।

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

7

यदि आप TextInputस्वीकार किए गए उत्तर में टिप्पणी में @MRT द्वारा पूछे गए कई एस को संभालना चाहते हैं , तो आप एक फ़ंक्शन बना सकते हैं जो एक प्रारंभिक मूल्य लेता है और 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,
    ...
)


-12

यदि आपको इसके लिए और यहां आने वालों के लिए जवाब नहीं मिला है, तो इस InputDecorationक्षेत्र के संकेत की जांच करें:

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

संकेत पाठ प्रारंभिक मूल्य नहीं है। जब उपयोगकर्ता कुछ टाइप करता है तो वह चला जाता है। प्रारंभिक पाठ उपयोगकर्ता के लिए कुछ लिखने से पहले की तरह है।
अरमान ऑर्कुचनी

यह हिंट्स टेक्स्ट है, नॉट वैल्यू इनिशियलाइज़र
MRT

2
यह सच है, लेकिन यह उन लोगों के लिए अच्छा है जो यहां संकेत पाठ की तलाश में हैं, लेकिन यह नहीं जानते कि इसे क्या कहा जाए।
थिंकडिजिटल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.