Flutter如何实现本地推送

在Flutter中如何实现本地推送功能?我尝试使用flutter_local_notifications插件,但不知道如何配置通知的图标、声音和点击事件。具体需要修改Android的Manifest文件吗?iOS端是否需要额外设置?希望有完整的代码示例说明如何触发定时推送和点击跳转逻辑。

2 回复

Flutter中实现本地推送可使用flutter_local_notifications插件。步骤如下:

  1. 添加依赖到pubspec.yaml。
  2. 初始化插件并请求通知权限。
  3. 配置通知渠道(Android)与权限(iOS)。
  4. 使用show方法触发本地推送。 支持定时推送和自定义样式。

更多关于Flutter如何实现本地推送的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现本地推送,推荐使用 flutter_local_notifications 插件。以下是详细步骤:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  flutter_local_notifications: ^16.3.0

2. 配置平台设置

Android 配置

  • android/app/src/main/AndroidManifest.xml 中添加权限:
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

iOS 配置

  • ios/Runner/Info.plist 中添加:
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>

3. 初始化插件

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin notificationsPlugin =
    FlutterLocalNotificationsPlugin();

void initializeNotifications() async {
  const AndroidInitializationSettings androidSettings =
      AndroidInitializationSettings('@mipmap/ic_launcher');
  
  const DarwinInitializationSettings iosSettings =
      DarwinInitializationSettings(
        requestAlertPermission: true,
        requestBadgePermission: true,
        requestSoundPermission: true,
      );

  const InitializationSettings settings = InitializationSettings(
    android: androidSettings,
    iOS: iosSettings,
  );

  await notificationsPlugin.initialize(settings);
}

4. 请求权限(iOS)

await notificationsPlugin
    .resolvePlatformSpecificImplementation<
        DarwinFlutterLocalNotificationsPlugin>()
    ?.requestPermissions(
      alert: true,
      badge: true,
      sound: true,
    );

5. 显示本地推送

Future<void> showNotification() async {
  const AndroidNotificationDetails androidDetails = 
      AndroidNotificationDetails(
        'channel_id',
        'Channel Name',
        channelDescription: 'Channel Description',
        importance: Importance.max,
        priority: Priority.high,
      );

  const DarwinNotificationDetails iosDetails =
      DarwinNotificationDetails();

  const NotificationDetails details = NotificationDetails(
    android: androidDetails,
    iOS: iosDetails,
  );

  await notificationsPlugin.show(
    0, // 通知ID
    '通知标题',
    '通知内容',
    details,
  );
}

6. 定时推送示例

await notificationsPlugin.zonedSchedule(
  0,
  '定时通知',
  '这是预定时间的通知',
  tz.TZDateTime.now(tz.local).add(const Duration(seconds: 5)),
  const NotificationDetails(
    android: AndroidNotificationDetails(
      'channel_id',
      'Channel Name',
    ),
  ),
  uiLocalNotificationDateInterpretation: 
      UILocalNotificationDateInterpretation.absoluteTime,
);

注意事项:

  1. Android 8.0+ 需要创建通知渠道
  2. iOS 需要真机测试推送功能
  3. 定时推送需要添加 timezone 依赖处理时区

通过以上步骤即可在Flutter应用中实现本地推送功能。

回到顶部