1
2

【Flutter】TextEditingController使い方ガイド

Last updated at Posted at 2024-05-02

はじめに

Flutterを始めてかれこれ3年目になるエンジニアです。
最近何かしらTextEditingControllerにお世話になっているので、まとめます。

1. TextEditingControllerとは?

TextEditingControllerは、TextFieldTextFormFieldの状態を管理するためのコントローラーです。テキストの変更を監視し、特定のアクションを実行したり、プログラムからテキストを変更したりすることができます。

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のテキスト入力機能をより効果的に活用してください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2