Исключение Firebase: [core/no-app] Приложение Firebase «[DEFAULT]» не создано — вызовите Firebase.initializeApp()IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Исключение Firebase: [core/no-app] Приложение Firebase «[DEFAULT]» не создано — вызовите Firebase.initializeApp()

Сообщение Гость »


Я реализовал одно приложение, которое поддерживает уведомления Firebase. Раньше мое приложение работало нормально. но когда я объединяю свою ветку уведомлений, мое приложение перестает работать. когда я запускаю свое приложение на iOS, оно показывает эту ошибку

Код: Выделить всё

Connecting to VM Service at ws://127.0.0.1:49769/gMyOshYEY=/ws
flutter: dependOnInheritedWidgetOfExactType() or dependOnInheritedElement() was called before _LoginScreenState.initState() was completed.
When an inherited widget changes, for example, if the value of Theme.of() changes, its dependent widgets are rebuilt. If the dependent widget's reference to the inherited widget is in a constructor or an initState() method, then the rebuilt dependent widget will not reflect the changes in the inherited widget.
Typically, references to inherited widgets should occur in widget build() methods. Alternatively, initialization based on inherited widgets can be placed in the didChangeDependencies method, which is called after initState and whenever the dependencies change thereafter.
flutter: [core/no-app] No Firebase App '[DEFAULT]' has been created.
and when i reload my application, i get this error

Код: Выделить всё

═ Exception caught by widgets library ═══════════════════════════════════
The following FirebaseException was thrown building _InheritedProviderScope(value: ):
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

The relevant error-causing widget was:
BlocProvider BlocProvider:file:///Users/admin/Documents/NadiTarangini/nt_guna/lib/main.dart:196:48

When the exception was thrown, this was the stack:

#0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:193:5)
method_channel_firebase.dart:193
#1      Firebase.app (package:firebase_core/src/firebase.dart:56:41)
firebase.dart:56
#2      FirebaseMessaging.instance (package:firebase_messaging/src/messaging.dart:32:47)
messaging.dart:32
#3      new NotificationManager (package:nadi_tarangini/DashboardScreen/AppBar/notification/controller/notification_manager.dart:18:66)
notification_manager.dart:18
#4      new _DashboardState (package:nadi_tarangini/DashboardScreen/screens/dashboard.dart:48:51)
dashboard.dart:48
#5      Dashboard.createState (package:nadi_tarangini/DashboardScreen/screens/dashboard.dart:40:37)
dashboard.dart:40
#6      new StatefulElement (package:flutter/src/widgets/framework.dart:5564:25)
framework.dart:5564
#7      StatefulWidget.createElement (package:flutter/src/widgets/framework.dart:776:38)
framework.dart:776
...     Normal element mounting (7 frames)
#14     _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11)
inherited_provider.dart:411
...     Normal element mounting (7 frames)
#21     SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11)
but it is working perfect in my android application
here is my code

Код: Выделить всё

@pragma('vm:entry-point')
List notificationsList = [];
Future firebaseMessagingBackgroundHandler(RemoteMessage message) async {
Handle background messages here
String? notificationTitle = message.notification?.title;
String? notificationBody = message.notification?.body;
if (notificationTitle != null && notificationBody != null) {
notificationsList = await NotificationManager().getNotificationsFromApi();
int badgeCount = notificationsList.where((n) =>!n.isRead).  length;
FlutterAppBadger.updateBadgeCount(badgeCount);
sendNotificationUnreadCount.add({'badgeCount': badgeCount, 'notifications': NotificationsList});
 
MaterialColor appclr = const MaterialColor(
0xFF00B3DC, // Основное значение цвета
{
50: Цвет (0xFFE6F7FB), // Тень 50< br /> 100: Цвет (0xFFB3E2F0), // Тень 100
200: Цвет (0xFF80CCE6), // Тень 200
300: Цвет (0xFF4DA7DB), // Тень 300
400: Цвет (0xFF267EA3), // Оттенок 400
500: Цвет (0xFF00B3DC), // Оттенок 500 (основной цвет)
600: Цвет (0xFF008FA7), // Оттенок 600
700: Цвет (0xFF00728B), // Тень 700
800: Цвет (0xFF00566F), // Тень 800
900: Цвет (0xFF003A54), // Тень 900
},
) ;

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

Данные ByteData =
await PlatformAssetBundle().load('assets/ ca/lets-encrypt-r3.pem');
окончательный контекст = SecurityContext.defaultContext;
context.setTrustedCertificatesBytes(data.buffer.asUint8List());
context.allowLegacyUnsafeRenegotiation = true;
HttpOverrides.global = MyHttpOverrides();

try {
await Firebase.initializeApp();
// FirebaseMessaging.instance.setForegroundNotificationPresentationOptions(
/ / alert: true, значок: true, sound: true);
// log("Firebase Initialized");
} catch (e) {
// print("Инициализация Firebase не удалась : $e");
 Bloc.observer = MyBlocObserver();

runApp(const MyApp());
}

class MyHttpOverrides расширяет HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback =
(сертификат X509Certificate, строковый хост, int порт) => true;
}

class MyApp расширяет StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MultiBlocProvider (
поставщики: [
// BlocProvider(
// create: (context) => AppBarBloc(context: context)),
BlocProvider(< br /> create: (context) => BannersBloc(context: context)),
BlocProvider(
create: (context) => ReferralsBloc(context: context)
BlocProvider< BlogsBloc>(
create: (context) => BlogsBloc(context: context)),
BlocProvider(
create: (context) => AppointmentBloc(context: context)),
BlocProvider(
create: (context) => IconContainerBloc(context: context)),
BlocProvider(
create: (context) => PatientScreenBloc( context: context)),

// При необходимости добавьте больше BlocProvider
],
child: Sizer(
builder: (context, Orientation, DeviceType) {< br /> return MaterialApp(
debugShowCheckedModeBanner: false,
title: «Нади Тарангини»,
navigatorKey: AppNavigator.navigatorKey,
theme: ThemeData(
PrimarySwatch: appclr ,
useMaterial3: false,
fontFamily: 'Roboto-Bold',
appBarTheme: const AppBarTheme(
backgroundColor:
ColorConstants.ntBlue, // Устанавливаем глобальную панель приложений цвет здесь
),
),
InitialRoute: "/",
onGenerateRoute: (настройки RouteSettings) {
if (settings.name == RecipeScreen.routeName) {
окончательные данные Map =
settings.arguments as Map;
return MaterialPageRoute(builder: (context) {
return RecipeScreen(recipeData) : data);
});
 return null;
},
маршруты: {
"/": (context) => const SplashScreen(),
"/OnboardingScreen": (context) => const OnboardingScreen(),
"/SignUpOnboardingScreen": (context) =>
const SignUpOnboardingScreen(),
"/PersonalScreen": (контекст) => const PersonalScreen(),
"/ProfessionalScreen": (контекст) => const ProfessionalScreen(),
"/ClinicScreen": (контекст) => const ClinicScreen (),
"/CredentialScreen": (контекст) => const CredentialScreen(),
"/LoginScreen": (context) => const LoginScreen(),
"/OtpVerificationScreen": (context) =>
const OtpVerificationScreen(),
"/ForgotPasswordScreen": (контекст) =>
const ForgotPasswordScreen(),
"/CreateAccountScreen": (контекст) => const CreateAccountScreen(),
"/ClinicDetailsScreen": (контекст ) => const ClinicDetailsScreen(),
"/SyncScreen": (context) => const SyncScreen(),
"/SettingsScreen": (context) => const SettingsScreen(),
"/LinkDeviceScreen": (context) => const LinkDeviceScreen(),
"/DeviceSubscription": (context) => const DeviceSubscription(),
"/HelpScreen": (context) => const HelpScreen (),
// "/DashboardScreen": (context) => const DashboardScreen(),
"/DashboardScreen": (context) => BlocProvider(
create: (context) = > BannersBloc(context: context),
дочерний элемент: const Dashboard(),
),
"/PatientsScreen": (context) => const SuppliesScreen(),
"/ PatientScreen": (контекст) => const PatientListScreen(),
"/PatientQueriesScreen": (контекст) =>
const PatientQueriesScreen(),
"/AddPatientScreen": (контекст) => const AddPatientScreen(),
"/NadiCaptureScreen": (context) => const NadiParikshaScreen(),
"/NadiDisplayScreen": (context) => const NadiDisplayScreen(),
"/AppointmentViewScreen ": (context) =>
const AppointmentViewScreen(),
// "/AppointmentDiaryScreen": (context) => const AppointmentDiaryScreen(),
"/UpdateDoctorDetailsScreen": (context) = >
const UpdateDoctorDetailsScreen(),
"/AddAppointmentScreen": (контекст) =>
const AddAppointmentScreen(),
"/PendingAppointmentScreen": (контекст) =>
const PendingAppointmentScreen(),
"/MissedAppointmentScreen": (контекст) =>
const MissedAppointmentScreen(),
"/EditAppointmentScreen": (контекст) =>
const EditAppointmentScreen( ),
"/AppointmentHistoryScreen": (context) =>
const AppointmentHistoryScreen(),
"/NotificationScreen": (context) => NotificationScreen(),
/// Маршруты Patinet
"/PatientRegistrationScreen": (контекст) =>
const PatientRegistrationScreen(),
"/PatientsHomeScreen": (контекст) => const PatientRegistrationScreen(),
"/ UpdatePatientDetailsScreen": (контекст) =>
const UpdatePatientDetailsScreen(),
"/ReferralHistory": (контекст) => const ReferralHistory(),
"/EditPatient": (контекст) => const EditAllDataPatient(),
"/EditAnonymousPatient": (контекст) => const EditAnonymous(),
"/DrawerMenu": (context) => DrawerMenu(),
"/ChangePasswordScreen" : (контекст) =>
const ChangePasswordScreen(),
},
);
},
),
);
}
}
это мой класс менеджера уведомлений

Код: Выделить всё

  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
List notificationsList = [];
// Generate a unique notification ID based on the current timestamp
int badgeCount = 0; // Add badgeCount variable
final List  _listeners = [];

void addNotificationListener(Function(dynamic) Listener) {
_listeners.add(listener);
 void RemoveNotificationListener( Функция (динамический) прослушиватель) {
_listeners.remove(listener);
 void notifyListeners (динамическое уведомление) {
for (последний прослушиватель в _listeners) {
прослушиватель(уведомление);
 
void init() {
// Инициализация FlutterLocalNotificationsPlugin
const инициализацияSettingsAndroid =
AndroidInitializationSettings(' @mipmap/ic_launcher');
DarwinInitializationSettings инициализацияSettingsDarwin =
const DarwinInitializationSettings(
requestAlertPermission: true,
requestBadgePermission: true,
requestSoundPermission: true,
defaultPresentBanner : true,
);
окончательная инициализацияSettings = InitializationSettings(
android: инициализацияSettingsAndroid,
iOS: инициализацияSettingsDarwin);

flutterLocalNotificationsPlugin.initialize(
InitializationSettings,
// onDidReceiveBackgroundNotificationResponse: (подробнее) {
// Navigator.pushNamedAndRemoveUntil(
// AppNavigator.navigatorKey.currentContext!,
// "/AppointmentViewScreen",< br /> // (маршрут) => false);
// },
onDidReceiveNotificationResponse: (подробнее) async {
List navNotifications = await getNotificationsFromApi();
// print("print get: ${ModalRoute.of(AppNavigator.navigatorKey.currentContext!)}");
// Navigator.of( AppNavigator.navigatorKey.currentContext!,).pushAndRemoveUntil(MaterialPageRoute(builder) : (context) =>
// NotificationScreen(notifications: navNotifications)), (Route маршрут) => false);
// print("все подробности $details");
if (details.payload?.contains("appointment")?? false) {
Navigator.pushNamedAndRemoveUntil(
AppNavigator.navigatorKey.currentContext!,
"/AppointmentViewScreen",
(маршрут) => false);
}else{
Navigator.pushAndRemoveUntil(
AppNavigator.navigatorKey.currentContext!,
MaterialPageRoute( builder: (контекст BuildContext) => NotificationScreen(notifications: navNotifications)),
ModalRoute.withName('/DashboardScreen'),
);

} ,
);
// Запрос разрешения на получение уведомлений
_firebaseMessaging.requestPermission();
// Обработка уведомлений, когда приложение находится на переднем плане
FirebaseMessaging.onMessage .listen((RemoteMessage message) async {
_handleNotification(message,false);
print("foreground");
});
// Обработка уведомлений, когда приложение в фоновом режиме и открывается пользователем
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async {
_handleNotification(message,true);
print("background");
});
// Инициализируем счетчик бейджей
FlutterAppBadger.updateBadgeCount(0);
// Регистрируем обработчик фоновых сообщений
FirebaseMessaging.onBackgroundMessage(firebaseMessagingBackgroundHandler);
/ / Получить токен FCM
_firebaseMessaging.getToken().then((String? token) {
if (kDebugMode) {
print("FCM Token: $token");
 });

Future getNotificationsFromApi() async {
try {
окончательный ответ = await ApiProvider().fetchNotificationsData(context: AppNavigator.navigatorKey.currentContext!);
окончательный список  jsonList = ответ['notifications_data'];
List уведомления = jsonList.map((json) => NotificationModel.fromJson(json)).toList();
Notifications.sort ((a, b) => b.timestamp.compareTo(a.timestamp));
уведомления = уведомления;
возврат уведомлений;
} catch (e) {
if (kDebugMode) {
print('Ошибка получения уведомлений: $e');
 return [];
 
void _handleNotification(RemoteMessage message,bool Navigation) async {
bool appAlreadyOpen = isAppAlreadyOpen();
print("приложение открыто: $appAlreadyOpen");
String? тип уведомления = message.data['тип_уведомления'] ?? '';
Строка? NotificationTitle = message.notification?.title;
Строка? NotificationBody = message.notification?.body;

if (notificationTitle != null && NotificationBody != null) {
// Отображение уведомления на панели задач
const androidPlatformChannelSpecifics = AndroidNotificationDetails(
'nadi_tarangini',
'nadi_tarangini_notifications',
важность: Importance.high,
приоритет: Priority.high,
);

const PlatformChannelSpecifics = NotificationDetails(
android: androidPlatformChannelSpecifics,
);
int NotificationId = DateTime.now().milliсекундыSinceEpoch ~/ 1000;
// Создание объекта NotificationModel
Final newNotification = NotificationModel(
id: NotificationId,
title: NotificationTitle,
тело: NotificationBody,
тип: NotificationType!,
отметка времени: DateTime.now(),
);
// Добавляем уведомление в список
// уведомления = await getNotificationsFromApi();
NotificationsList.add(newNotification);
await updateDashboardNotificationCount();

await flutterLocalNotificationsPlugin.show(
NotificationId,< br /> NotificationTitle,
NotificationBody,
PlatformChannelSpecifics,
payload: NotificationBody,
);
if (kDebugMode) {
print("Полученное уведомление: $notificationTitle - $notificationBody");
 if (notificationBody.contains("appointment") && навигации) {
Navigator.pushNamedAndRemoveUntil(
AppNavigator.navigatorKey.currentContext!,
"/AppointmentViewScreen",
(route) => false);
} else if (navigate) {
Navigator.pushAndRemoveUntil(
AppNavigator.navigatorKey .currentContext!,
MaterialPageRoute(builder: (BuildContext context) => NotificationScreen(notifications: Notifications)),
ModalRoute.withName('/DashboardScreen'));
// AppNavigator.navigatorKey.currentContext!,
// MaterialPageRoute(
// конструктор: (контекст) => NotificationScreen(
// уведомления: уведомления,
// ),
// ),
// );
  
Future markNotificationAsRead(List Notifications,< br /> int NotificationId, int index) async {
if (index != -1 && !notifications[index].isRead) {
Notifications[index].isRead = true;
await ApiProvider().markNotificationAsUnreadForDoc(
context: AppNavigator.navigatorKey.currentContext!,
NotificationId: NotificationId,
);
await updateDashboardNotificationCount();
 
Будущее updateDashboardNotificationCount() async {
List Notifications = await getNotificationsFromApi();
BadgeCount = Notifications.where((n) => ! n.isRead).length;
FlutterAppBadger.updateBadgeCount(badgeCount);
sendNotificationUnreadCount.add({'badgeCount': badgeCount, 'notifications': уведомления});

bool isAppAlreadyOpen() {
return RendererBinding.instance.hasScheduledFrame;
}```

[1]: https://i. stack.imgur.com/ZjH56.jpg


Источник: https://stackoverflow.com/questions/781 ... en-created
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • React-Native-Firebase – приложение Firebase «[DEFAULT]» не создано – вызовите firebase.initializeApp() (на Android, несм
    Anonymous » » в форуме Android
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Приложение Firebase '[default]' не было создано - сначала вызовите initializeapp ()
    Anonymous » » в форуме Javascript
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Ошибка: приложение Firebase '[default]' не было создано - Call Firebase app.initializeapp ()
    Anonymous » » в форуме IOS
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Ошибка: приложение Firebase '[default]' не было создано - Call Firebase app.initializeapp ()
    Anonymous » » в форуме IOS
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Приложение Firebase '[default]' не было создано - Call initializeapp () сначала [закрыто]
    Anonymous » » в форуме Javascript
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «IOS»