flutter-local-notifications-example icon indicating copy to clipboard operation
flutter-local-notifications-example copied to clipboard

Onselect notification function to navigate screen is not working in conditional part (else)

Open Sarat-1997 opened this issue 3 years ago • 0 comments

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', ), ], ), ), ); } }

Sarat-1997 avatar Aug 11 '22 04:08 Sarat-1997