Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振应用程序未初始化Firebase实例_Flutter_Firebase Authentication - Fatal编程技术网

Flutter 颤振应用程序未初始化Firebase实例

Flutter 颤振应用程序未初始化Firebase实例,flutter,firebase-authentication,Flutter,Firebase Authentication,我正在创建一个在Firebase中使用Google身份验证的Flatter应用程序 用户可以登录谷歌,但我需要在用户再次启动应用程序时保持用户登录 这是我的main.dart代码 import 'package:flutter/material.dart'; import 'login_page.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:firebase_core/firebase_core

我正在创建一个在Firebase中使用Google身份验证的Flatter应用程序

用户可以登录谷歌,但我需要在用户再次启动应用程序时保持用户登录

这是我的main.dart代码

import 'package:flutter/material.dart';
import 'login_page.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  final FirebaseAuth _auth = FirebaseAuth.instance;

  Future<void> _checkUserStatusGoogle() async {
    await Firebase.initializeApp();
    _auth
        .authStateChanges()
        .listen((User user) {
      if (user == null) {
        print('User is currently signed out!');
      } else {
        print('User is signed in!');
      }
    });
  }


  @override
  void initState() {

      Firebase.initializeApp().whenComplete(() {
        _checkUserStatusGoogle().then((value) {
          print('Check done done');

    });
  });
  }


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Login',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LoginPage(),
    );
  }
}
使用以下代码启动应用程序时出错:

E/flutter (15566): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
E/flutter (15566): #0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
E/flutter (15566): #1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
E/flutter (15566): #2      FirebaseAuth.instance (package:firebase_auth/src/firebase_auth.dart:37:47)
E/flutter (15566): #3      new MyApp (package:flutter_faro_turnos/main.dart:10:43)
E/flutter (15566): #4      main (package:flutter_faro_turnos/main.dart:6:23)
E/flutter (15566): #5      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:233:25)
E/flutter (15566): #6      _rootRun (dart:async/zone.dart:1190:13)
E/flutter (15566): #7      _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (15566): #8      _runZoned (dart:async/zone.dart:1630:10)
E/flutter (15566): #9      runZonedGuarded (dart:async/zone.dart:1618:12)
E/flutter (15566): #10     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:225:5)
E/flutter (15566): #11     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter (15566): #12     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
我的代码有什么问题

编辑:

新的main.dart代码:

import 'package:flutter/material.dart';
import 'login_page.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';

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

class MyApp extends StatelessWidget {
  
  final FirebaseAuth _auth = FirebaseAuth.instance;


  Future<void> _checkUserStatusGoogle() async {
    print('User is currently signed out!');
    FirebaseAuth.instance
        .authStateChanges()
        .listen((User user) {
      if (user == null) {
        print('User is currently signed out!');
      } else {
        print('User is signed in!');
      }
    });
  }


  @override
  void initState() {

    print ("estoy en initstate");

      Firebase.initializeApp().whenComplete(() {
        _checkUserStatusGoogle().then((value) {
          print('Check done done');

    });
  });
  }


  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Login',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: LoginPage(),
    );
  }
}
新错误输出:

E/flutter (18393): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: ServicesBinding.defaultBinaryMessenger was accessed before the binding was initialized.
E/flutter (18393): 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 (18393): 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 (18393): #0      defaultBinaryMessenger.<anonymous closure> (package:flutter/src/services/binary_messenger.dart:93:7)
E/flutter (18393): #1      defaultBinaryMessenger (package:flutter/src/services/binary_messenger.dart:106:4)
E/flutter (18393): #2      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:145:62)
E/flutter (18393): #3      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:151:35)
E/flutter (18393): #4      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
E/flutter (18393): #5      MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:347:40)
E/flutter (18393): #6      MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:30:36)
E/flutter (18393): #7      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:75:13)
E/flutter (18393): #8      Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:25)
E/flutter (18393): #9      main (package:flutter_faro_turnos/main.dart:7:18)
E/flutter (18393): #10     _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:233:25)
E/flutter (18393): #11     _rootRun (dart:async/zone.dart:1190:13)
E/flutter (18393): #12     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter (18393): #13     _runZoned (dart:async/zone.dart:1630:10)
E/flutter (18393): #14     runZonedGuarded (dart:async/zone.dart:1618:12)
E/flutter (18393): #15     _runMainZoned.<anonymous closure> (dart:ui/hooks.dart:225:5)
E/flutter (18393): #16     _startIsolate.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:301:19)
E/flutter (18393): #17     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:168:12)
E/flutter (18393): 
V/FA      (18393): Inactivity, disconnecting from the service

在MyApp的构造过程中,在调用其任何方法之前,这行代码正在中执行:

final FirebaseAuth _auth = FirebaseAuth.instance
由于尚未调用initializeApp,因此此操作将失败并引发异常。如图所示,您应该考虑在主叫中调用IrralIZEApp。这篇文章给出了几种选择。就个人而言,我会使用main


当应用程序启动时,您只需要一个调用来初始化EAPP,因此您还应该删除代码中的其他调用。

在构造MyApp的过程中,在调用MyApp的任何方法之前,这行代码正在中执行:

final FirebaseAuth _auth = FirebaseAuth.instance
由于尚未调用initializeApp,因此此操作将失败并引发异常。如图所示,您应该考虑在主叫中调用IrralIZEApp。这篇文章给出了几种选择。就个人而言,我会使用main


当你的应用程序启动时,你只需要一个调用来初始化EAPP,因此你也应该删除代码中的其他调用。

我已经删除了final FirebaseAuth _auth=FirebaseAuth.instance这一行,现在不会引发异常,但是永远不会调用函数_checkUserStatusGoogleAsync。我不建议删除这一行。我只建议将初始化EAPP的调用移到main中,这样您就可以在MyApp中的任何位置安全地调用FirebaseAuth.instance。我已将main.dart的新代码以及新的错误输出发布为edit。edit answer。少了一行。是的,谢谢你的更新。错误已消失,但未执行initstate,缺少什么?我已删除了final FirebaseAuth _auth=FirebaseAuth.instance行,现在不会引发异常,但函数_checkUserStatusGoogleAsync从未调用我不建议删除该行。我只建议将初始化EAPP的调用移到main中,这样您就可以在MyApp中的任何位置安全地调用FirebaseAuth.instance。我已将main.dart的新代码以及新的错误输出发布为edit。edit answer。少了一行。是的,谢谢你的更新。错误消失了,但initstate没有执行,缺少什么?