[Flutter]get_itの使い方
get_itとは?
Flutter / Dartのアプリでサービスロケーターパターンを簡単に実装できるように設計されたパッケージです。
サービスロケーターパターンとは?
定義については、ChatGPTに解説してもらいました↓
get_itを使うことで、アプリケーションの全体で使うことができる共通の場所から、サービスやオブジェクトを取得できるということですね。
get_itを使った簡単なコード例
公式ドキュメントから、get_itを使ったコード例を紹介します。
以下に示す例では、UserServiceを登録し、それをアプリケーションの他の部分で取得します。
まず、get_itパッケージをpubspec.yamlファイルに追加します。
dependencies:
get_it: ^7.2.0
次に、新しいlocator.dartというファイルを作成し、依存関係を全て登録します。
下記のコードでは、GetItインスタンスのregisterSingleton()メソッドを使用し、UserServiceをシングルトンとして登録しています。
(シングルトンは、クラスが一つだけのインスタンスを持ち、そのインスタンスにグローバルにアクセスできるようにするデザインパターンのこと。)
// locator.dart
import 'package:get_it/get_it.dart';
GetIt locator = GetIt.instance;
void setupLocator() {
locator.registerSingleton(UserService());
}
class UserService {
void performAction() {
print("Action performed by UserService!");
}
}
このUserServiceは、以下のようにlocatorを使用して取得することが可能です。
UserService userService = locator<UserService>();
main.dartファイルの中で使ってUserServiceを取得してみます。
// main.dart
import 'package:flutter/material.dart';
import 'locator.dart';
void main() {
setupLocator();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
final UserService userService = locator<UserService>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo Home Page'),
),
body: Center(
child: Text(
'You have pushed the button this many times:',
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
userService.performAction();
},
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
上記のコードでは、FloatingActionButtonがonPressed()押されたときに、get_itを通じてUserServiceのperformActionメソッドが呼び出され、Action performed by UserService!という文字列がprintで出力されます。
このように、get_itを使えば、いとも簡単に任意の場所でサービスを取得することが可能なので非常に便利です。