flutter-local-notifications-example
flutter-local-notifications-example copied to clipboard
Onselect notification function to navigate screen is not working in conditional part (else)
Here is the code. In this code at function onselectnotification while ontapping notification to navigate screen is not working in conditional part (else).Kindly solve this ASAP.
import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; import 'package:settleme/Screens/Dashboard/Settings/SettingsScreen.dart'; import 'package:settleme/Screens/Login/LoginScreen.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { await Firebase.initializeApp(); }
AndroidNotificationChannel? channel;
FlutterLocalNotificationsPlugin? flutterLocalNotificationsPlugin; late FirebaseMessaging messaging;
final GlobalKey navigatorKey = new GlobalKey();
Future main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp();
messaging = FirebaseMessaging.instance; messaging.subscribeToTopic("TopicToListen");
// Set the background messaging handler early on, as a named top-level function FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
if (!kIsWeb) { channel = const AndroidNotificationChannel( 'flutter_notification_title', // title 'flutter_notification_description', // description importance: Importance.high, enableLights: true, enableVibration: true, showBadge: true, playSound: true);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); await flutterLocalNotificationsPlugin! .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel!);
await FirebaseMessaging.instance .setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true, ); } runApp(MyApp()); }
class MyApp extends StatelessWidget { // This widget is the root of your application. @OverRide Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, navigatorKey: navigatorKey, title: 'Flutter Notification', theme: ThemeData( primarySwatch: Colors.blue, ), home: HomePage(), ); } } class HomePage extends StatefulWidget { final String? message;
HomePage({Key? key, this.message}) : super(key: key);
@OverRide _HomePageState createState() => _HomePageState(); }
class _HomePageState extends State { bool _isLoggedIn = false; @OverRide void initState() { super.initState();
final android = AndroidInitializationSettings('@drawable/ic_notification'); final iOS = IOSInitializationSettings(); final initSettings = InitializationSettings(android: android, iOS: iOS);
flutterLocalNotificationsPlugin ?.initialize(initSettings, onSelectNotification: onSelectNotification);
setupInteractedMessage();
FirebaseMessaging.onMessage.listen((message) async { RemoteNotification? notification = message.notification; AndroidNotification? android = message.notification?.android;
if (notification != null && android != null && !kIsWeb) { String action = jsonEncode(message.data);
flutterLocalNotificationsPlugin!.show(
notification.hashCode,
notification.title,
notification.body,
NotificationDetails(
android: AndroidNotificationDetails(
channel!.name,
channel!.description.toString(),
priority: Priority.high,
importance: Importance.max,
setAsGroupSummary: true,
styleInformation: DefaultStyleInformation(true, true),
largeIcon: DrawableResourceAndroidBitmap('@mipmap/ic_launcher'),
channelShowBadge: true,
autoCancel: true,
icon: '@drawable/ic_notification',
),
),
payload: action);
} }); FirebaseMessaging.onMessageOpenedApp .listen((message) => _handleMessage(message.data)); }
void onSelectNotification(String? payload) async { Future _prefs = SharedPreferences.getInstance(); final SharedPreferences prefs = await _prefs; _isLoggedIn = prefs.getBool('_isLoggedIn')??false; setState(() { if (_isLoggedIn == true) { // isLoading = true; navigatorKey.currentState!.push(MaterialPageRoute(builder: (context) => SettingsScreen())); } else{ navigatorKey.currentState!.push(MaterialPageRoute(builder: (context) => Loginpage())); }
});
// if(payload!.length<6) { // debugPrint('notification payload: $payload'); // await navigatorKey.currentState!.push(MaterialPageRoute(builder: (context) => SettingsScreen())); // } // else if(payload!.length>=6) { // debugPrint('notification payload: $payload'); // await navigatorKey.currentState!.push(MaterialPageRoute(builder: (context) => Loginpage())); // } }
Future setupInteractedMessage() async { await FirebaseMessaging.instance .getInitialMessage() .then((value) => _handleMessage(value != null ? value.data : Map())); }
void _handleMessage(Map<String, dynamic> data) { if (data['redirect'] == "Settings") { Navigator.push( context, MaterialPageRoute( builder: (context) => SettingsScreen(message: data['message']))); } else if (data['redirect'] == "Login") { Navigator.push( context, MaterialPageRoute( builder: (context) => Loginpage(message: data['message']))); } }
@OverRide Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("Home"), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( 'You will receive notification', ), ], ), ), ); } }