स्पंदन में मल्टी-लाइन टेक्स्टफील्ड


116

यह आसान लग सकता है लेकिन हम स्पंदन में एक बहु-पंक्ति संपादन योग्य टेक्स्टफील्ड कैसे कर सकते हैं? TextField केवल एक लाइन के साथ काम करता है।

संपादित करें: कुछ पूर्वाग्रह क्योंकि ऐसा लगता है कि यह स्पष्ट नहीं है। जब आप टेक्स्ट सामग्री को वस्तुतः लपेटने के लिए मल्टीलाइन सेट कर सकते हैं, तब भी यह मल्टीलाइन नहीं है। यह एक एकल लाइन है जिसे कई लाइनों में प्रदर्शित किया जाता है। यदि आप ऐसा कुछ करना चाहते हैं तो आप नहीं कर सकते। क्योंकि आपके पास ENTERबटन तक पहुंच नहीं है । और नो एंटर बटन का मतलब नो मल्टीलाइन है।

जवाबों:


201

ऑटो चादर का उपयोग करने के लिए, बस सेट maxLinesके रूप में null:

TextField(
  keyboardType: TextInputType.multiline,
  maxLines: null,
)

यदि maxLinesसंपत्ति है null, तो लाइनों की संख्या की कोई सीमा नहीं है, और लपेट सक्षम है।


पकड़ना है maxLines: null। हाय के बिना यह काम नहीं लगता है
शिशिर

26

यदि आप चाहते हैं कि आपका TextField उपयोगकर्ता इनपुट के अनुकूल हो तो ऐसा करें:

TextField(
    keyboardType: TextInputType.multiline,
    minLines: 1,//Normal textInputField will be displayed
    maxLines: 5,// when user presses enter it will adapt to it
    );

यहां आप जो भी चाहते हैं उसके लिए अधिकतम लाइनें निर्धारित करें और आप जाने के लिए अच्छे हैं। मेरी राय में अशक्त करने के लिए अधिकतम सीमा निर्धारित करना एक अच्छा विकल्प नहीं है, हमें इसे कुछ मूल्य पर सेट करना चाहिए।


1
मैंने विजेट नाम को: TextInputField, से: TextField में सुधार लिया है। स्पंदन में TextInputField नहीं है, बस TextField या TextFormField है। जब तक आप कस्टम नाम से एक नहीं बनाते हैं।
कैसियो सेफिन

13

यद्यपि अन्य लोगों ने पहले ही उल्लेख किया था कि कीबोर्ड प्रकार "TextInputType.multiline" का उपयोग किया जा सकता है, मैं अपने टेक्स्ट टेक्स्ट के कार्यान्वयन को जोड़ना चाहता था जो एक नई लाइन में प्रवेश करने पर स्वचालित रूप से इसकी ऊंचाई को बढ़ा देता है, क्योंकि यह अक्सर इनपुट व्यवहार को लागू करने के लिए वांछित होता है। व्हाट्सएप और इसी तरह के ऐप।

मैं इस उद्देश्य के लिए इनपुट में '\ n' चैट करने वालों की संख्या का विश्लेषण कर रहा हूँ, हर बार जब पाठ बदला जाता है। यह एक ओवरकिल प्रतीत होता है, लेकिन दुर्भाग्य से मुझे इस अव्यवस्था को फ़्लटर में हासिल करने की बेहतर संभावना नहीं मिली और मैंने पुराने स्मार्टफ़ोन पर भी कोई प्रदर्शन समस्या नहीं देखी।

class _MyScreenState extends State<MyScreen> {
  double _inputHeight = 50;
  final TextEditingController _textEditingController = TextEditingController();

  @override
  void initState() {
    super.initState();
    _textEditingController.addListener(_checkInputHeight);
  }

  @override
  void dispose() {
    _textEditingController.dispose();
    super.dispose();
  }

  void _checkInputHeight() async {
    int count = _textEditingController.text.split('\n').length;

    if (count == 0 && _inputHeight == 50.0) {
      return;
    }
    if (count <= 5) {  // use a maximum height of 6 rows 
    // height values can be adapted based on the font size
      var newHeight = count == 0 ? 50.0 : 28.0 + (count * 18.0);
      setState(() {
        _inputHeight = newHeight;
      });
    }
  }


  // ... build method here
  TextField(
    controller: _textEditingController,
    textInputAction: TextInputAction.newline,
    keyboardType: TextInputType.multiline,
    maxLines: null,
  )

1
जोड़ने के बारे में विचार करें कि आप वास्तव में इनपुट की ऊंचाई निर्धारित करने के लिए _inputHeight का उपयोग कैसे करते हैं
अली नासिरज़ादेह

TextField के रूप में लाइन को 'बिना \ n' की संख्या के विभाजन के बिना लपेट सकते हैं। इसलिए मैं इस कोड के साथ पाठ पंक्तियों को गिन रहा हूं: int count = (_textEditingController.text.length / (MediaQuery.of (संदर्भ) .size.width * 0.06)) .round ()।
रेजिनाल्डो रीगो

5

TextFieldहै Maxlines संपत्ति।

यहाँ छवि विवरण दर्ज करें


1
मुझे पता है। हालांकि यह सामग्री लपेटता है, फिर भी आप मैन्युअल रूप से एक नई लाइन बनाने के लिए एन्टर प्रेस नहीं कर सकते। कम से कम Android पर, क्योंकि आपके पास प्रवेश बटन नहीं है।
Rémi Rousselet

आह, मैं उस मुद्दे को याद किया। मैंने 2016 से एक समान मुद्दे को डेटिंग करते देखा, इसलिए मैंने मान लिया कि इसे हल कर दिया गया है। काफी दुख की बात है कि हम अभी भी यह नहीं कर सकते।
रमी रूसेलेट

2
ऐसा लग रहा है कि यह अब तय हो गया है ( github.com/flutter/flutter/issues/8028 )। मैंने iOS और Android दोनों पर मल्टी-लाइन की कोशिश की और दोनों अब टेक्स्ट फील्ड में नई लाइनें बना सकते हैं।
मैट एस।

यह वास्तव में अब एक नई लाइन बना सकता है, लेकिन एंटर की को दो बार दबाना होगा!
वेंडु


5

का प्रयोग करें expandsऔर आप देने के लिए की जरूरत नहीं है minLinesया maxLinesकिसी भी विशिष्ट मूल्य:

TextField(
  maxLines: null,
  expands: true, 
  keyboardType: TextInputType.multiline,
)

1

TextFputAction.newline निर्दिष्ट करें कि TextField बनाने के लिए कुंजी दर्ज करें और मल्टी-लाइन इनपुट स्वीकार करें :

textInputAction: TextInputAction.newline,

0

आधिकारिक डॉक्टर कहते हैं : maxLinesसंपत्ति को लाइनों की संख्या पर प्रतिबंध को हटाने के लिए अशक्त करने के लिए सेट किया जा सकता है। डिफ़ॉल्ट रूप से , यह एक है, जिसका अर्थ है यह एक एकल-पंक्ति पाठ फ़ील्ड है।

नोट: maxLines शून्य नहीं होना चाहिए।


0

यदि ऊपर एक बार आपके लिए काम नहीं किया गया है, तो मिनीलाइन को भी जोड़ने का प्रयास करें

TextField(
        keyboardType: TextInputType.multiline,
        minLines: 3,
        maxLines: null);

0

के लिए TextFormField विजेट , आप minLines और Maxlines अगर आप लाइनों के सेट ठीक नंबर करना चाहते हैं निर्धारित कर सकते हैं। अन्यथा आप अधिकतम अधिकतम शून्य करने के लिए भी सेट कर सकते हैं।

TextFormField(
      minLines: 5,
      maxLines: 7,
      decoration: InputDecoration(
          hintText: 'Address',
          border: OutlineInputBorder(
              borderRadius: BorderRadius.all(Radius.circular(10.0)),
          ),
      ),
),
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.