bu paketi indirin.
flutter pub add flutter_local_notifications permission_handler
user-permission ları AndroidManifest.xml’e ekleyin.
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:label="notification"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
................................
...................................
..................................
..................................
Bu Flutter kodu, cihazda yerel bildirim gönderen bir uygulamadır. Uygulama başlatıldığında bildirim izni ister, saat 12:00 veya 16:57 olduğunda otomatik bildirim gösterir, ayrıca kullanıcı butona basarak manuel bildirim gönderebilir.
main.dart
import 'dart:async';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter/material.dart';
class NotificationService {
final FlutterLocalNotificationsPlugin notificationsPlugin =
FlutterLocalNotificationsPlugin();
Future<void> initNotification() async {
AndroidInitializationSettings initializationSettingsAndroid =
const AndroidInitializationSettings("@mipmap/ic_launcher");
var initializationSettingsIOS = DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
onDidReceiveLocalNotification:
(int id, String? title, String? body, String? payload) async {});
var initializationSettings = InitializationSettings(
android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
await notificationsPlugin.initialize(initializationSettings,
onDidReceiveNotificationResponse:
(NotificationResponse notificationResponse) async {});
}
notificationDetails() {
return const NotificationDetails(
android: AndroidNotificationDetails('channelId', 'channelName',
importance: Importance.max),
iOS: DarwinNotificationDetails());
}
Future showNotification(
{int id = 0, String? title, String? body, String? payLoad}) async {
return notificationsPlugin.show(
id, title, body, await notificationDetails());
}
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Permission.notification.request().then((permissionStatus) {
if (permissionStatus.isGranted) {
NotificationService().initNotification();
}
runApp(const MyApp());
});
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Notifications',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Timer? _timer;
@override
void initState() {
super.initState();
// Get current time
DateTime now = DateTime.now();
// If it's 12:00 right now, show the notification
if (now.hour == 12 && now.minute == 0) {
NotificationService().showNotification(
id: 1,
title: '12:00 Notification',
body: 'It\'s currently 12:00, showing notification.',
);
}
// Set up timer to check every second
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
// If it's 16:57 right now, show the notification
if (DateTime.now().hour == 16 && DateTime.now().minute == 57) {
NotificationService().showNotification(
id: 2,
title: '16:57 Notification',
body: 'It\'s currently 16:57, showing notification.',
);
// Cancel timer because once the notification is shown, we don't need to continue
_timer?.cancel();
}
});
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.black,
centerTitle: true,
title: Text("Flutter Notification Example",
style: TextStyle(color: Colors.white)),
),
body: SafeArea(
child: Center(
child: ElevatedButton(
child: const Text('Show Notification'),
onPressed: () {
NotificationService().showNotification(
id: 3,
title: 'Test Notification',
body: 'This is a test notification.');
},
),
),
),
);
}
}