Skip to content

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

@Sarat-1997

Description

@Sarat-1997

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions