見出し画像

[Flutter]get_itの使い方

get_itとは?

Flutter / Dartのアプリでサービスロケーターパターンを簡単に実装できるように設計されたパッケージです。

サービスロケーターパターンとは?

定義については、ChatGPTに解説してもらいました↓

サービスロケーターパターンは、ソフトウェア設計のパターンであり、クラスが直接依存関係を持つことなく他のクラスまたはモジュールにアクセスできるようにするパターンです。
つまり、依存関係を一箇所に「集中」させ、そこから必要なサービスを「取得」することができます。
このパターンは、アプリケーションのクラスが直接通信する代わりに、「サービスロケーター」という中央の場所から依存関係を取得することを許可します。これにより、クラス間の結合度を低く保つことができ、コードの再利用性とテスト可能性を向上させます。

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を通じてUserServiceperformActionメソッドが呼び出され、Action performed by UserService!という文字列がprintで出力されます。

このように、get_itを使えば、いとも簡単に任意の場所でサービスを取得することが可能なので非常に便利です。

いいなと思ったら応援しよう!