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

执行Firebase Auth的signInWithEmailAndPassword时Flutter应用崩溃

解决Flutter Firebase Auth登录崩溃问题(AndroidX冲突+版本不兼容)

兄弟,我一眼就看出你的问题核心是AndroidX与旧Support库的混合冲突,再加上Firebase相关依赖、Gradle版本不匹配,才导致了ArrayMap找不到的致命崩溃。下面一步步帮你搞定:

1. 彻底统一到AndroidX,清理旧Support库

你的项目里同时用了AndroidX的multidex和旧的com.android.support.test测试库,这直接触发了类加载冲突。把应用级build.gradle里的测试依赖全部换成AndroidX版本:

dependencies {
    testImplementation 'junit:junit:4.12'
    // 替换成AndroidX的测试库
    androidTestImplementation 'androidx.test:runner:1.5.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    implementation 'com.google.firebase:firebase-analytics:17.0.1'
    implementation 'androidx.multidex:multidex:2.0.1'
}

同时,必须在项目根目录的gradle.properties里添加这两行,强制启用AndroidX转换:

android.useAndroidX=true
android.enableJetifier=true

2. 升级Gradle插件和Google服务版本

你的Gradle插件(3.2.1)和Google服务(4.2.0)版本太老,和firebase_auth:0.14.0+5完全不兼容。更新项目级build.gradle:

dependencies {
    // 升级到兼容AndroidX的Gradle插件版本
    classpath 'com.android.tools.build:gradle:3.6.4'
    // 升级Google服务到匹配版本
    classpath 'com.google.gms:google-services:4.3.10'
}

注意:Gradle插件3.6.4需要对应版本的Gradle,修改gradle/wrapper/gradle-wrapper.properties里的distributionUrl:

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

3. 统一Firebase依赖版本,避免兼容问题

不要用any指定cloud_firestore版本,要和firebase_auth版本匹配。修改pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: 0.12.10+2  # 和firebase_auth 0.14.0+5完全兼容的版本
  firebase_auth: 0.14.0+5

如果还是有依赖冲突,添加版本覆盖:

dependency_overrides:
  firebase_core: 0.4.4+3

4. 修正应用级build.gradle的测试配置

把测试运行器换成AndroidX版本:

defaultConfig {
    applicationId "com.example.testtool"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    // 替换成AndroidX的测试Runner
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}

最后:清理缓存并重建项目

做完所有修改后,执行以下操作确保生效:

  • 终端运行flutter clean
  • 打开Android Studio,点击File -> Invalidate Caches / Restart
  • 重新运行项目

另外提一句:你代码里的FirebaseUser在新版Firebase Auth中已经被User替代,虽然当前版本还能用,但以后升级时记得改成:

Future<String> signInWithEmailAndPassword(String email, String password)async{
  User user = (await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password)).user;
  return user.uid;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:19:00