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

Flutter应用集成Cloud Firestore后无法读取数据的问题求助

Hey there, let's work through this Firestore integration issue step by step. I noticed a few key spots in your code and setup that might be blocking you from reading data. Let's break them down and fix things up:

1. Wrong ConnectionState Handling in FutureBuilder

Since you're using get() (a one-time data fetch), the connection state will move from waiting directly to done once data is retrieved—active is meant for real-time streams (like snapshots()). Your current check for active means the list never gets rendered.

2. Incorrect Document Data Access

Firestore's DocumentSnapshot uses the data() method (not a data property) to pull the document's data. Your code uses snapshot.data[index].data['name'] which will throw an error; it should be snapshot.data[index].data()['name'].

3. Hardcoded Item Count

Setting itemCount: 2 isn't dynamic. Instead, use the length of the fetched documents so your list adapts to actual data.

4. Missing Error & Null Safety Checks

You should handle cases where the snapshot has an error or no data to avoid unexpected crashes.

5. Critical: Firebase Initialization

Don't forget to initialize Firebase in your main() function—this is a super common oversight that prevents Firestore from connecting properly.


Updated ListPage Code

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:cloud_firestore/cloud_firestore.dart';

class ListPage extends StatefulWidget {
  @override
  _ListPageState createState() => _ListPageState();
}

class _ListPageState extends State<ListPage> {
  Future getPosts() async {
    var firestore = FirebaseFirestore.instance;
    QuerySnapshot qn = await firestore.collection("events").get();
    return qn.docs;
  }

  @override
  Widget build(BuildContext context) {
    return Container(
      child: FutureBuilder(
        future: getPosts(),
        builder: (_, snapshot) {
          // Handle error case
          if (snapshot.hasError) {
            return Center(child: Text('Oops! Something went wrong: ${snapshot.error}'));
          }
          
          // Handle loading state
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: Text('Loading...'));
          }

          // Check if we have data to display
          if (!snapshot.hasData || (snapshot.data as List).isEmpty) {
            return Center(child: Text('No events found'));
          }

          // Render the list of events
          return ListView.builder(
            itemCount: (snapshot.data as List).length,
            itemBuilder: (_, index) {
              var document = snapshot.data[index] as DocumentSnapshot;
              var eventData = document.data() as Map<String, dynamic>;
              return ListTile(
                title: Text(eventData['name'] ?? 'No Name'),
              );
            },
          );
        },
      ),
    );
  }
}

Add Firebase Initialization in main.dart

Make sure your main() function initializes Firebase before running the app:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ListPage(), // Replace with your app's root page if needed
    );
  }
}

Quick Additional Checks

  • Project Configuration: Double-check that google-services.json (Android) or GoogleService-Info.plist (iOS) is correctly placed in your project (download these from the Firebase Console when adding your app).
  • Firestore Security Rules: For development, temporarily set rules to allow read, write: if true; (remember to tighten this for production!).
  • Dependency Versions: Your dependencies are a bit outdated. While they should work, consider updating them to the latest compatible versions for your SDK range.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:04:08