initialize method

Future<void> initialize({
  1. List<BloomNotificationChannel> channels = const [],
  2. String defaultAndroidIcon = '@mipmap/ic_launcher',
  3. bool requestPermissions = true,
  4. void onNotificationTap(
    1. NotificationResponse response
    )?,
})

Initializes notification subsystem, requests permissions if requestPermissions is true, and registers Android notification channels.

Example:

await notifications.initialize(
  onNotificationTap: (response) => print('Tapped payload: ${response.payload}'),
);

Implementation

Future<void> initialize({
  List<BloomNotificationChannel> channels = const [],
  String defaultAndroidIcon = '@mipmap/ic_launcher',
  bool requestPermissions = true,
  void Function(NotificationResponse response)? onNotificationTap,
}) async {
  if (_isInitialized) return;

  logger.info('BloomNotifications: Initializing native notifications with ${channels.length} channel(s)...');

  final initSettings = InitializationSettings(
    android: AndroidInitializationSettings(defaultAndroidIcon),
    iOS: const DarwinInitializationSettings(
      requestAlertPermission: true,
      requestBadgePermission: true,
      requestSoundPermission: true,
    ),
    linux: const LinuxInitializationSettings(defaultActionName: 'Open'),
  );

  try {
    await _plugin.initialize(
      initSettings,
      onDidReceiveNotificationResponse: onNotificationTap,
    );

    // Create Android Notification Channels (Always includes fallback default_channel for Android 8+)
    final androidPlugin = _plugin.resolvePlatformSpecificImplementation<
        AndroidFlutterLocalNotificationsPlugin>();
    if (androidPlugin != null) {
      // 1. Create fallback default channel
      const defaultChannel = BloomNotificationChannel(
        id: 'default_channel',
        name: 'General Notifications',
        description: 'General system and application alerts',
        importance: NotificationImportance.high,
      );
      await androidPlugin.createNotificationChannel(defaultChannel.toAndroidChannel());

      // 2. Create user-specified channels
      for (final ch in channels) {
        await androidPlugin.createNotificationChannel(ch.toAndroidChannel());
        logger.debug('BloomNotifications: Registered Android channel "${ch.id}"');
      }
    }

    if (requestPermissions) {
      await this.requestPermissions();
    }

    _isInitialized = true;
  } catch (e) {
    logger.warn('BloomNotifications: Initialization note: $e');
  }
}