Flutter+Firebase注册时出现_throw及ProviderInstaller错误求助
解决Flutter Firebase注册环节的两个错误
错误1:external static Never _throw(Object error, StackTrace stackTrace);
这个错误源于createUser方法的返回值逻辑不一致:try块执行写入操作后未返回值,但catch块却返回了DocumentReference,导致方法返回类型混乱,触发Firebase内部的抛出逻辑。
修复方案
修改user_repository.dart中的createUser方法,明确返回类型并统一逻辑:
import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:rentease/SignUp/Model/user_model.dart'; class UserRepository extends GetxController { static UserRepository get instance => Get.find(); final _db = FirebaseFirestore.instance; // 明确返回类型为Future<void>,避免返回值混乱 Future<void> createUser(UserModel user) async { try { await _db.collection("Users").add(user.toJson()); Get.snackbar("Success", "Your Account has been created", snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.green, colorText: Colors.white); } catch (error) { // 显示具体错误信息,方便调试定位问题 Get.snackbar("Error", "Something went wrong: ${error.toString()}", snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red, colorText: Colors.white); // 若需要上层代码处理错误,可添加 rethrow; } } }
错误2:Local module descriptor class for com.google.android.gms.providerinstaller.dynamite not found.
这是Android端Google Play Services动态模块缺失的问题,可通过以下步骤修复:
修复方案
- 添加ProviderInstaller依赖
在android/app/build.gradle的dependencies块中补充依赖:
implementation 'com.google.android.gms:play-services-providerinstaller:17.0.0'
- 统一Firebase与Play Services版本
使用Firebase BOM管理版本,避免版本冲突:
- 在
android/build.gradle中配置统一版本参数:
ext { compileSdkVersion = 34 minSdkVersion = 21 targetSdkVersion = 34 firebaseBomVersion = "32.7.0" }
- 在
android/app/build.gradle中引入Firebase BOM:
dependencies { implementation platform('com.google.firebase:firebase-bom:32.7.0') implementation 'com.google.firebase:firebase-firestore' implementation 'com.google.android.gms:play-services-providerinstaller:17.0.0' }
- 清理缓存并重建项目
执行以下命令刷新项目:
flutter clean flutter pub get flutter run
内容的提问来源于stack exchange,提问作者Raian Ruku
相关产品推荐
相关产品推荐

