はじめに
Flutterを始めてかれこれ3年目になるエンジニアです。
最近何かしらTextEditingControllerにお世話になっているので、まとめます。
1. TextEditingControllerとは?
TextEditingController
は、TextField
やTextFormField
の状態を管理するためのコントローラーです。テキストの変更を監視し、特定のアクションを実行したり、プログラムからテキストを変更したりすることができます。
1.1 TextEditingControllerの生成
TextEditingController
は、通常、ウィジェットの初期化時に生成され、ウィジェットのライフサイクルに応じて管理されます。以下は、その基本的な使い方です。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final TextEditingController _controller = TextEditingController();
@override
void dispose() {
_controller.dispose(); // メモリリークを防ぐためにdisposeする
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("TextEditingController Example"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
TextField(
controller: _controller,
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () {
print(_controller.text); // 現在のテキストを取得
},
child: Text("Print Text"),
),
],
),
),
);
}
}
2. 基本的な操作
TextEditingController
を使うと、テキストの取得、設定、およびテキストの変更リスナーの追加が可能です。
2.1 テキストの取得と設定
TextEditingController
を使用して、現在のテキストを取得したり、設定したりできます。
final TextEditingController _controller = TextEditingController();
// テキストを取得
String currentText = _controller.text;
// テキストを設定
_controller.text = "新しいテキスト";
2.2 テキストの変更を監視する
テキストの変更を監視するために、addListener
メソッドを使用して、リスナーを追加できます。
_controller.addListener(() {
print("テキストが変更されました: ${_controller.text}");
});
3. メモリリークを防ぐための注意
TextEditingController
は、使い終わったらdispose
メソッドを呼び出して、メモリリークを防ぐようにしましょう。これは、ウィジェットのライフサイクル管理の一環です。
@override
void dispose() {
_controller.dispose();
super.dispose();
}
4. 結論
TextEditingController
は、Flutterのテキスト入力を扱うための非常に強力なツールです。その基本的な使い方から、選択範囲やカーソル位置の操作まで、さまざまなシナリオに適用できます。メモリリークを防ぐために、ウィジェットのライフサイクルに合わせて適切に管理することが重要です。このガイドを参考に、Flutterのテキスト入力機能をより効果的に活用してください。