You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Location插件的后台通知添加图片(仿Uber样式)

替代方案:使用flutter_local_notifications实现带图片的后台位置通知

由于Location插件的updateBackgroundNotification方法不支持自定义图片,你可以改用flutter_local_notifications插件,它支持高度自定义的通知样式,包括添加图片,完全能实现类似Uber的后台通知效果。

实现步骤:

  1. 添加依赖
    在pubspec.yaml中添加插件依赖:
dependencies:
  flutter_local_notifications: ^latest_version
  1. 初始化插件
    在项目初始化时配置通知插件(需适配Android和iOS的权限与通道设置):
import 'package:flutter_local_notifications/flutter_local_notifications.dart';

FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

Future<void> initNotifications() async {
  // Android 配置
  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher'); // 替换为你的通知小图标

  // iOS 配置
  const DarwinInitializationSettings initializationSettingsIOS =
      DarwinInitializationSettings(
    requestAlertPermission: true,
    requestBadgePermission: true,
    requestSoundPermission: true,
  );

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

  await flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
  1. 在位置更新回调中更新带图片的通知
    替换原来的updateBackgroundNotification调用,使用flutter_local_notifications的通知更新方法,通过BigPictureStyleInformation添加图片:
_locationSubscription = onLocationChanged(inBackground: true)
    .listen((LocationData currentLocation) async {
  // 配置通知内容
  const AndroidNotificationDetails androidDetails = AndroidNotificationDetails(
    'location_update_channel', // 通知通道ID
    '位置更新', // 通道名称
    channelDescription: '后台位置更新通知',
    importance: Importance.high,
    priority: Priority.high,
    styleInformation: BigPictureStyleInformation(
      DrawableResourceAndroidBitmap('@drawable/uber_style_image'), // 替换为你的本地图片资源
      largeIcon: DrawableResourceAndroidBitmap('@mipmap/ic_launcher'),
      contentTitle: '正在更新位置',
      summaryText: 'Location: ${currentLocation.latitude}, ${currentLocation.longitude}',
    ),
  );

  const NotificationDetails notificationDetails =
      NotificationDetails(android: androidDetails);

  // 显示/更新通知(使用同一个ID实现覆盖更新)
  await flutterLocalNotificationsPlugin.show(
    0, // 固定通知ID,实现覆盖更新
    '位置追踪中',
    'Location: ${currentLocation.latitude}, ${currentLocation.longitude}',
    notificationDetails,
    payload: 'location_update',
  );
});

注意事项:

  • Android:图片需放在android/app/src/main/res/drawable目录下,支持本地资源或通过网络下载后转为本地文件使用(可结合缓存类插件处理网络图片)。
  • iOS:需将图片添加到Xcode项目资源中,可参考插件文档调整DarwinNotificationDetails适配iOS通知样式。
  • 后台权限:确保已申请后台位置权限和通知权限,避免通知在后台不显示。

内容的提问来源于stack exchange,提问作者Neil-NotNeo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:32:08