运行 Flutter 身份验证时的空白屏幕

时间:2021-05-02 12:23:47

标签: android firebase flutter dart firebase-authentication

我试图获得授权以使用 Firebase 处理我的 Flutter 应用程序,但我不知道为什么在运行我的应用程序时出现空白屏幕。

下面附加的消息是控制台输出,但没有打印出特定的红色紧急错误消息。

我该如何解决这个问题?

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();
  }
}

我确信 SignInPage()PrimaryPage() 工作正常。 注意:我还尝试使用旧版本的 package:provider,它不需要 initialData 但会返回相同的空白屏幕。

控制台输出:

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): 

1 个答案:

答案 0 :(得分:1)

在主函数的第一行添加WidgetsFlutterBinding.ensureInitialized();

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

你可以看看图书馆的例子https://pub.dev/packages/firebase_auth/example