如何解决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配置未正确同步导致的,按以下步骤排查:
验证
google-services.json配置- 确保从Firebase控制台下载的
google-services.json文件正确放置在android/app/目录下,文件内容对应当前项目。
- 确保从Firebase控制台下载的
检查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'
- 项目根目录
同步Firebase配置到values.xml
- 重新下载
google-services.json替换原文件,执行flutter pub get后,Android Studio会自动将配置同步到values.xml。若未自动同步,可手动检查该文件是否包含firebase_api_key、firebase_app_id等配置项。
- 重新下载
确保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()); }
- 在
清理并重新构建项目
- 执行
flutter clean,删除android/.gradle目录,再执行flutter pub get和flutter run。
- 执行
内容的提问来源于stack exchange,提问作者enhar_korfez_41
相关产品推荐
相关产品推荐

