firebase / flutterfire

🔥 A collection of Firebase plugins for Flutter apps.
https://firebase.google.com/docs/flutter/setup
BSD 3-Clause "New" or "Revised" License
8.64k stars 3.96k forks source link

🐛 [firebase_core 0.5.0] Firebase.initializeApp() crashed when app is restarted #3480

Closed juanfdzoteb2 closed 4 years ago

juanfdzoteb2 commented 4 years ago

Bug report

Describe the bug

Firebase.initializeApp() (firebase_core plugin) crashes when is restarted and show the following log:

Click To Expand ``` E/flutter ( 7860): [ERROR:flutter/lib/ui/ui_dart_state.cc(171)] Unhandled Exception: Failed assertion: boolean expression must not be null E/flutter ( 7860): #0 new FirebaseOptions.fromMap (package:firebase_core_platform_interface/src/firebase_options.dart:76:55) E/flutter ( 7860): #1 MethodChannelFirebase._initializeFirebaseAppFromMap (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:44:23) E/flutter ( 7860): #2 ListMixin.forEach (dart:collection/list.dart:86:13) E/flutter ( 7860): #3 MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:34:10) E/flutter ( 7860): E/flutter ( 7860): #4 MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:75:13) E/flutter ( 7860): #5 Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:25) E/flutter ( 7860): #6 main (package:eb2_mindcare/main.dart:88:26) E/flutter ( 7860): E/flutter ( 7860): #7 _runMainZoned.. (dart:ui/hooks.dart:231:25) E/flutter ( 7860): #8 _rootRun (dart:async/zone.dart:1190:13) E/flutter ( 7860): #9 _CustomZone.run (dart:async/zone.dart:1093:19) E/flutter ( 7860): #10 _runZoned (dart:async/zone.dart:1630:10) E/flutter ( 7860): #11 runZonedGuarded (dart:async/zone.dart:1618:12) E/flutter ( 7860): #12 _runMainZoned. (dart:ui/hooks.dart:223:5) E/flutter ( 7860): #13 _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19) E/flutter ( 7860): #14 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12) ```

Steps to reproduce

Steps to reproduce the behavior:

Rerun an app initializing Firebase

Future<void> main() async {
// add this, and it should be the first line in main method
  WidgetsFlutterBinding.ensureInitialized();

  final MyApp myApp = MyApp();

  await Firebase.initializeApp();

    FlutterError.onError =  FirebaseCrashlytics.instance.recordFlutterError;
    runZoned(() {
      runApp(myApp);
    }, onError: FirebaseCrashlytics.instance.recordError);

  }

Expected behavior

I expect not crash when Firebase is initialized


Additional context

I suspect that is an error related with EMUI devices but i couldn't checked. The device of the log is FIG LX1 (Huawei P Smart) • android-arm64 • Android 9 (API 28)

This error doesn't happen in iOS


Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand ``` [✓] Flutter (Channel master, 1.22.0-10.0.pre.39, on Mac OS X 10.15.5 19F101, locale es-ES) [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 12.0) [✓] Chrome - develop for the web [✓] Android Studio (version 4.0) [!] IntelliJ IDEA Ultimate Edition (version 2019.1) ✗ Flutter plugin not installed; this adds Flutter specific functionality. ✗ Dart plugin not installed; this adds Dart specific functionality. [✓] Connected device (3 available) ! Doctor found issues in 1 category. ```

Flutter dependencies

Run flutter pub deps -- --style=compact and paste the output below:

Click To Expand ``` Dart SDK 2.10.0-77.0.dev Flutter SDK 1.22.0-10.0.pre.39 eb2_mindcare 0.0.2+1 dependencies: - audioplayers 0.15.1 [uuid path_provider flutter flutter_web_plugins] - charts_flutter 0.8.1 [charts_common collection flutter intl logging meta] - cloud_firestore 0.14.0+2 [flutter meta quiver firebase_core firebase_core_platform_interface cloud_firestore_platform_interface cloud_firestore_web] - cupertino_icons 0.1.3 - date_utils 0.1.0+3 [intl] - dio 3.0.10 [http_parser path] - firebase_analytics 5.0.16 [meta flutter firebase_analytics_web firebase_analytics_platform_interface] - firebase_auth 0.18.0+1 [meta firebase_core firebase_core_platform_interface firebase_auth_platform_interface firebase_auth_web flutter] - firebase_core 0.5.0 [firebase_core_platform_interface flutter quiver meta firebase_core_web] - firebase_crashlytics 0.2.0-dev.5 [flutter stack_trace firebase_core firebase_core_platform_interface firebase_crashlytics_platform_interface] - firebase_messaging 6.0.16 [meta platform flutter] - firebase_storage 4.0.0 [flutter firebase_core] - flutter 0.0.0 [characters collection meta typed_data vector_math sky_engine] - flutter_audio_recorder 0.5.5 [path flutter file] - flutter_localizations 0.0.0 [flutter intl characters collection meta path typed_data vector_math] - flutter_material_pickers 1.7.4 [flutter flutter_colorpicker intl meta file_picker file_picker_web] - flutter_speed_dial 1.2.5 [flutter] - get_it 4.0.4 [async meta] - google_fonts 1.1.0 [flutter http path_provider crypto pedantic] - highlighter_coachmark 0.0.3 [flutter] - jiffy 3.0.1 [intl] - oauth1 1.0.5 [crypto http] - path_provider 1.6.7 [flutter path_provider_platform_interface path_provider_macos] - percent_indicator 2.1.5 [flutter] - provider 4.3.2+1 [flutter nested collection] - shared_preferences 0.5.10 [meta flutter shared_preferences_platform_interface shared_preferences_linux shared_preferences_macos shared_preferences_web] - shimmer 1.1.1 [flutter] - store_redirect 1.0.2 [flutter] - url_launcher 5.5.2 [flutter url_launcher_platform_interface url_launcher_web url_launcher_linux url_launcher_macos] - webview_flutter 0.3.22+1 [flutter] dev dependencies: - flutter_launcher_icons 0.7.5 [image args yaml] - flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher meta source_span stream_channel string_scanner term_glyph typed_data] transitive dependencies: - archive 2.0.13 [crypto args path] - args 1.6.0 - async 2.5.0-nullsafety [collection] - boolean_selector 2.1.0-nullsafety [source_span string_scanner] - characters 1.1.0-nullsafety.2 - charcode 1.2.0-nullsafety - charts_common 0.8.1 [collection intl logging meta vector_math] - clock 1.1.0-nullsafety - cloud_firestore_platform_interface 2.0.1 [flutter meta collection firebase_core plugin_platform_interface] - cloud_firestore_web 0.2.0+1 [flutter flutter_web_plugins firebase http_parser meta firebase_core cloud_firestore_platform_interface js] - collection 1.15.0-nullsafety.2 - convert 2.1.1 [charcode typed_data] - crypto 2.1.5 [collection convert typed_data] - fake_async 1.1.0-nullsafety [clock collection] - file 5.2.1 [intl meta path] - file_picker 1.13.3 [flutter flutter_plugin_android_lifecycle file_picker_platform_interface] - file_picker_platform_interface 1.3.1 [flutter plugin_platform_interface] - file_picker_web 1.0.2+1 [file_picker_platform_interface flutter flutter_web_plugins] - firebase 7.3.0 [http http_parser js] - firebase_analytics_platform_interface 1.0.3 [flutter meta] - firebase_analytics_web 0.1.1 [flutter flutter_web_plugins firebase firebase_analytics_platform_interface meta] - firebase_auth_platform_interface 2.0.1 [flutter meta firebase_core plugin_platform_interface] - firebase_auth_web 0.3.0+1 [flutter flutter_web_plugins firebase meta http_parser intl firebase_core firebase_auth_platform_interface js] - firebase_core_platform_interface 2.0.0 [flutter meta plugin_platform_interface quiver] - firebase_core_web 0.2.0 [firebase firebase_core_platform_interface flutter flutter_web_plugins meta js] - firebase_crashlytics_platform_interface 1.0.0-dev.2 [flutter meta collection firebase_core plugin_platform_interface] - flutter_colorpicker 0.3.4 [flutter] - flutter_plugin_android_lifecycle 1.0.8 [flutter] - flutter_web_plugins 0.0.0 [flutter characters collection meta typed_data vector_math] - http 0.12.2 [http_parser path pedantic] - http_parser 3.1.4 [charcode collection source_span string_scanner typed_data] - image 2.1.14 [archive xml] - intl 0.16.1 [path] - js 0.6.2 - logging 0.11.4 - matcher 0.12.10-nullsafety [stack_trace] - meta 1.3.0-nullsafety.2 - nested 0.0.4 [flutter] - path 1.8.0-nullsafety - path_provider_linux 0.0.1+2 [path xdg_directories path_provider_platform_interface flutter] - path_provider_macos 0.0.4+3 [flutter] - path_provider_platform_interface 1.0.3 [flutter meta platform plugin_platform_interface] - pedantic 1.9.2 [meta] - petitparser 3.1.0 [meta] - platform 2.2.1 - platform_detect 1.4.0 [meta pub_semver] - plugin_platform_interface 1.0.2 [meta] - process 3.0.13 [file intl meta path platform] - pub_semver 1.4.4 [collection] - quiver 2.1.3 [matcher meta] - shared_preferences_linux 0.0.2+2 [file flutter meta path path_provider_linux shared_preferences_platform_interface] - shared_preferences_macos 0.0.1+10 [shared_preferences_platform_interface flutter] - shared_preferences_platform_interface 1.0.4 [meta flutter] - shared_preferences_web 0.1.2+7 [shared_preferences_platform_interface flutter flutter_web_plugins meta] - sky_engine 0.0.99 - source_span 1.8.0-nullsafety [charcode collection path term_glyph] - stack_trace 1.10.0-nullsafety [path] - stream_channel 2.1.0-nullsafety [async] - string_scanner 1.1.0-nullsafety [charcode source_span] - term_glyph 1.2.0-nullsafety - test_api 0.2.19-nullsafety [async boolean_selector collection meta path source_span stack_trace stream_channel string_scanner term_glyph matcher] - typed_data 1.3.0-nullsafety.2 [collection] - url_launcher_linux 0.0.1+1 [flutter] - url_launcher_macos 0.0.1+7 [flutter] - url_launcher_platform_interface 1.0.8 [flutter meta plugin_platform_interface] - url_launcher_web 0.1.3+1 [url_launcher_platform_interface platform_detect flutter flutter_web_plugins meta] - uuid 2.2.2 [crypto convert] - vector_math 2.1.0-nullsafety.2 - xdg_directories 0.1.2 [meta path process] - xml 4.4.1 [collection convert meta petitparser] - yaml 2.2.1 [charcode collection string_scanner source_span] ```

darshankawar commented 4 years ago

Hi @juanfdzoteb2, Usually, we should initialize the FirebaseApp right after WidgetsFlutterBinding.ensureInitialized(); inside main(), as below:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

Can you try below code sample and see if it works for you on same device ?

code sample ``` import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Material App', theme: ThemeData.dark(), home: Home(), ); } } class Home extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Material App Bar'), ), body: Center( child: Container( child: Text('Hello World'), ), ), floatingActionButton: FloatingActionButton( child: Icon(Icons.add), onPressed: () {}, ), ); } } ``` Also, just to make sure, can you try the same code on another Android device to see if the crash occurs there too ? Thanks.
juanfdzoteb2 commented 4 years ago

Your example is working fine on my device. I found the error. It is inside our native code. We generated a secondary instance of FirebaseApp that received an invalid gcmSenderID. When the flutter app is restarted try to get this invalid instance instead of the first instance created in the Firebase.initializeApp() and it crashed.

I have closed the issue because is our error. However I don't know if this is the expected behavior.

Thank you @darshankawar .

j05u3 commented 4 years ago

I just wanted to add that I was running into this issue because the onesignal sdk had created another firebase app without the projectId value in the options of the firebase app.