Flutter 本地通知 int id 参数

Posted

技术标签:

【中文标题】Flutter 本地通知 int id 参数【英文标题】:Flutter local notification int id parameter 【发布时间】:2020-11-26 09:03:58 【问题描述】:

我正在使用颤振本地通知插件来通知用户事件开始。

所有事件都以日期和时间存储在 firebase 中。

如果用户将事件添加到他的日程表中,他会收到通知。

我的问题是本地通知插件在参数中需要一个 int,而在 firebase 中我的 id 类型为 String(该事件与另一个生成 String ID 的 webapp 一起添加到 firebase)。

那么有没有办法在颤振中使通知与字符串 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】:

不幸的是,我不知道通知的 iOS 实现是什么样的,但 Android 实现与 int 一起工作。而且我认为没有办法解决它。

您可以做的只是使用 hashcode 函数为您的 String id 生成一个 int 哈希:

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;

意味着只要您的 eventId 是唯一的,这应该可以正常工作。

【讨论】:

以上是关于Flutter 本地通知 int id 参数的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:如何向本地通知添加按钮

iOS开发——本地通知

Flutter 本地通知正文未显示所有通知文本(flutter_local_notifications 包)

由 GPS 位置触发的 Flutter 本地通知

Flutter:本地通知插件显示两次通知

如何在 Flutter 中多次安排单个本地通知