FlutterのControllerの使い方
FlutterのControllerの使い方
1. はじめに
Flutterアプリケーションを開発する際、状態管理やUIの制御を効率的に行うためにControllerが重要な役割を果たします。本記事では、FlutterでのControllerの基本的な使い方から応用例までを解説します。
2. 基本的な概念
Controllerとは?
Controllerは、UIコンポーネントとアプリケーションのロジックをつなぐ役割を持つオブジェクトです。例えば、テキストフィールドの値を管理したり、スクロール位置を制御したりする際に使用されます。
よく使われるControllerの種類
- TextEditingController: テキストフィールドの値を管理
- ScrollController: スクロール位置の制御
- AnimationController: アニメーションの制御
3. TextEditingControllerの使い方
基本的な使用例
以下は、TextEditingController
を使ってテキストフィールドの値を取得・更新する例です。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: TextFieldExample(),
);
}
}
class TextFieldExample extends StatefulWidget {
_TextFieldExampleState createState() => _TextFieldExampleState();
}
class _TextFieldExampleState extends State<TextFieldExample> {
final TextEditingController _controller = TextEditingController();
void dispose() {
_controller.dispose(); // メモリリークを防ぐためにdisposeを呼び出す
super.dispose();
}
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,
decoration: InputDecoration(labelText: 'Enter text'),
),
ElevatedButton(
onPressed: () {
print('Text: ${_controller.text}');
},
child: Text('Print Text'),
),
],
),
),
);
}
}
4. ScrollControllerの使い方
基本的な使用例
ScrollController
を使ってスクロール位置を制御する例を紹介します。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: ScrollControllerExample(),
);
}
}
class ScrollControllerExample extends StatefulWidget {
_ScrollControllerExampleState createState() => _ScrollControllerExampleState();
}
class _ScrollControllerExampleState extends State<ScrollControllerExample> {
final ScrollController _scrollController = ScrollController();
void dispose() {
_scrollController.dispose(); // メモリリークを防ぐためにdisposeを呼び出す
super.dispose();
}
void _scrollToTop() {
_scrollController.animateTo(
0.0,
duration: Duration(seconds: 1),
curve: Curves.easeInOut,
);
}
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('ScrollController Example')),
body: Column(
children: [
Expanded(
child: ListView.builder(
controller: _scrollController,
itemCount: 50,
itemBuilder: (context, index) => ListTile(title: Text('Item $index')),
),
),
ElevatedButton(
onPressed: _scrollToTop,
child: Text('Scroll to Top'),
),
],
),
);
}
}
5. カスタムControllerの作成
独自のControllerを作成することで、特定のロジックを再利用可能にすることができます。
実装例
以下は、カウンターのロジックを管理するカスタムControllerの例です。
import 'package:flutter/material.dart';
class CounterController {
int _count = 0;
int get count => _count;
void increment() {
_count++;
}
void decrement() {
_count--;
}
}
6. Controllerを使う際の注意点
Controllerを使用する際には、以下の点に注意してください。
-
dispose
の呼び出し
TextEditingController
やScrollController
などのControllerは、使用後にdispose
メソッドを呼び出してリソースを解放する必要があります。これを怠ると、メモリリークの原因になります。 -
過剰な依存を避ける
Controllerに過剰なロジックを詰め込むと、コードの保守性が低下します。ControllerはあくまでUIとロジックをつなぐ役割に留め、複雑なロジックは別のクラスやサービスに分離することを推奨します。
7. まとめ
Controllerを活用することで、UIとロジックの分離が容易になり、コードの再利用性が向上します。本記事で紹介したTextEditingController
やScrollController
の基本的な使い方を参考に、Flutterアプリケーションの開発に役立ててください。また、カスタムControllerを作成することで、特定のロジックを効率的に管理することも可能です。
Discussion