0
votes

So I am creating a chat-app. I need to show the list of all users in the firebase by mentioning their user-name and email. I am getting the above stated error on line 56. Also if I remove the null check operator in the line

QuerySnapshot <Map<String, dynamic>>? searchResultSnapshot;

And replace late at the beginning it will produce late initialization error.

import 'package:chatapp/services/database.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class Search extends StatefulWidget {
  _Search createState() => _Search();
}

class _Search extends State<Search> {
  QuerySnapshot <Map<String, dynamic>>? searchResultSnapshot;
  bool isLoading = false;
  bool haveUserSearched = false;
  DatabaseMethods databaseMethods = new DatabaseMethods();
  var searchEditingController = TextEditingController();

  InitiateSearch() async {
    if (searchEditingController.text.isNotEmpty) {
      setState(() {
        isLoading = true;
      });
      await databaseMethods.GetUserByUsername(searchEditingController.text)
          .then((snapshot) {
        searchResultSnapshot = snapshot;
        print("$searchResultSnapshot");
        setState(() {
          isLoading = false;
          haveUserSearched = true;
        });
      });
    }
  }

  Widget UserList() {
    return Container(
      height: 500,
      child: ListView.builder(
          itemCount: searchResultSnapshot?.docs.length,
          itemBuilder: (context, index) {
            return UserTile(
              searchResultSnapshot?.docs[index].data()["userName"],
              searchResultSnapshot?.docs[index].data()["userEmail"],
            );
          }),
    );
  }

  Widget UserTile(String? userName, String? userEmail) {
    return Container(
      padding: EdgeInsets.symmetric(horizontal: 24, vertical: 16),
      child: Row(
        children: [
          Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              Text(
                userName!,                                               //error here
                style: TextStyle(color: Colors.white, fontSize: 16),
              ),
              Text(
                userEmail!,
                style: TextStyle(color: Colors.white, fontSize: 16),
              )
            ],
          ),
          Spacer(),
          GestureDetector(
            onTap: () {
              null;
            },
            child: Container(
              padding: EdgeInsets.symmetric(horizontal: 12, vertical: 8),
              decoration: BoxDecoration(
                  color: Colors.blue, borderRadius: BorderRadius.circular(24)),
              child: Text(
                "Message",
                style: TextStyle(color: Colors.white, fontSize: 16),
              ),
            ),
          )
        ],
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          titleSpacing: 0,
          leading: Builder(
            builder: (BuildContext context) {
              return IconButton(
                  icon: const Icon(
                    Icons.arrow_back_ios,
                    color: Colors.white,
                  ),
                  onPressed: () {
                    Navigator.pop(context);
                  });
            },
          ),
          title: Text('Search'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(15.0),
          child: Column(
            children: [
              Container(
                height: 36,
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(Radius.circular(10)),
                  boxShadow: [
                    BoxShadow(
                      color: Colors.black,
                    ),
                    BoxShadow(
                      color: Colors.black,
                      spreadRadius: -12.0,
                      blurRadius: 12.0,
                    ),
                  ],
                ),
                margin: EdgeInsets.symmetric(horizontal: 10.0, vertical: 8.0),
                child: Padding(
                  padding:
                      const EdgeInsets.symmetric(vertical: 0, horizontal: 10.0),
                  child: TextFormField(
                    style: TextStyle(color: Colors.black),
                    controller: searchEditingController,
                    decoration: InputDecoration(
                      border: InputBorder.none,
                      hintText: 'Search',
                      hintStyle: TextStyle(color: Colors.grey),
                      icon: GestureDetector(
                        onTap: () {
                          InitiateSearch();
                        },
                        child: Icon(
                          Icons.search,
                          color: Colors.grey,
                        ),
                      ),
                      suffixIcon: IconButton(
                        onPressed: searchEditingController.clear,
                        icon: Icon(
                          Icons.cancel_rounded,
                          color: Colors.grey,
                        ),
                      ),
                    ),
                  ),
                ),
              ), //Search
              SizedBox(
                height: 12,
              ),
              UserList(),
            ],
          ),
        ));
  }
}

Here is my Database file.

import 'package:cloud_firestore/cloud_firestore.dart';

class DatabaseMethods {
  GetUserByUsername(String username) async {
    return await
    FirebaseFirestore.instance
        .collection('users')
        .get()
        .then((QuerySnapshot querySnapshot) {
      querySnapshot.docs.forEach((doc) {
        print(doc["userName"]);
      });
    });
  }

  Future<void> UploadUserInfo(userData) async {
    FirebaseFirestore.instance.collection("users").add(userData).catchError((e) {
      print(e.toString());
    });
  }
}

I would really appritiate your help on this.