You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Flutter Firebase加载FirebaseOptions资源的PlatformException错误?

解决Flutter Firebase初始化错误:无法从资源加载FirebaseOptions

问题详情

开发Flutter登录/注册应用时触发如下错误,已执行flutter clean未解决:

E/flutter ( 4727):
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled
Exception: PlatformException(java.lang.Exception: 无法从资源加载FirebaseOptions,请检查是否正确定义了values.xml。, Exception, Cause: null, Stacktrace: java.lang.Exception:无法从资源加载FirebaseOptions,请检查是否正确定义了values.xml。 E/flutter ( 4727): at
io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin.lambda$optionsFromResource$4$io-flutter-plugins-firebase-core-FlutterFirebaseCorePlugin(FlutterFirebaseCorePlugin.java:207)
E/flutter ( 4727): at
io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin$$ExternalSyntheticLambda2.run(Unknown
Source:4) E/flutter ( 4727): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
E/flutter ( 4727): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
E/flutter ( 4727): at java.lang.Thread.run(Thread.java:923) E/flutter
( 4727): , null) E/flutter ( 4727): #0
FirebaseCoreHostApi.optionsFromResource
(package:firebase_core_platform_interface/src/pigeon/messages.pigeon.dart:242:7)
E/flutter ( 4727): <asynchronous suspension> E/flutter ( 4727): #1
MethodChannelFirebase.initializeApp
(package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:89:25)
E/flutter ( 4727): <asynchronous suspension> E/flutter ( 4727): #2
Firebase.initializeApp (package:firebase_core/src/firebase.dart:43:31)
E/flutter ( 4727): <asynchronous suspension> E/flutter ( 4727): #3
main (package:firebase_signup/main.dart:7:3) E/flutter ( 4727):
<asynchronous suspension> E/flutter ( 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);

  @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),
        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")
            )
          ],
        ),
      ),
    );
  }
}

Wrapper页面代码

注意:代码中Stateful Widget存在语法错误,应改为StatefulWidget(去掉中间空格)

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

首页代码

注意:代码中Stateful Widget存在语法错误,应改为StatefulWidget(去掉中间空格)

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

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

  @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")),
      body: Center(
        child: Text('${user!.email}'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () => signout(),
        child: Icon(Icons.login_rounded),
      ),
    );
  }
}

解决方案

这个错误是Android端Firebase配置未正确同步导致的,按以下步骤排查:

  1. 验证google-services.json配置

    • 确保从Firebase控制台下载的google-services.json文件正确放置在android/app/目录下,文件内容对应当前项目。
  2. 检查Android Gradle配置

    • 项目根目录build.gradle中添加Google服务插件依赖:
      dependencies {
          // 其他依赖
          classpath 'com.google.gms:google-services:4.4.0' // 使用最新兼容版本
      }
      
    • 在android/app/build.gradle文件末尾添加:
      apply plugin: 'com.google.gms.google-services'
      
  3. 同步Firebase配置到values.xml

    • 重新下载google-services.json替换原文件,执行flutter pub get后,Android Studio会自动将配置同步到values.xml。若未自动同步,可手动检查该文件是否包含firebase_api_key、firebase_app_id等配置项。
  4. 确保Firebase初始化正确

    • 在main.dart中正确初始化Firebase:
      import 'package:firebase_core/firebase_core.dart';
      import 'package:flutter/material.dart';
      
      void main() async {
        WidgetsFlutterBinding.ensureInitialized();
        await Firebase.initializeApp();
        runApp(const MyApp());
      }
      
  5. 清理并重新构建项目

    • 执行flutter clean,删除android/.gradle目录,再执行flutter pub get和flutter run。

内容的提问来源于stack exchange,提问作者enhar_korfez_41

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:55:57