如何解决从资源加载 FirebaseOptions 时出现的错误? (平台异常:java.lang.Exception)

问题描述 投票:0回答:1

我正在尝试使用 Firebase 创建一个简单的登录/注册应用程序,但遇到以下错误。
已经尝试过 flutter clean .

E/flutter ( 4727): [错误:flutter/runtime/dart_vm_initializer.cc(41)] 未处理的异常:PlatformException(java.lang.Exception: 无法从资源加载 FirebaseOptions。检查您是否已正确定义values.xml。 ,异常,原因:null,Stacktrace:java.lang.Exception:无法从资源加载FirebaseOptions。检查您是否已正确定义values.xml。E/flutter(4727):位于io.flutter.plugins.firebase.core。 FlutterFirebaseCorePlugin.lambda$optionsFromResource$4$io-flutter-plugins-firebase-core-FlutterFirebaseCorePlugin(FlutterFirebaseCorePlugin.java:207) E/flutter ( 4727): 在 io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin$$ExternalSyntheticLambda2.run(未知来源:4)E/flutter(4727):在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)E/flutter(4727):在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor) .java:641) E/flutter (4727): 在 java.lang.Thread.run(Thread.java:923) E/flutter (4727): , null) E/flutter (4727): #0 FirebaseCoreHostApi.optionsFromResource (包:firebase_core_platform_interface/src/pigeon/messages.pigeon.dart:242:7)E/flutter(4727):E/flutter(4727):#1 MethodChannelFirebase.initializeApp(包:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart :89:25) E/flutter (4727): E/flutter (4727): #2 Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:31) E/flutter (4727): E/扑动(4727):#3主(包:firebase_signup/main.dart:7:3)E/扑动(4727):E/扑动(4727):

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

//Login section

class Login extends StatefulWidget {
  const Login({Key? key}) : super(key: key); // key düzeltildi

  @override
  State<Login> createState() => _LoginState();
}

class _LoginState extends State<Login> {
  TextEditingController email = TextEditingController();
  TextEditingController password = TextEditingController();

  signin()async{
    await FirebaseAuth.instance.signInWithEmailAndPassword(
      email: email.text,
      password: password.text,
    );

  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Login")),
      body: Padding(
        padding: EdgeInsets.all(5), // Padding'in yanına virgül eklendi
        child: Column(
          children: [
            TextField(
              controller: email,
              decoration: InputDecoration(
                hintText: "Enter email",
              ),
            ),
            TextField(
              controller: password,
              decoration: InputDecoration(
                hintText: "Enter password",
              ),
            ),
            ElevatedButton(
                onPressed: ()=>signin(),
                child: Text("Login")
            )
          ],
        ),
      ),
    );
  }
}

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_signup/homepage.dart';
import 'package:firebase_signup/login.dart';
import 'package:flutter/material.dart';

class Wrapper extends StatefulWidget {
  const Wrapper({Key? key}) : super(key: key);

  @override
  State<Wrapper> createState() => _WrapperState();
}

class _WrapperState extends State<Wrapper> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: StreamBuilder(
        stream: FirebaseAuth.instance.authStateChanges(),
        builder: (context, snapshot) {
          if (snapshot.hasData) {
            return HomePage();
          } else {
            return Login();
          }
        },
      ),
    );
  }
}


import 'package:flutter/material.dart'; // Cupertino import yerine Material import edildi
import 'package:firebase_auth/firebase_auth.dart'; // FirebaseAuth import edildi

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key); // key düzeltildi

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final user = FirebaseAuth.instance.currentUser;

  signout() async {
    await FirebaseAuth.instance.signOut();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("asd")), // AppBar yazım hatası düzeltildi
      body: Center(
        child: Text('${user!.email}'), // Kullanıcının e-postası eklendi
      ),
      floatingActionButton: FloatingActi`your text`onButton(
        onPressed: () => signout(), // Fonksiyon çağrısı düzgün şekilde yapıldı
        child:Icon(Icons.login_rounded) ,
      ),
    );
  }
}
flutter firebase-realtime-database firebase-authentication
1个回答
0
投票

你应该更新你的代码 应该在任何与 firebase 相关的调用之前调用

Firebase.initializeApp
并添加选项参数。通过 firebase cli 更好地配置将自动生成文件

 await Firebase.initializeApp(
      options: FirebaseOptions(
    apiKey: 'key',
    appId: 'id',
    messagingSenderId: 'sendid',
    projectId: 'myapp',
    storageBucket: 'myapp-b9yt18.appspot.com',
  )
    );

创建了新应用程序,并使用 cli 模式对其进行配置,它将生成适用于所有平台的选项文件。 从 Flutte 3.19 开始,仅添加

google-services.json
似乎还不够

firebase cli 配置

生成文件后,您的 firebaseinit 代码应如下所示

 await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform
);
© www.soinside.com 2019 - 2024. All rights reserved.