i have a code that looks like this :
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:meta/meta.dart';
import 'package:timezone/timezone.dart' as tz;
part 'reminder_event.dart';
part 'reminder_state.dart';
class ReminderBloc extends Bloc<ReminderEvent, ReminderState> {
ReminderBloc() : super(ReminderInitial());
int? selectedRepeatDayIndex;
late DateTime reminderTime;
int? dayTime;
@override
Stream<ReminderState> mapEventToState(
ReminderEvent event,
) async* {
if (event is RepeatDaySelectedEvent) {
selectedRepeatDayIndex = event.index;
dayTime = event.dayTime;
yield RepeatDaySelectedState(index: selectedRepeatDayIndex);
} else if (event is ReminderNotificationTimeEvent) {
reminderTime = event.dateTime;
yield ReminderNotificationState();
} else if (event is OnSaveTappedEvent) {
_scheuleAtParticularTimeAndDate(reminderTime, dayTime);
yield OnSaveTappedState();
}
}
Future _scheuleAtParticularTimeAndDate(
DateTime dateTime, int? dayTime) async {
final flutterNotificationsPlugin = FlutterLocalNotificationsPlugin();
final androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
'your other channel description');
final iOSPlatformChannelSpecifics = IOSNotificationDetails();
NotificationDetails platformChannelSpecifics = NotificationDetails(
android: androidPlatformChannelSpecifics,
iOS: iOSPlatformChannelSpecifics);
await flutterNotificationsPlugin.zonedSchedule(
1,
"Fitness",
"Hey, it's time to start your exercises!",
_scheduleWeekly(dateTime, days: _createNotificationDayOfTheWeek(dayTime)),
platformChannelSpecifics,
uiLocalNotificationDateInterpretation:
UILocalNotificationDateInterpretation.absoluteTime,
androidAllowWhileIdle: true,
matchDateTimeComponents: DateTimeComponents.dayOfWeekAndTime,
);
}
tz.TZDateTime _scheduleDaily(DateTime dateTime) {
final now = tz.TZDateTime.now(tz.local);
var timezoneOffset = DateTime.now().timeZoneOffset;
final scheduleDate = tz.TZDateTime.utc(now.year, now.month, now.day)
.add(Duration(hours: dateTime.hour, minutes: dateTime.minute))
.subtract(Duration(hours: timezoneOffset.inHours));
return scheduleDate.isBefore(now)
? scheduleDate.add(Duration(days: 1))
: scheduleDate;
}
tz.TZDateTime _scheduleWeekly(DateTime dateTime, {required List<int>? days}) {
tz.TZDateTime scheduleDate = _scheduleDaily(dateTime);
for (final int day in days ?? []) {
scheduleDate = scheduleDate.add(Duration(days: day));
}
return scheduleDate;
}
List<int> _createNotificationDayOfTheWeek(int? dayTime) {
switch (dayTime) {
case 0:
return [
DateTime.monday,
DateTime.tuesday,
DateTime.wednesday,
DateTime.thursday,
DateTime.friday,
DateTime.saturday,
DateTime.sunday
];
case 1:
return [
DateTime.monday,
DateTime.tuesday,
DateTime.wednesday,
DateTime.thursday,
DateTime.friday
];
case 2:
return [DateTime.saturday, DateTime.sunday];
case 3:
return [DateTime.monday];
case 4:
return [DateTime.tuesday];
case 5:
return [DateTime.wednesday];
case 6:
return [DateTime.thursday];
case 7:
return [DateTime.friday];
case 8:
return [DateTime.saturday];
case 9:
return [DateTime.sunday];
default:
return [];
}
}
}
Then I get this error on the line : final androidPlatformChannelSpecifics = AndroidNotificationDetails that looks like : error
I did add this line of code in analysis_options.yaml but didn't resolve the problem :
linter:
rules:
prefer_const_constructors: false
Can please someone help with this? Thanksssssssssssssssssssssss
CodePudding user response:
Error message tell you that you have provided 3 positionnal arguments where only two are needed.
If you refer to AndroidNotificationDetails Class : https://pub.dev/documentation/flutter_local_notifications/latest/flutter_local_notifications/AndroidNotificationDetails-class.html
You will see that only channleId and ChannelName arguments are positionnal. Others are name argument.
So right call is :
final androidPlatformChannelSpecifics = AndroidNotificationDetails(
'your other channel id',
'your other channel name',
channelDescription: 'your other channel description');
CodePudding user response:
In AndroidNotificationDetails try to remove one argument. It is looking for two arguments but you are trying to give three of them. In recent update they brought down from three to two arguments.
CodePudding user response:
If you are using the latest version of the flutter_local_notifications
package, then the description parameter is not a positional argument. Instead, you can set the value for channel description against the key channelDescription
.
It would be best to keep track of what version you are using and the documentation of how to use it. An example posted by the package owners for your use case can be found here