![](/img/trans.png)
[英]The argument type 'Future<dynamic> Function(String)' can't be assigned to the parameter type 'void Function(String?)?'
[英]The argument type 'Future<void> Function(String?)' can't be assigned to the parameter type 'void Function(NotificationResponse)?
我正在嘗試使用最新版本 flutter_local_notifications: ^13.0.0 在我的 Flutter 項目中包含本地通知,但出現此錯誤:
無法將參數類型“Future Function(String?)”分配給參數類型“void Function(NotificationResponse)”?
onDidReceiveNotificationResponse : onSelectNotification
這是我的課:
class LocalNotificationService {
LocalNotificationService();
final _localNotificationService = FlutterLocalNotificationsPlugin();
final BehaviorSubject<String?> onNotificationClick = BehaviorSubject();
Future<void> initialize() async {
tz.initializeTimeZones();
const AndroidInitializationSettings androidInitializationSettings =
AndroidInitializationSettings('@drawable/ic_stat_android');
DarwinInitializationSettings iosInitializationSettings =
DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
onDidReceiveLocalNotification: onDidReceiveLocalNotification,
);
final InitializationSettings settings = InitializationSettings(
android: androidInitializationSettings,
iOS: iosInitializationSettings,
);
await _localNotificationService.initialize(
settings,
onDidReceiveNotificationResponse : onSelectNotification, //here is the error
);
}
Future<NotificationDetails> _notificationDetails() async {
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails('channel_id', 'channel_name',
channelDescription: 'description',
importance: Importance.max,
priority: Priority.max,
playSound: true);
const DarwinNotificationDetails iosNotificationDetails =
DarwinNotificationDetails();
return const NotificationDetails(
android: androidNotificationDetails,
iOS: iosNotificationDetails,
);
}
Future<void> showNotification({
required int id,
required String title,
required String body,
}) async {
final details = await _notificationDetails();
await _localNotificationService.show(id, title, body, details);
}
Future<void> showScheduledNotification(
{required int id,
required String title,
required String body,
required int seconds}) async {
final details = await _notificationDetails();
await _localNotificationService.zonedSchedule(
id,
title,
body,
tz.TZDateTime.from(
DateTime.now().add(Duration(seconds: seconds)),
tz.local,
),
details,
androidAllowWhileIdle: true,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
);
}
Future<void> showNotificationWithPayload(
{required int id,
required String title,
required String body,
required String payload}) async {
final details = await _notificationDetails();
await _localNotificationService.show(id, title, body, details,
payload: payload);
}
void onDidReceiveLocalNotification(
int id, String? title, String? body, String? payload) {
print('id $id');
}
Future<void> onSelectNotification(String? payload) async {
print('payload $payload');
if (payload != null && payload.isNotEmpty) {
onNotificationClick.add(payload);
}
}
}
我缺少什么?
onDidReceiveNotificationResponse
在回調時提供NotificationResponse
。 你可以獲得像這樣的payload
onDidReceiveNotificationResponse: (details) =>
onSelectNotification(details.payload),
要么
Future<void> onSelectNotification(NotificationResponse? response) async {
print('payload $response');
if (response?.payload != null && response!.payload!.isNotEmpty) {
onNotificationClick.add(response.payload);
}
}
這將用於onDidReceiveNotificationResponse: onSelectNotification
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.