skip to Main Content

This is my code

@override
Widget build(BuildContext context) {
 return Scaffold(
  body:StreamBuilder(
    stream:FirebaseFirestore.instance
           .collection('chats/r7T0B5xmCSgKQFLl2uNj/messages')
           .snapshots(),
           builder:(context,streamSnapshot) {
            return ListView.builder(
             itemCount: streamSnapshot.data!.docs.length,
              itemBuilder:(ctx, index) =>
            Container(
              padding: const EdgeInsets.all(8),
               child: const Text("This Work!"),
             ),);
           } ,),
        floatingActionButton: FloatingActionButton(
          onPressed: (){},
       ),
   );
  }
}

When use null check operator on itemCount: streamSnapshot.data!.docs.length, this line got an exception, with out null check there is an error

2

Answers


  1. Check null for data length use null safety:

         StreamBuilder(
            stream: FirebaseFirestore.instance
                .collection('chats/r7T0B5xmCSgKQFLl2uNj/messages')
                .snapshots(),
            builder: (context, streamSnapshot) {
              if (streamSnapshot.hasData) {
                return ListView.builder(
                  itemCount: streamSnapshot.data?.docs.length ?? 0,
                  itemBuilder: (ctx, index) => Container(
                    padding: const EdgeInsets.all(8),
                    child: const Text("This Work!"),
                  ),
                );
              } else {
                return Container();
              }
            },
          ),
    
    Login or Signup to reply.
  2. It will take some time to fetch data, so initially it will be null. The issue is caused by forcing not null with bang!.

    You can do itemCount: streamSnapshot.data?.docs.length,

    But better case,

    body: StreamBuilder(
      stream: FirebaseFirestore.instance
          .collection('chats/r7T0B5xmCSgKQFLl2uNj/messages')
          .snapshots(),
      builder: (context, streamSnapshot) {
        if (streamSnapshot.hasError) {
          return Text("Error");
        }
        if (streamSnapshot.hasData) {
          return ListView.builder(
            itemCount: streamSnapshot.data?.docs.length,
            itemBuilder: (ctx, index) => Container(
              padding: const EdgeInsets.all(8),
              child: const Text("This Work!"),
            ),
          );
        }
    
        return CircularProgressIndicator();
      },
    ),
    

    Find more about using StreamBuilder

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search