Локальное уведомление Flutter, параметр int id - PullRequest
1 голос
/ 06 августа 2020

Я использую плагин локального уведомления flutter, чтобы уведомить пользователя о начале события.

Все события сохраняются в firebase с указанием даты и времени.

Если пользователь добавляет событие в свое расписание он получает уведомление.

Моя проблема в том, что плагину локального уведомления требуется int в параметре, а в firebase у меня есть тип идентификатора String (событие добавляется в firebase с другое веб-приложение, которое генерирует String ID).

Итак, есть ли способ заставить уведомление работать с String ID?

Это база данных:

введите описание изображения здесь

   lass DetailScreen extends StatefulWidget {
  final String id;
  DetailScreen(this.id);

  @override
  _DetailScreenState createState() => _DetailScreenState();
}

class _DetailScreenState extends State<DetailScreen> {
  String firstHalf;

  String secondHalf;

  bool flag = true;

  int selectedValue;

  bool isScheduled = false;

  bool isLoading = true;

  initState() {
    selectedValue = 0;
    Future.delayed(Duration(seconds: 0), () async {
      await getStatus();
      final response = await flutterLocalNotificationsPlugin
          .getNotificationAppLaunchDetails();
      if (response.didNotificationLaunchApp) {
        await Provider.of<ShowsModel>(context, listen: false).getShows();
        await Provider.of<ChannelModel>(context, listen: false).getChannels();
      }
      setState(() {
        isLoading = false;
      });
    });
    super.initState();
  }

  showNotification(String title, DateTime showTime) async {
    var android = AndroidNotificationDetails(
        'channel id', 'channel name', 'channel description',
        enableVibration: true,
        playSound: true,
        importance: Importance.High,
        priority: Priority.High);
    var iOS = IOSNotificationDetails();
    var platform = NotificationDetails(android, iOS);
    new DateTime.now().add(Duration(seconds: 10));
    await flutterLocalNotificationsPlugin.schedule(
        int.parse(widget.id),
        title,
        'The show is about to start in 15 minutes',
        showTime.subtract(Duration(minutes: 15)),
        platform,
        payload: widget.id);
  }

1 Ответ

0 голосов
/ 06 августа 2020

К сожалению, я не знаю, как выглядит реализация iOS для уведомлений, но реализация Android работает с int. И я думаю, что нет никакого способа обойти это.

Вы могли бы просто использовать функцию хэш-кода для генерации int ha sh для вашего String id:

String eventID = "asdnasjdnaskdnbaihbd2in1en213123";
int notificationId = eventID.hashCode;

Документация хэш-кода говорит:

  /**
   * Returns a hash code derived from the code units of the string.
   *
   * This is compatible with [operator ==]. Strings with the same sequence
   * of code units have the same hash code.
   */
  int get hashCode;

Означает, что пока ваши идентификаторы событий уникальны, это должно работать нормально.

...