DEV Community

Cover image for πŸš€ How I Added Local Notifications in Flutter Without Firebase
Mayur Pawar
Mayur Pawar

Posted on

πŸš€ How I Added Local Notifications in Flutter Without Firebase

Most developers reach for Firebase when they think of notifications in Flutter. But what if your app needs to work offline and you just want to send a reminder, alarm, or alert without setting up a full backend?

In this post, I’ll show you how I implemented local notifications using the flutter_local_notifications package β€” with zero Firebase and full offline support!

πŸ”§ What I Used

  • flutter_local_notifications
  • permission_handler (for Android 13+ permission)
  • A basic Flutter project

πŸŽ₯ Demo

Here's how it looks in action:

flutter_local_notification

🧱 Step-by-Step Implementation

  1. Add dependencies in pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  flutter_local_notifications: ^17.0.0
  permission_handler: ^11.0.1
Enter fullscreen mode Exit fullscreen mode
  1. Request Notification Permission (Android 13+)
import 'package:permission_handler/permission_handler.dart';

void requestNotificationPermission() async {
  if (await Permission.notification.isDenied) {
    await Permission.notification.request();
  }
}
Enter fullscreen mode Exit fullscreen mode

Also, add this in AndroidManifest.xml:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
Enter fullscreen mode Exit fullscreen mode
  1. Initialize the Plugin in main.dart
final flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  const AndroidInitializationSettings initializationSettingsAndroid =
      AndroidInitializationSettings('@mipmap/ic_launcher');

  const InitializationSettings initializationSettings =
      InitializationSettings(android: initializationSettingsAndroid);

  await flutterLocalNotificationsPlugin.initialize(initializationSettings);

  requestNotificationPermission(); // Ask at startup

  runApp(MyApp());
}
Enter fullscreen mode Exit fullscreen mode
  1. Show a Simple Notification
ElevatedButton(
          onPressed: () {
            flutterLocalNotificationsPlugin.show(
              0,
              'Linkedin',
              'New jobs for "application developer"',
              NotificationDetails(
                android: AndroidNotificationDetails(
                  "channelId",
                  "localNotification",
                  importance: Importance.max,
                  priority: Priority.high,
                ),
              ),
            );
          },
          child: Text('local notification'),
        )
Enter fullscreen mode Exit fullscreen mode

βœ… Fix: Enable Core Library Desugaring
Follow these steps:

  1. Enable desugaring in build.gradle (app-level): Open your android/app/build.gradle file and do the following:

Step 1: Add this in android {} block:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8

    // Enable desugaring
   isCoreLibraryDesugaringEnabled = true 
}
Enter fullscreen mode Exit fullscreen mode

Step 2: Add the desugaring dependency in dependencies {}:

dependencies {
    coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}
Enter fullscreen mode Exit fullscreen mode
  1. Sync and Rebuild: Run flutter clean

Then run flutter pub get

Finally, build again:
flutter run or use Android Studio’s run button

βœ… Bonus Tips

  • Use @mipmap/ic_launcher or a valid drawable icon β€” not from assets/.
  • You can schedule notifications too using zonedSchedule().
  • Works completely offline, perfect for reminders, alarms, and daily alerts!

Top comments (0)