AturicLiqr
AturicLiqr

Reputation: 69

Reading FirebaseFirestore collection items and saving them to list

I am having a trouble reading collection from firebase and saving values in a list.

I basically have a collection called 'brands' where I have car brands like this:

Firebase 'brands' collection screenshot

I need these car brands to be saved as a list like this, to be able to use it in a dropdown menu as items:

<String>[
                      'ferrari',
                      'mercedes',
                      'porsche',
                    ]

I have tried using StreamBuilder (below) but it requires to return a widget and I do not actually need a widget to be returned, so below StreamBuilder is just an experiment "in progress".

Do you have any ideas?

final stream = FirebaseFirestore.instance
    .collection('accounts')
    .doc('dealers')
    .collection(user!.uid)
    .doc(dealerName)
    .collection('brands')
    .snapshots();

StreamBuilder(
  stream: stream,
  builder: (BuildContext context, AsyncSnapshot snapshot) {
    if (snapshot.hasError) {
      return Text('Error in receiving snapshot: ${snapshot.error}');
    }
    if (!snapshot.hasData) {
      return Center(
        child: CircularProgressIndicator(
          backgroundColor: Theme.of(context).primaryColor,
        ),
      );
    }

    return ListView.builder(
      padding: EdgeInsets.all(8),
      reverse: true,
      itemCount: snapshot.data.docs!.length,
      itemBuilder: (BuildContext context, int index) {
        return Text(
          snapshot.data.docs[index]['brandName'],
        );
      },
    );
  },
);

Upvotes: 0

Views: 50

Answers (1)

Damian A.
Damian A.

Reputation: 41

Once you get the data from firebase, loop through it and add the car brands to your list. Try this:

List<String> myBrands = [];

final dataRef = await FirebaseFirestore.instance
 .collection('accounts')
 .doc('dealers')
 .collection(user!.uid)
 .doc(dealerName)
 .collection('brands')
 .get();

dataRef.docs.forEach((doc) {
  myBrands.add(doc.data()['brandName']);
});

You should then be able to use the myBrands list for your dropdown menu.

Upvotes: 1

Related Questions