यद्यपि अन्य लोगों ने पहले ही उल्लेख किया था कि कीबोर्ड प्रकार "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) {
var newHeight = count == 0 ? 50.0 : 28.0 + (count * 18.0);
setState(() {
_inputHeight = newHeight;
});
}
}
TextField(
controller: _textEditingController,
textInputAction: TextInputAction.newline,
keyboardType: TextInputType.multiline,
maxLines: null,
)
maxLines: null
। हाय के बिना यह काम नहीं लगता है