Home > Software engineering >  type 'List<DropdownMenuItem<String>>' is not a subtype of type 'List<S
type 'List<DropdownMenuItem<String>>' is not a subtype of type 'List<S

Time:02-16

Widget locationList(String airportId) {
    return Container(
      child: StreamBuilder<QuerySnapshot>(
        stream: FirebaseFirestore.instance.collection("Airports").doc(widget.airportId).collection("Locations").snapshots(),
        builder: (context, snapshot) {
          if(snapshot.data == null){
           return Container();
          } else {
            List<DropdownMenuItem<String>> locationItem = [];
            for(int i=0;i<snapshot.data!.docs.length;i  ){
              DocumentSnapshot data = snapshot.data!.docs[i];
              locationItem.add(
                DropdownMenuItem<String>(
                  child: Text(
                    data["Location Name"],
                  ),
                  value: "${data["Location Name"]}",
                )
              );
            }
            return Form(
              key: _formKey,
              child: Container(
                alignment: Alignment.center,
                height: 55,
                width: 200,
                decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(10),
                  border: Border.all(color: Colors.black,width: 2)
                ),
                child: DropdownButtonHideUnderline(
                  child: DropDownField(
                    value: value,
                    required: true,
                    items: locationItem,
                    enabled: true,
                    strict: false,
                    itemsVisibleInDropdown: 5,
                    onValueChanged: (value) {
                      setState(() {
                        this.value = value!;
                        locationId = value;
                        print(value);
                        print(locationId);
                      });
                    },
                  ),
                ),
              ),
            );
          }
        },
      ),
    );
  }

CodePudding user response:

In DropDownField you have to provide a List<String> to items: argument.

So first change your locatioItem type to List<String>

List<String> locationItem = [];

Then change your for loop:

for (int i = 0; i < snapshot.data!.docs.length; i  ) {
  DocumentSnapshot data = snapshot.data!.docs[i];
  locationItem.add(data["Location Name"]);
}
  • Related