0. Thêm dependency
Thêm flutter_local_notifications: ^9.1.2 vào pubspec.yaml.
Đừng quên sử dụng Pub get để tải về.

1. Thiết lập hình ảnh biểu tượng của bạn
Thêm hình ảnh vào đường dẫn này:
icon path: PROJECT_NAME\android\app\src\main\res\drawable\icon.png

2. Tạo một class NotificationService
Bạn sẽ nhập lớp này vào main.dart.(Chúng tôi sẽ thực hiện việc này ở bước sau 3.) Mã của lớp này ở cuối bài viết này.

3. Thực hiện một số thao tác khởi tạo
trong main()

4. Chức năng hiển thị cuộc gọi trực tiếp ở bất cứ đâu khi bạn muốn
showNotification()là một hàm của lớp NotificationService mà chúng ta vừa tạo trong tệp notification_service.dart.
Ví dụ: tôi muốn thông báo đẩy khi tôi nhấp vào một nút, sau đó tôi có thể gọi chức năng này trong _onPressed()nút. Mã ở dưới đây, hãy kiểm tra nó.
main.dart
import 'package:flutter/material.dart';
import 'service/notification_service.dart';
Future<void> main() async{
// Step 3. Initialization
WidgetsFlutterBinding.ensureInitialized();
NotificationService notificationService = NotificationService();
await notificationService.init();
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return const MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key}) : super(key: key);
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
/// Step 4. For pusing notification.
NotificationService notificationService = NotificationService();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("My Main Page"),
),
body: const Text('hello world'),
floatingActionButton: FloatingActionButton(
onPressed: () async{
/// When I click the button, the notification will be pushed.
/// Step 4. just call this function anywhere you want.
await notificationService.showNotification(0, 'This is title...', "Tis is body...",);
},
child: const Icon(Icons.radio_button_on),
),
);
}
}
notification_service.dart
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
/// Step 2. Create a NotificationService class
class NotificationService {
// Singleton pattern, https://en.wikipedia.org/wiki/Singleton_pattern
// 1.The _internal() construction is just a name often given to constructors
// that are private to the class
// 2.Use the factory keyword when implementing a constructor
// that does not create a new instance of its class.
NotificationService._internal();
static final NotificationService _notificationService = NotificationService._internal();
factory NotificationService() {
return _notificationService;
}
// Configuration for platform-specific initialization settings.
Future<void> init() async {
// Specifies the default icon for notifications.
// icon path: PROJECT_NAME\android\app\src\main\res\drawable\icon.png
const AndroidInitializationSettings androidInitializationSettings =
AndroidInitializationSettings("icon");
const InitializationSettings initializationSettings =
InitializationSettings(android: androidInitializationSettings);
await flutterLocalNotificationsPlugin.initialize(initializationSettings);
}
// Some configurations for platform-specific notification's details.
static const AndroidNotificationDetails _androidNotificationDetails =
AndroidNotificationDetails(
'ChannelId',
'ChannelName',
channelDescription: "Responsible for all local notifications",
playSound: true,
priority: Priority.high,
importance: Importance.high,
);
final NotificationDetails notificationDetails =
const NotificationDetails(android: _androidNotificationDetails);
// Now we need to call the show() method of FlutterLocalNotificationsPlugin.
// Show() is responsible for showing the local notification.
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
Future<void> showNotification(int id, String title, String body) async {
await flutterLocalNotificationsPlugin.show(id, title, body, notificationDetails);
}
}


Leave a Reply