목차
- 사용 예시
✅ 사용 예시
1️⃣ pubspec.yaml 설정

2️⃣ 기타 설정
- android / app / src / main / AndroidManifest.xml
- ios / Runner / AppDelegate.swift


3️⃣ 알림.dart


4️⃣ main.dart


5️⃣ 테스트

✔️ 사용된 코드
1️⃣ 알림.dart
import 'dart:async';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
class FlutterLocalNotification{
FlutterLocalNotification._(); // private 생성자 (외부에서 FlutterLocalNotification() 으로 객체 생성 못하게 막음)
// flutterLocalNotificationsPlugin : 플랫폼 별 알림을 등록/관리/표시 (싱글톤 형태로, 앱 전체에서 하나만 공유됨)
static FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
// 앱 초기화
static init() async{
// Android 초기 설정
AndroidInitializationSettings initializationSettingsAndroid =
const AndroidInitializationSettings('mipmap/ic_launcher'); // 'mipmap/ic_launcher' : 앱 실행 시 알림 아이콘으로 쓸 리소스 지정
// iOS 초기 설정
DarwinInitializationSettings iosInitializationSettings =
const DarwinInitializationSettings( // 각각의 권한 요청 여부를 설정
requestAlertPermission: false,
requestBadgePermission: false,
requestSoundPermission: false,
);
// 플랫폼 별(Android, iOS) 세팅 설정을 통합
InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: iosInitializationSettings,
);
// flutterLocalNotificationsPlugin 인스턴스 초기화
// 알람을 띄울 떄 사용되는 객체
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
// 권한 설정
// IOSFlutterLocalNotificationsPlugin : iOS 전용 API (Android에서 실행하면 null 리턴)
static requestNotificationPermission() {
flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(
alert: true, // 알림 배너
badge: true, // 앱 아이콘에 숫자 배지 표시
sound: true // 알림 소리
);
}
// 알림 띄우기
static Future<void> showNotification() async {
// Android 알림 상세 설정
const AndroidNotificationDetails androidNotificationDetails =
AndroidNotificationDetails('channel_id', 'channel_name',
channelDescription: 'channel description',
importance: Importance.max,
priority: Priority.high,
showWhen: false
);
// 플랫폼 별(Android, iOS) 알림 설정을 통합
// iOS 알림 상세 설정은 '앱 아이콘에 빨란 배지 숫자 1 표시' 하나만 사용
const NotificationDetails notificationDetails = NotificationDetails(
android: androidNotificationDetails,
iOS: DarwinNotificationDetails(badgeNumber: 1)
);
// 실제 알림을 화면에 띄움
await flutterLocalNotificationsPlugin.show(
0, // 알림ID (고유값으로 추후 취소할 떄 필요)
'test title', // 알림 제목
'test body', // 알림 내용
notificationDetails // 위에서 만든 플랫폼 별 통합 알림 설정 메소드
);
}
}
2️⃣ main.dart
import 'package:flutter/material.dart';
import 'notification.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized(); // 네이티브 채널 초기화
await FlutterLocalNotification.init(); // init도 main에서 호출 권장
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(primarySwatch: Colors.blue),
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
void initState() {
// 초기화
FlutterLocalNotification.init();
// 3초 후 권한 요청
Future.delayed(const Duration(seconds: 3), () {
FlutterLocalNotification.requestNotificationPermission();
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: TextButton(
onPressed: () => FlutterLocalNotification.showNotification(),
child: const Text("알림 보내기"),
),
),
);
}
}
'IT 언어 > Flutter' 카테고리의 다른 글
| [Flutter] Form 양식 제출 (GlobalKey, TextFormField, ModalRoute) [맥북💻] (0) | 2025.09.29 |
|---|---|
| [Flutter] 웹뷰 (webview_flutter) [맥북💻] (0) | 2025.09.28 |
| [Flutter] GetX (Reactive State, Get.put()) [맥북💻] (0) | 2025.09.27 |
| [Flutter] GetX (Simple State, GetBuilder, Get.find, update()) [맥북💻] (0) | 2025.09.27 |
| [Flutter] BLoC 패턴 (factory, dynamic, required, rxdart, http) [맥북💻] (0) | 2025.09.25 |