I am not receiving the notification immediately after I install the application on iOS and use if for a first time. Once I restart the app, I will start receiving notifications.
I am calling the class below at the start of the app, and it's not working for the first time. I have also tried to call the class later in the code, but it's still not working.
Following is the code I wrote:
import 'dart:async';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:hrqoltesting/APIS/API.dart';
import 'package:hrqoltesting/APIS/ASsessment/assessment.dart';
import 'package:hrqoltesting/Assesmentselection/PetAssesment.dart';
import 'package:hrqoltesting/AssessmentQuestion/Assessmentquestion.dart';
import 'package:hrqoltesting/AssessmentQuestion/Progressbar.dart';
import 'package:hrqoltesting/Globals/globals.dart';
import 'package:hrqoltesting/Life%20Assessment%20content/Assessment%20content%20page.dart';
import 'package:hrqoltesting/notification/Medication%20Screen%20Dog%20.dart';
import 'package:progress_dialog/progress_dialog.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../const.dart';
import 'Medication Screen Cat.dart';
class NotificationClass extends StatefulWidget {
final Widget child;
NotificationClass({this.child});
@override
_NotificationClassState createState() => _NotificationClassState();
}
class _NotificationClassState extends State<NotificationClass>
with SingleTickerProviderStateMixin {
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
StreamSubscription iosSubscription;
StreamSubscription androidSubscription;
PushNotificationMessage notification;
bool _newNotification = false;
ProgressDialog pr;
getassessments(var pettype) async {
api callapi = new api();
SharedPreferences pref = await asd;
var x = await callapi.assessment(pettype);
return x;
}
@override
void initState() {
super.initState();
testing();
}
testing() async {
_firebaseMessaging
.requestNotificationPermissions(IosNotificationSettings());
await Future.delayed(Duration(seconds: 10));
iosSubscription = _firebaseMessaging.onIosSettingsRegistered.listen((data) {
});
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onResume: $message");
if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next librela injection is due soon. tap for more information") {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreen()));
} else if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next solensia injection is due soon. tap for more information") {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreencat()));
} else if (message["assessment_id"] != null) {
var date = DateTime.parse(message["due_date"]).add(Duration(days: 7));
if (DateTime.now().isBefore(date)) {
if (int.parse(message["assessment_id"]) == 1 ||
int.parse(message["assessment_id"]) == 3 ||
int.parse(message["assessment_id"]) == 4 ||
int.parse(message["assessment_id"]) == 7 ||
int.parse(message["assessment_id"]) == 9 ||
int.parse(message["assessment_id"]) == 10) {
globals.assessmentid = int.parse(message["assessment_id"]);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
assessmentquestion(globals.assessmentid),
));
} else {
globals.assessmentid = int.parse(message["assessment_id"]);
globals.opt.clear();
globals.ques.clear();
globals.answeropt.clear();
api callapi = new api();
var x = await callapi.questions();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => assessmentContent(),
));
}
} else {
List<assessments> assessment =
await getassessments(globals.pettype);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => petassesmentselection(
asses: assessment,
)),
);
}
}
setState(() {
_newNotification = true;
});
},
onLaunch: (Map<String, dynamic> message) async {
print("onResume: $message");
if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next librela injection is due soon. tap for more information") {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreen()));
// NotificationClass().createState().dispose();
} else if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next solensia injection is due soon. tap for more information") {
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreencat()));
} else if (message["assessment_id"] != null) {
var date = DateTime.parse(message["due_date"]).add(Duration(days: 7));
if (DateTime.now().isBefore(date)) {
if (int.parse(message["assessment_id"]) == 1 ||
int.parse(message["assessment_id"]) == 3 ||
int.parse(message["assessment_id"]) == 4 ||
int.parse(message["assessment_id"]) == 7 ||
int.parse(message["assessment_id"]) == 9 ||
int.parse(message["assessment_id"]) == 10) {
globals.assessmentid = int.parse(message["assessment_id"]);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
assessmentquestion(globals.assessmentid),
));
} else {
globals.assessmentid = int.parse(message["assessment_id"]);
globals.opt.clear();
globals.ques.clear();
globals.answeropt.clear();
api callapi = new api();
var x = await callapi.questions();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => assessmentContent(),
));
}
} else {
List<assessments> assessment =
await getassessments(globals.pettype);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => petassesmentselection(
asses: assessment,
)),
);
}
}
return true;
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
Progress().progressBar(context, pr, 0);
if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next librela injection is due soon. tap for more information") {
Progress().progressBar(context, pr, 1);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreen()));
// NotificationClass().createState().dispose();
} else if (message["body"].toString().toLowerCase() ==
"${globals.petname.toString().toLowerCase()}’s next solensia injection is due soon. tap for more information") {
Progress().progressBar(context, pr, 1);
Navigator.pushReplacement(context,
MaterialPageRoute(builder: (context) => medicationScreencat()));
} else if (message["assessment_id"] != null) {
var date = DateTime.parse(message["due_date"]).add(Duration(days: 7));
if (DateTime.now().isBefore(date)) {
if (int.parse(message["assessment_id"]) == 1 ||
int.parse(message["assessment_id"]) == 3 ||
int.parse(message["assessment_id"]) == 4 ||
int.parse(message["assessment_id"]) == 7 ||
int.parse(message["assessment_id"]) == 9 ||
int.parse(message["assessment_id"]) == 10) {
globals.assessmentid = int.parse(message["assessment_id"]);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
assessmentquestion(globals.assessmentid),
));
} else {
globals.assessmentid = int.parse(message["assessment_id"]);
globals.opt.clear();
globals.ques.clear();
globals.answeropt.clear();
api callapi = new api();
var x = await callapi.questions();
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => assessmentContent(),
));
}
} else {
List<assessments> assessment =
await getassessments(globals.pettype);
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => petassesmentselection(
asses: assessment,
)),
);
}
}
return true;
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(
sound: true, badge: true, alert: true, provisional: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
}
@override
Widget build(BuildContext context) {
return widget.child;
}
}