Blank Screen on running Flutter authentication

546

Add WidgetsFlutterBinding.ensureInitialized(); at first line of main function

Future<void> main() async {     
   WidgetsFlutterBinding.ensureInitialized();
   await Firebase.initializeApp();
   runApp(AuthExampleApp());
}

You can take a look at library example https://pub.dev/packages/firebase_auth/example

Share:
546
Very Useless
Author by

Very Useless

Updated on December 29, 2022

Comments

  • Very Useless
    Very Useless over 1 year

    I was trying to get authorization to work on my flutter app using Firebase but I don't know why I am getting a blank white screen on running my app.

    The message attached below was the console output, but no specific red coloured urgent error message was printed out.

    How do I resolve this issue?

    main.dart

    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';
    import 'package:provider/provider.dart';
    
    import 'widgets/authentication_service.dart';
    import 'primary_page.dart';
    import 'signin_page.dart';
    
    Future<void> main() async{
    
      await Firebase.initializeApp();
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MultiProvider(
          providers: [
            Provider<AuthenticationService>(
              create: (_) => AuthenticationService(FirebaseAuth.instance),
            ),
            StreamProvider(
              create: (context) => context.read<AuthenticationService>().authStateChanges,
            )
          ],
          child: MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'Flutter Auth',
            theme: ThemeData(
                primaryColor: Colors.pink,
                scaffoldBackgroundColor: Colors.black,
                textTheme: ThemeData.light().textTheme.copyWith(
                    body1: TextStyle(
                      color: Color.fromRGBO(0, 0, 0, 1),
                    ),
                    body2: TextStyle(
                      color: Color.fromRGBO(0, 0, 0, 1),
                      fontWeight: FontWeight.bold,
                    )
    
                )
            ),
            //home: LoginPage(),
            home: AuthenticationWrapper(),
          ),
        );
      }
    }
    
    class AuthenticationWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final firebaseUser = context.watch<User>();
    
        if (firebaseUser != null) {
          return PrimaryPage();
        }
        return SignInPage();
      }
    }
    

    I am sure that SignInPage() and PrimaryPage() are working correctly. Note: I've also tried to use an older version of package:provider which did not require initialData but that returns the same blank screen.

    Output in console:

    E/flutter (21352): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
    E/flutter (21352): If you're running an application and need to access the binary messenger before `runApp()` has been called (for example, during plugin initialization), then you need to explicitly call the `WidgetsFlutterBinding.ensureInitialized()` first.
    E/flutter (21352): If you're running a test, you can call the `TestWidgetsFlutterBinding.ensureInitialized()` as the first line in your test's `main()` method to initialize the binding.
    E/flutter (21352): #0      defaultBinaryMessenger.<anonymous closure> (package:flutter/src/services/binary_messenger.dart:97:7)
    E/flutter (21352): #1      defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:110:4)
    E/flutter (21352): #2      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:142:62)
    E/flutter (21352): #3      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:148:36)
    E/flutter (21352): #4      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:331:12)
    E/flutter (21352): #5      MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:344:41)
    E/flutter (21352): #6      MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:30:37)
    E/flutter (21352): #7      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:77:13)
    E/flutter (21352): #8      Firebase.initializeApp (package:firebase_core/src/firebase.dart:41:47)
    E/flutter (21352): #9      main (package:taskii/main.dart:11:18)
    E/flutter (21352): #10     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:140:25)
    E/flutter (21352): #11     _rootRun (dart:async/zone.dart:1354:13)
    E/flutter (21352): #12     _CustomZone.run (dart:async/zone.dart:1258:19)
    E/flutter (21352): #13     _runZoned (dart:async/zone.dart:1788:10)
    E/flutter (21352): #14     runZonedGuarded (dart:async/zone.dart:1776:12)
    E/flutter (21352): #15     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:133:5)
    E/flutter (21352): #16     _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:283:19)
    E/flutter (21352): #17     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
    E/flutter (21352): 
    
  • Very Useless
    Very Useless about 3 years
    Thanks, it works and I now understand why.
  • chandru
    chandru over 2 years
    What is WidgetsFlutterBinding.ensureInitialized(); actually mean??