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

Flutter Firebase教程报错求助:跟随官方教程后遇两类错误

解决Flutter Firebase教程中的两个常见错误

刚跟着官方Flutter Firebase教程操作后碰到了这两个问题?我来一步步帮你解决!

一、参数类型不匹配错误

错误详情

Error: lib/main.dart:84:31: Error: The argument type 'Map<String, dynamic> Function()' can't be assigned to the parameter type 'Map<String, dynamic>'.
- 'Map' is from 'dart:core'.
: this.fromMap(snapshot.data, reference: snapshot.reference);
^

问题原因

这是因为cloud_firestore 0.14.x版本中,DocumentSnapshot的data属性变成了一个方法(data()),而不是直接返回Map对象。教程里的代码还是旧版本的写法,所以会出现类型不匹配的错误。

解决方案

按照@Peter Haddad的建议,把snapshot.data改成snapshot.data()即可:

this.fromMap(snapshot.data(), reference: snapshot.reference);

二、Firebase App未初始化错误

错误详情

构建MyHomePage时抛出FirebaseException:[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
错误关联组件:MyHomePage file:///D:/Private/Project/workspace_flutter/baby_names/lib/main.dart:12:13
堆栈信息:
#0 MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
#1 Firebase.app (package:firebase_core/src/firebase.dart:52:41)
#2 FirebaseFirestore.instance (package:cloud_firestore/src/firestore.dart:43:21)
#3 Firestore.instance (package:cloud_firestore/src/firestore.dart:246:30)
#4 _MyHomePageState._buildBody (package:baby_names/main.dart:35:25)

问题原因

从Firebase Flutter SDK的新版本开始,必须手动初始化Firebase App才能使用任何Firebase服务,而旧版教程可能没有更新这一步骤,导致调用Firestore时找不到已初始化的App实例。

解决方案

  1. 添加firebase_core依赖
    在你的pubspec.yaml中添加firebase_core依赖(cloud_firestore依赖它来完成初始化):

    dependencies:
      flutter:
        sdk: flutter
      cloud_firestore: ^0.14.0+2
      firebase_core: ^0.7.0 # 版本可根据实际情况调整
    

    然后执行flutter pub get拉取依赖。

  2. 修改main函数初始化Firebase
    将你的main函数改为异步函数,先完成Firebase初始化再启动App:

    import 'package:firebase_core/firebase_core.dart';
    import 'package:flutter/material.dart';
    
    void main() async {
      // 确保Flutter绑定初始化完成,才能执行异步操作
      WidgetsFlutterBinding.ensureInitialized();
      // 初始化Firebase App
      await Firebase.initializeApp();
      runApp(MyApp());
    }
    

这样修改后,Firebase会在App启动时完成初始化,再调用Firestore就不会出现这个错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:38:11