Не удается отправить локальные уведомления из моего приложения flutter

#flutter #flutter-dependencies

#флаттер #flutter-зависимости

Вопрос:

Я использую flutter_local_notifications зависимость в своем приложении для отправки локального уведомления после нажатия кнопки. В приложении при нажатии кнопки должно появиться локальное уведомление, и приложение должно перейти ко второму экрану. Однако выполняется только второе действие, и уведомления не отображаются. Я взял ссылки из этого руководства YouTube для создания локальных уведомлений в своем приложении.

notificationservice.dart Файл моего приложения:

 import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:timezone/timezone.dart' as tz;
import 'package:timezone/data/latest.dart' as tz;

class NotificationService {
  static final NotificationService _notificationService = NotificationService._internal();

  factory NotificationService() {
    return _notificationService;
  }

  final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =

 

    FlutterLocalNotificationsPlugin();
    
      NotificationService._internal();
    
      Future<void> initNotification() async {
        final AndroidInitializationSettings initializationSettingsAndroid =
        AndroidInitializationSettings('@drawable/ic_launcher');

    final IOSInitializationSettings initializationSettingsIOS =
    IOSInitializationSettings(
      requestAlertPermission: false,
      requestBadgePermission: false,
      requestSoundPermission: false,
    );

    final InitializationSettings initializationSettings =
    InitializationSettings(
      android: initializationSettingsAndroid,
      iOS: initializationSettingsIOS
    );

    await flutterLocalNotificationsPlugin.initialize(initializationSettings);
  }

  Future<void> showNotification(int id, String title, String body, int seconds) async {
    await flutterLocalNotificationsPlugin.zonedSchedule(
      id,
      title,
      body,
      tz.TZDateTime.now(tz.local).add(Duration(seconds: seconds)),
      const NotificationDetails(
        android: AndroidNotificationDetails(
          'main_channel',
          'Main Channel',
          channelDescription: 'Main channel notifications',
          importance: Importance.max,
          priority: Priority.max,
          icon: '@drawable/ic_launcher'
        ),
        iOS: IOSNotificationDetails(
          sound: 'default.wav',
          presentAlert: true,
          presentBadge: true,
          presentSound: true,
        ),
      ),
      uiLocalNotificationDateInterpretation: UILocalNotificationDateInterpretation.absoluteTime,
      androidAllowWhileIdle: true,
    );
  }
}
 

Реализация функции локального уведомления в TextButton виджете выглядит следующим образом:

 TextButton(
            onPressed: () {
                //lines of codes
                NotificationService().showNotification(1, "title", "body", 5);

                Navigator.of(context).pushNamed(CaseConfirmationScreen.routeName);
            },
            child: Text(
              "File Case",
              style: GoogleFonts.poppins(
                color: Colors.white,
                fontSize: 26.0,
                fontWeight: FontWeight.w500,
                letterSpacing: 2.0,
              ),
            ),
            style: TextButton.styleFrom(
              backgroundColor: Colors.red,
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(6.0),
              ),
              padding: const EdgeInsets.symmetric(
                horizontal: 22.0,
                vertical: 15.0,
              ),
            ),
          ),
 

Ошибка, отображаемая в консоли отладки, заключается в следующем.

Исходный код приложения в руководстве Youtube

Что я должен сделать, чтобы устранить эту ошибку?

Комментарии:

1. доступен ли ‘@drawable / ic_launcher’ в этом расположении?

Ответ №1:

Добавьте свой значок в [projectFolder]/android/ app/src/main/ res/ drawable (например, app_icon.png) и используйте это имя здесь:

 var initializationSettingsAndroid =
new AndroidInitializationSettings('@mipmap/ic_launcher');