# Методы Flutter SDK
# Инициализация

## `Mindbox.instance.init`

Создайте конфигурацию и инициализируйте SDK:

```dart
final config = Configuration(
  domain: "домен API Mindbox",
  endpointIos: "endpoint для iOS",
  endpointAndroid: "endpoint для Android",
  subscribeCustomerIfCreated: true,
);

Mindbox.instance.init(configuration: config);
```
import Calloutdomainapimindbox from '/src/_Calloutdomainapimindbox.mdx';

<Calloutdomainapimindbox />

***

## Получение данных от SDK

### getDeviceUUID

Метод получения UUID устройства после присвоения. Может вызываться в любое время, но вернет строку в колбек только после инициализации.

```dart
Mindbox.instance.getDeviceUUID((uuid) {
  print(uuid);
});
```

### getToken

Метод получения token(APNS/FMS) после присвоения. Может вызываться в любое время, но вернет строку в коллбек только после инициализации.

```dart
Mindbox.instance.getToken((token) {
  print(token);
});
```

### sdkVersion

Свойство, в котором хранится текущая версия SDK.

```dart
Mindbox.instance.nativeSdkVersion
```

***

## Обработка кликов по уведомлениям

### onPushClickReceived

Метод для подписки на событие кликов по уведомлениям. Переданный коллбек вызывается в момент, когда пользователь нажимает на уведомление и запускается приложение.

В качестве аргументов передаются ссылка и payload, которые были в нажатом пуше. Если нажатие было по кнопке, то возвращается ссылка из кнопки, если по телу — то ссылка с тела.

```dart
Mindbox.instance.onPushClickReceived((link, payload) {
  switch (link) {
    case 'mindbox.cloud':
      Navigator.push(context,
        MaterialPageRoute(builder: (_) => ContentPage()));
      break;

    case 'mindbox.cloud/user':
      Navigator.push(context,
        MaterialPageRoute(builder: (_) => ProfilePage()));
      break;

    default:
      Navigator.push(context,
        MaterialPageRoute(builder: (_) => HomePage()));
  }
});
```

***

## Передача данных (выполнение операций)

Передача событий в Mindbox происходит через выполнение операций, заведенных в административном разделе. Операции можно выполнять в 2 режимах:

* асинхронно — API Mindbox отвечает 200 сразу, как получил данные. Обработка данных происходит в фоновом режиме.
* синхронно — API Mindbox начинает обрабатывать запрос в момент получения и отвечает актуальным статусом обработки.

[Подробное описание передачи событий через iOS SDK](https://developers.mindbox.ru/docs/ios-sdk-events)

### executeAsyncOperation

Метод выполнения операции в асинхронном режиме.

```dart
Mindbox.instance.executeAsyncOperation(
  operationSystemName: '<системное имя операции>',
  operationBody: {
    <Map<String, dynamic> с данными>
  },
);
```

### executeSyncOperation

Метод для выполнения операции в синхронном режиме. Данные возвращаются в переданные коллбеки.

```dart
Mindbox.instance.executeSyncOperation(
  operationSystemName: '<системное имя операции>',
  operationBody: {
    <Map<String, dynamic> с данными>
  },
  onSuccess: (data) {
    // обработка успешного ответа
  },
  onError: (error) {
    // обработка ошибки
  },
);
```

## Управление логированием

Для управления тем, что будет писать в консоль Mindbox SDK, есть специальный метод установки уровня логирования: setLoglevel.

Логи пишутся только в debug сборке. В продакшн режиме Mindbox SDK ничего не пишет в консоль.

```dart
Mindbox.instance.setLogLevel(logLevel: LogLevel.debug);
```

Варианты значения:

* LogLevel.verbose
* LogLevel.debug
* LogLevel.info
* LogLevel.warn
* LogLevel.error
* LogLevel.none

## registerInAppCallbacks

Метод используется для реализации своей обработки клика и закрытия In-App  
Подробнее можно прочитать в разделе [In-App](https://developers.mindbox.ru/docs/in-app#flutter)

```dart Dart
Mindbox.instance.registerInAppCallbacks(inAppCallbacks: [
  CustomInAppCallback(
    clickHandler: (id, redirectUrl, payload) {
      print(id);
      print(redirectUrl);
      print(payload);
    },
    dismissedHandler: (id) {
      print(id);
    },
  ),
]);
```

## refreshNotificationPermissionStatus (since 2.14.3)

Метод используется для обновления статуса разрешения на получение уведомлений

<Tabs defaultValue="1" className="w-full">
  <ScrollArea className="w-full">
    <TabsList className="flex w-max gap-2">
      <TabsTrigger value="1">Dart</TabsTrigger>
      <TabsTrigger value="2">Пример</TabsTrigger>
    </TabsList>
    <ScrollBar orientation="horizontal" />
  </ScrollArea>
  
  <TabsContent value="1">
  ```Dart
  Mindbox.instance.refreshNotificationPermissionStatus()
  ```
  </TabsContent>
  <TabsContent value="2">
  ```swift Пример
Future<void> requestPermissions() async {
  final isDenied = await Permission.notification.isDenied;

  if (isDenied) {
    final PermissionStatus status =
        await Permission.notification.request();

    Mindbox.instance.refreshNotificationPermissionStatus()
  }
}
```
  </TabsContent>
</Tabs>
