flutter如何实现本地app推送

在Flutter中如何实现本地App推送功能?我需要在Android和iOS平台上都支持本地通知,不使用第三方推送服务。请问有没有推荐的插件或原生代码实现方式?具体该如何配置和调用?最好能提供简单的示例代码。

2 回复

Flutter 实现本地推送可使用 flutter_local_notifications 插件。配置 Android 和 iOS 权限,初始化插件后调用 show 方法即可触发通知。

更多关于flutter如何实现本地app推送的实战系列教程也可以访问 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 8.0+ 需要通知渠道):

  • AndroidManifest.xml 添加权限(如果需要声音/振动):
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

iOS

  • Info.plist 添加权限描述:
<key>NSUserNotificationsUsageDescription</key>
<string>需要通知权限以展示本地推送</string>

3. 初始化插件

import 'package:flutter_local_notifications/flutter_local_notifications.dart';

final FlutterLocalNotificationsPlugin notificationsPlugin =
    FlutterLocalNotificationsPlugin();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化设置
  const AndroidInitializationSettings androidSettings =
      AndroidInitializationSettings('@mipmap/ic_launcher'); // 应用图标
  const DarwinInitializationSettings iosSettings =
      DarwinInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );
  
  final InitializationSettings initSettings = InitializationSettings(
    android: androidSettings,
    iOS: iosSettings,
  );
  
  await notificationsPlugin.initialize(initSettings);
  runApp(MyApp());
}

4. 请求权限(仅 iOS)

// iOS 需要显式请求权限
if (Platform.isIOS) {
  await notificationsPlugin
      .resolvePlatformSpecificImplementation<
          DarwinFlutterLocalNotificationsPlugin>()
      ?.requestPermissions(
        alert: true,
        badge: true,
        sound: true,
      );
}

5. 发送本地推送

Future<void> showNotification() async {
  const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
    'channel_id', // 渠道ID
    '频道名称',      // 渠道名称
    channelDescription: '频道描述',
    importance: Importance.max,
    priority: Priority.high,
  );
  
  const DarwinNotificationDetails iosDetails = DarwinNotificationDetails();
  
  const NotificationDetails platformDetails = NotificationDetails(
    android: androidDetails,
    iOS: iosDetails,
  );
  
  await notificationsPlugin.show(
    0,                 // 通知ID
    '通知标题',         // 标题
    '通知内容',         // 内容
    platformDetails,
    payload: '附加数据', // 可选,点击通知时传递的数据
  );
}

6. 处理通知点击

在初始化时配置点击回调:

await notificationsPlugin.initialize(
  initSettings,
  onDidReceiveNotificationResponse: (NotificationResponse response) {
    // 处理点击事件
    if (response.payload != null) {
      print('收到附加数据: ${response.payload}');
    }
  },
);

完整示例

// 在按钮点击时触发
ElevatedButton(
  onPressed: showNotification,
  child: Text('发送推送'),
)

注意事项

  • Android: 确保应用在前台或后台(不需要完全杀死)
  • iOS: 模拟器可能无法显示推送,建议使用真机测试
  • 可自定义通知图标、声音、振动等参数

通过以上步骤即可实现基本的本地推送功能。

回到顶部