他の人はキーボードタイプ「TextInputType.multiline」を使用できるとすでに述べていますが、新しい行が入力されたときに高さを自動的に適応させるTextFieldの実装を追加したかったのは、の入力動作を模倣することがしばしば望まれるためです。 WhatsAppおよび同様のアプリ。
テキストが変更されるたびに、この目的のために入力内の「\ n」チャタクターの数を分析しています。これはやり過ぎのようですが、残念ながら、これまでのところFlutterでこの動作を実現するためのより良い可能性は見つかりませんでした。また、古いスマートフォンでもパフォーマンスの問題は見られませんでした。
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
です。こんにちはなしではうまくいかないようです