簡體   English   中英

Firebase 構建消費者異常<usermanager> // [core/no-app] 沒有創建 Firebase App '[DEFAULT]' - 調用 Firebase.initializeApp()</usermanager>

[英]Firebase Exception building a Consumer<UserManager> // [core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

我陷入了這個錯誤,我什至無法開始想辦法解決它。 我嘗試了很多方法來設置 Firebase.initializeApp(); 進入我的代碼,但我沒有設法以正確的方式做到這一點。 我的 pubspec.yaml 中已經有了這些包,包括 Firebase Core、Auth、Cloud Firestore...我相信我的用戶管理器是正確的,但我是否必須在其中調用 firebase 初始化? 我把初始化 Firebase 放在我的 main 上,就像這樣:

Future<void> main() async {
  runApp(MyApp());
  Firebase.initializeApp();
}

這是例外:

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following FirebaseException was thrown building Consumer<UserManager>(dirty, dependencies: [_InheritedProviderScope<UserManager>]):
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

The relevant error-causing widget was: 
  Consumer<UserManager> file:///C:/Users/adrie/Documents/renata_osorio_nails/lib/screens/login/login_screen.dart:40:22
When the exception was thrown, this was the stack: 
#0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
#1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
#2      FirebaseAuth.instance (package:firebase_auth/src/firebase_auth.dart:37:47)
#3      new UserManager (package:renata_osorio_nails/models/user_manager.dart:11:42)
#4      MyApp.build.<anonymous closure> (package:renata_osorio_nails/main.dart:20:22)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

我在登錄屏幕中的代碼如下:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:renata_osorio_nails/helpers/validators.dart';
import 'package:provider/provider.dart';
import 'package:renata_osorio_nails/models/user_manager.dart';
import 'package:renata_osorio_nails/models/user.dart';

class LoginScreen extends StatelessWidget {

  final TextEditingController emailController = TextEditingController();
  final TextEditingController passController = TextEditingController();
//Controladores de texto

  final GlobalKey<FormState> formKey = GlobalKey<FormState>();
  //Chave de formulário
  final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
//Chave Snackbar

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: scaffoldKey,
      appBar: AppBar(
        title: const Text('Entrar'),
        centerTitle: true,
        actions: [FlatButton(
          onPressed: (){
            Navigator.of(context).pushReplacementNamed('/signup');
          },
          textColor: Colors.white,
          child: const Text('CRIAR CONTA',
          style: TextStyle(fontSize: 14),),
        )],
      ),
      body: Center(
        child: Card(
            margin: const EdgeInsets.symmetric(horizontal: 16),
            child: Form(
              key: formKey,
              child: Consumer<UserManager>(
                builder: (_, userManager, child){
                  return ListView(
                    padding: const EdgeInsets.all(16),
                    shrinkWrap: true,
                    children: [
                      TextFormField(
                        controller: emailController,
                        enabled: !userManager.loading,
                        decoration: const InputDecoration(hintText: 'E-mail'),
                        keyboardType: TextInputType.emailAddress,
                        autocorrect: false,
                        validator: (email) {
                          if(!emailValid(email))
                            return 'E-mail inválido';
                          return null;
                        },
                      ),
                      const SizedBox(
                        height: 16,
                      ),
                      TextFormField(
                        controller: passController,
                        enabled: !userManager.loading,
                        decoration: const InputDecoration(hintText: 'Senha'),
                        autocorrect: false,
                        obscureText: true,
                        validator: (pass) {
                          if (pass.isEmpty || pass.length < 8)
                            return 'Senha inválida';
                          return null;
                        },
                      ),
                      Align(
                        alignment: Alignment.centerRight,
                        child: FlatButton(
                          onPressed: () {},
                          padding: EdgeInsets.zero,
                          child: const Text('Esqueci minha senha'),
                        ),
                      ),
                      const SizedBox(
                        height: 16,
                      ),
                      SizedBox(
                        height: 44,
                        child: RaisedButton(
                          onPressed: userManager.loading ? null : () {
                            if(formKey.currentState.validate()){
                              context.read()<UserManager>().signIn(
                                  user: AppUser(
                                    email: emailController.text,
                                    password: passController.text,
                                  ),
                                  onFail: (e){
                                    scaffoldKey.currentState.showSnackBar(
                                        SnackBar(
                                          content: Text ('Falha ao entrar: $e'),
                                          backgroundColor: Colors.red,
                                        )
                                    );
                                  },
                                  onSuccess: (){
                                    //TODO: Fechar a tela de login
                                  }
                              );}},
                          color: Theme.of(context).primaryColor,
                          disabledColor: Theme.of(context).primaryColor.
                              withAlpha(100),
                          textColor: Colors.white,
                          child: userManager.loading ?
                          CircularProgressIndicator(
                            valueColor: AlwaysStoppedAnimation(Colors.white),
                          ) :
                          const Text(
                            'Entrar',
                            style: TextStyle(fontSize: 18),
                          ),
                        ),
                      ),
                    ],
                  );
                },
              ),
            )),
      ),
    );
  }
}

我怎樣才能解決這個問題?

您是否檢查過該行是否已執行? 如果不是,請嘗試將此行放在runApp()調用之前或小部件的initState()方法中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM