# NubrickDispatcher

### インターフェース

```dart
class NubrickDispatcher {
  Future<void> dispatch(NubrickEvent event)
}
```

### .dispatch <a href="#dispatch" id="dispatch"></a>

dispatch関数は、アプリ内のさまざまなイベントを定義するために使用できます。これにより、**イベントデータがNubrickサーバーに送信**され、Nubrickプラットフォームにおいて様々な用途で活用することができます。

この関数を使用することで、特定のエクスペリメントを表示させるトリガーを設定できたり、アプリ内でのユーザーのアクションやイベントをトラッキングし、アプリのパフォーマンスやユーザーの行動分析を行うことが可能になります。

{% hint style="success" %}
具体的なユースケース

* アプリ内でモーダルを表示させるトリガーとして使用。例えば、特定のボタンがクリックされた際や、特定のページを閲覧した際にモーダルを表示するなど。
* アプリ内でのKPIを評価するために使用。特定の機能がユーザーによってどれくらい利用されているかや、特定のUIをどれだけタップしているかを計測するなど。
  {% endhint %}

#### イベントを送信する際のコード例

```dart
import 'package:nubrick_flutter/dispatcher.dart';

await NubrickDispatcher().dispatch(NubrickEvent("<CUSTOM_EVENT_NAME>"))
```

### 詳細な使用例

#### アプリのXX機能を利用しているユーザーをトラッキング

```dart
import 'package:nubrick_flutter/dispatcher.dart';

Button(
  child: const Text('Press me!')
  onPressed: () {
    NubrickDispatcher().dispatch(NubrickEvent('PRESS_XX_FEATURE'))
  }
)
```

#### アプリ内でYYページを表示したときにXXイベントをトリガーまたは収集

```dart
import 'package:nubrick_flutter/dispatcher.dart';

class NubrickNavigatorObserver extends NavigatorObserver {
  @override
  void didPush(Route<dynamic> route, Route<dynamic>? result) {
    super.didPop(route, result);
    String name = route.settings.name ?? '';
    if (name.isNotEmpty) {
      NubrickDispatcher().dispatch(NubrickEvent('NAVIGATION_$name'));
    }
  }

  @override
  void didPop(Route<dynamic> route, Route<dynamic>? result) {
    super.didPop(route, result);
    String name = route.settings.name ?? '';
    if (name.isNotEmpty) {
      NubrickDispatcher().dispatch(NubrickEvent('NAVIGATION_$name'));
    }
  }
}

// ...
MaterialApp(
  routes: {
    // ...
  },
  navigatorObservers: [
    NubrickNavigatorObserver(),
  ],
}

```
