LateInitializationError: Field 'snapshot' has not been initialized

Advertisements

There is no error in this code but this error is coming after running, Can someone please provide an example code of what’s needed to solve for the error below? "LateInitializationError: Field ‘snapshot’ has not been initialized, got error"

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

class HomeScreen extends StatefulWidget {
  const HomeScreen({Key? key}) : super(key: key);

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  //Declaring some variables:
  late StreamSubscription<QuerySnapshot> subscription;
  late List<DocumentSnapshot> snapshot;

  CollectionReference collectionReference =
      FirebaseFirestore.instance.collection('Article');

  passData(DocumentSnapshot snap) {
    Navigator.of(context).push(
      MaterialPageRoute(
        builder: (context) => PostScreen(snapshot: snap),
      ),
    );
  }

  @override
  void initState() {
    super.initState();
    subscription = collectionReference
        .orderBy('createdAt', descending: false)
        .snapshots()
        .listen((dataSnapshot) {
      setState(() {
        snapshot = dataSnapshot.docs;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        elevation: 0,
        title: const Text(
          'Messages',
          style: TextStyle(color: Colors.black87),
        ),
      ),
      body: SafeArea(
        child: Column(
          children: [
            SizedBox(
              height: 100,
              child: Padding(
                padding: const EdgeInsets.symmetric(horizontal: 20),
                child: ListView.builder(
                  itemCount: snapshot.length,
                  shrinkWrap: true,
                  scrollDirection: Axis.horizontal,
                  itemBuilder: (context, index) {
                    return InkWell(
                      onTap: () {
                        passData(snapshot[index]);
                      },
                      child: Column(
                        mainAxisAlignment: MainAxisAlignment.end,
                        children: [
                          Padding(
                            padding: const EdgeInsets.all(10.0),
                            child: CircleAvatar(
                              radius: 25.0,
                              backgroundImage: CachedNetworkImageProvider(
                                snapshot[index]['imgUrl'],
                              ),
                            ),
                          ),
                        ],
                      ),
                    );
                  },
                ),
              ),
            ),
            const SizedBox(height: 50),
            Expanded(
              child: ListView.builder(
                itemCount: snapshot.length,
                shrinkWrap: true,
                itemBuilder: (BuildContext context, int index) {
                  return InkWell(
                    onTap: () {
                      passData(snapshot[index]);
                    },
                    child: Column(
                      children: [
                        Padding(
                          padding: const EdgeInsets.all(15.0),
                          child: ListTile(
                            onTap: () {
                              passData(snapshot[index]);
                            },
                            leading: CircleAvatar(
                              radius: 30.0,
                              backgroundImage: CachedNetworkImageProvider(
                                  snapshot[index]['imgUrl']),
                            ),
                            title: Text(snapshot[index]['title']),
                            subtitle: Text(snapshot[index]['name']),
                          ),
                        ),
                      ],
                    ),
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}

Error Description in Android Studio:

======== Exception caught by widgets library =======================================================
The following LateError was thrown building SearchScreen(dirty, state: _SearchScreenState):
LateInitializationError: Field 'snapshot' has not been initialized.

What am I doing wrong here? I’d really appreciate some help. Thank you.

>Solution :

You need to initialise the snapshot list in the init() as:

  @override
  void initState() {
    super.initState();
    snapshots = [];// add this line
    subscription = collectionReference
        .orderBy('createdAt', descending: false)
        .snapshots()
        .listen((dataSnapshot) {
      setState(() {
        snapshot = dataSnapshot.docs;
      });
    });
  }

Leave a ReplyCancel reply