From 15bdf498f7e8ff9849af51fd5eb0be347aba966e Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 25 Jun 2025 01:48:50 +0200 Subject: [PATCH 1/2] disable Firebase Analytics on Linux and explicitly handle UnsupportedError in init * Add a `Platform.isLinux` guard to immediately disable analytics on unsupported platforms * Wrap `Firebase.initializeApp` in its own `try/catch` to catch `UnsupportedError` and short-circuit initialization * Complete the `_initCompleter` with an error on unsupported platforms to unblock awaiting callers * Preserve existing retry logic for other initialization failures without retrying when unsupported * Log debug messages when initialization is skipped or fails due to lack of Linux support --- lib/bloc/analytics/analytics_repo.dart | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/lib/bloc/analytics/analytics_repo.dart b/lib/bloc/analytics/analytics_repo.dart index 6a87eaf16f..0bcdaf9215 100644 --- a/lib/bloc/analytics/analytics_repo.dart +++ b/lib/bloc/analytics/analytics_repo.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:async'; +import 'dart:io'; import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_core/firebase_core.dart'; @@ -113,6 +114,14 @@ class FirebaseAnalyticsRepo implements AnalyticsRepo { /// Initialize with retry mechanism Future _initializeWithRetry(AnalyticsSettings settings) async { + // Firebase is not supported on Linux + if (Platform.isLinux) { + _isInitialized = false; + _isEnabled = false; + _initCompleter.completeError(UnsupportedError); + return; + } + try { if (kDebugMode) { log( @@ -131,9 +140,19 @@ class FirebaseAnalyticsRepo implements AnalyticsRepo { await loadPersistedQueue(); // Initialize Firebase - await Firebase.initializeApp( - options: DefaultFirebaseOptions.currentPlatform, - ); + try { + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + } on UnsupportedError { + _isInitialized = false; + _isEnabled = false; + if (kDebugMode) { + log('Firebase Analytics initializeApp failed with UnsupportedError'); + } + _initCompleter.completeError(UnsupportedError); + return; + } _instance = FirebaseAnalytics.instance; _isInitialized = true; From 9b1434e598903eb96df7e253c7da0f84352c0d15 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 25 Jun 2025 16:46:15 +0200 Subject: [PATCH 2/2] refactor: replace dart:io Linux check with foundation platform API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed import of dart:io and its `Platform.isLinux` check in AnalyticsRepo, switching to Flutter’s cross-platform API (`kIsWeb` + defaultTargetPlatform). --- lib/bloc/analytics/analytics_repo.dart | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/bloc/analytics/analytics_repo.dart b/lib/bloc/analytics/analytics_repo.dart index 0bcdaf9215..c6382221cc 100644 --- a/lib/bloc/analytics/analytics_repo.dart +++ b/lib/bloc/analytics/analytics_repo.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:async'; -import 'dart:io'; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; import 'package:firebase_analytics/firebase_analytics.dart'; import 'package:firebase_core/firebase_core.dart'; @@ -115,7 +116,7 @@ class FirebaseAnalyticsRepo implements AnalyticsRepo { /// Initialize with retry mechanism Future _initializeWithRetry(AnalyticsSettings settings) async { // Firebase is not supported on Linux - if (Platform.isLinux) { + if (!kIsWeb && defaultTargetPlatform == TargetPlatform.linux) { _isInitialized = false; _isEnabled = false; _initCompleter.completeError(UnsupportedError);