Firebase stream returns empty list

Rohith Nambiar

In my firestore db I have a collection of users and within that a collection of arrays. I am able to successfully add a new array to the collection of arrays but the problem is in my ArrayController, the Firestore Stream returns an empty list even though there are docs within the collection. What I want is to display the Arrays in a listview.

ArrayController

class ArrayController extends GetxController {
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;

  late CollectionReference collectionReference;

  RxList<ArrayModel> arrays = RxList<ArrayModel>([]);

  @override
  void onInit() {
    super.onInit();
    String uid = Get.find<AuthController>().user!.uid;
    collectionReference =
        _firestore.collection("users").doc(uid).collection("arrays");
    arrays.bindStream(getAllArrays()); // empty list
  }

  Stream<List<ArrayModel>> getAllArrays() {
    return collectionReference.snapshots().map(
        (query) => query.docs.map((item) => ArrayModel.fromMap(item)).toList());
  }
}

ArrayModel

class ArrayModel {
  String? title;
  String? id;
  List<Todo>? todos;
  Timestamp? dateCreated;

  ArrayModel({this.title, this.id, this.todos, this.dateCreated});

  ArrayModel.fromMap(DocumentSnapshot doc) {
    title = doc["title"];
    id = doc.id;
    todos = doc["todos"];
    dateCreated = doc["dateCreated"];
  }
}

ListView

GetX<ArrayController>(
                            init: Get.put<ArrayController>(ArrayController()),
                            builder: (ArrayController arrayController) {
                              return ListView.separated(
                                  itemBuilder: (context, index) =>
                                      GestureDetector(
                                        onLongPress: () {
                                          Navigator.of(context).push(
                                              Routes.routeToArrayScreenIndex(
                                                  index));
                                        },
                                        onTap: () {
                                          Navigator.of(context).push(
                                              Routes.routeToHomeScreen(index));
                                        },
                                        child: Dismissible(
                                          key: UniqueKey(),
                                          onDismissed: (_) {
                                            HapticFeedback.heavyImpact();
                                            Database().deleteArray(
                                                uid,
                                                arrayController
                                                        .arrays[index].id ??
                                                    '');
                                          },
                                          child: Container(
                                            child: Padding(
                                              padding: const EdgeInsets.only(
                                                  right: 25.0),
                                              child: Row(
                                                mainAxisAlignment:
                                                    MainAxisAlignment
                                                        .spaceBetween,
                                                children: [
                                                  Padding(
                                                    padding:
                                                        const EdgeInsets.only(
                                                            left: 20.0),
                                                    child: Text(
                                                      arrayController
                                                              .arrays[index]
                                                              .title ??
                                                          '',
                                                      style:
                                                          GoogleFonts.notoSans(
                                                              color:
                                                                  Colors.white,
                                                              fontSize: 25.0),
                                                    ),
                                                  ),
                                                  Padding(
                                                    padding:
                                                        const EdgeInsets.only(
                                                            left: 20.0),
                                                    child: Text(
                                                      '0',
                                                      style:
                                                          GoogleFonts.notoSans(
                                                              color:
                                                                  primaryColor,
                                                              fontSize: 27.0),
                                                    ),
                                                  ),
                                                ],
                                              ),
                                            ),
                                          ),
                                        ),
                                      ),
                                  separatorBuilder: (_, __) => const SizedBox(
                                        height: 15.0,
                                      ),
                                  itemCount: arrayController.arrays.length);
                            })
Georgina

Remove init: Get.put<ArrayController>(ArrayController())

Also, if you are trying to access the current logged in user, do this:

Stream<List<ArrayModel>> getAllArrays() {
String uid =  FirebaseAuth.instance.currentUser.uid; // i think you can declare this outside the scope
    return  _firestore.collection("users").doc(uid).collection("arrays").snapshots().map(
        (query) => query.docs.map((item) => ArrayModel.fromMap(item)).toList());
  }

Could you check your fields for bad state element does not exist:

ArrayModel.fromMap(DocumentSnapshot doc) {
    title = doc["title"]; //check for bad state on your fields
    id = doc.id;
    todos = doc["todos"];
    dateCreated = doc["dateCreated"];
  }

Also try this:

class GlobalBindings implements Bindings {
  @override
  void dependencies() {
    Get.put<ArrayController>(ArrayController());
    //Include your other controllers here
 }
}
//Set it in your main
void main() async {
  WidgetsFlutterBinding.ensureInitialized(); 
  await Firebase.initializeApp();  
  GlobalBindings().dependencies();
  runApp(MyApp());
}

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

TOP Ranking

  1. 1

    Failed to listen on localhost:8000 (reason: Cannot assign requested address)

  2. 2

    Loopback Error: connect ECONNREFUSED 127.0.0.1:3306 (MAMP)

  3. 3

    How to import an asset in swift using Bundle.main.path() in a react-native native module

  4. 4

    pump.io port in URL

  5. 5

    Compiler error CS0246 (type or namespace not found) on using Ninject in ASP.NET vNext

  6. 6

    BigQuery - concatenate ignoring NULL

  7. 7

    ngClass error (Can't bind ngClass since it isn't a known property of div) in Angular 11.0.3

  8. 8

    ggplotly no applicable method for 'plotly_build' applied to an object of class "NULL" if statements

  9. 9

    Spring Boot JPA PostgreSQL Web App - Internal Authentication Error

  10. 10

    How to remove the extra space from right in a webview?

  11. 11

    java.lang.NullPointerException: Cannot read the array length because "<local3>" is null

  12. 12

    Jquery different data trapped from direct mousedown event and simulation via $(this).trigger('mousedown');

  13. 13

    flutter: dropdown item programmatically unselect problem

  14. 14

    How to use merge windows unallocated space into Ubuntu using GParted?

  15. 15

    Change dd-mm-yyyy date format of dataframe date column to yyyy-mm-dd

  16. 16

    Nuget add packages gives access denied errors

  17. 17

    Svchost high CPU from Microsoft.BingWeather app errors

  18. 18

    Can't pre-populate phone number and message body in SMS link on iPhones when SMS app is not running in the background

  19. 19

    12.04.3--- Dconf Editor won't show com>canonical>unity option

  20. 20

    Any way to remove trailing whitespace *FOR EDITED* lines in Eclipse [for Java]?

  21. 21

    maven-jaxb2-plugin cannot generate classes due to two declarations cause a collision in ObjectFactory class

HotTag

Archive