Can't show the dropdown selected value in Flutter

6,141

Check the DropdownButton class , there is a property named value, use your variable _feedCategory in that place, and on your DropdownMenuItem map instead of _feedCategory use category:

   new DropdownButton<FeedCategory>(
                      value: _feedCategory,
                      hint: Text("Select Category"),
                      items: categoriesList.map((FeedCategory category) {
                        return new DropdownMenuItem<FeedCategory>(
                          value: category,
                          child: Text(category.name),
                        );
                      }).toList(),
                      onChanged: (FeedCategory category) {
                        setState(() {
                          _feedCategory = category;      // Problem here too, the element doesn’t show in the dropdown as selected
                          print("Selected: ${_feedCategory.name} (${_feedCategory.id})");
                        });
                      },
                    ),
Share:
6,141
Alberto Méndez
Author by

Alberto Méndez

Updated on December 06, 2022

Comments

  • Alberto Méndez
    Alberto Méndez over 1 year

    I am new in Flutter development and I'm trying to show the selected value of a dropdown but I can't get it to work.

    You can select one child and it works well but the dropdown doesn't show it as the chosen one, it just keeps like if nothing was selected.

    Here is my code:

    import 'package:app2date/repository/repository.dart';
    import 'package:app2date/model/FeedSource.dart';
    import 'package:app2date/model/FeedCategory.dart';
    import 'package:app2date/util/ui.dart';
    import 'package:flutter/material.dart';
    
    class ManageFeedSource extends StatefulWidget {
      ManageFeedSource({Key key, this.feedSource}) : super(key: key);
    
      final FeedSource feedSource;
    
      @override
      _ManageFeedSource createState() => new _ManageFeedSource();
    }
    
    class _ManageFeedSource extends State<ManageFeedSource> {
      final tfNameController = new TextEditingController();
      final tfUrlController = new TextEditingController();
      var editMode = false;
      FeedCategory _feedCategory;
    
      @override
      Widget build(BuildContext context) {
        FeedSource feedSource = widget.feedSource;
        if (feedSource != null) {
          tfNameController.text = feedSource.name;
          tfUrlController.text = feedSource.url;
          editMode = true;
        }
        return Scaffold(
          appBar: AppBar(
            title: Text('New Feed'),
          ),
          body: new FutureBuilder(
            future: Repository.get().getFeedCategories(),
            builder: (BuildContext context, AsyncSnapshot snapshot) {
              List<FeedCategory> categoriesList = snapshot.data;
              if (categoriesList != null) {
                if (categoriesList.isNotEmpty) {
                    _feedCategory = categoriesList[0];      // The dropdown doesn’t draw the element (the list has elements)
                }
                print("${_feedCategory}");
                return new Padding(
                  padding: EdgeInsets.all(12.0),
                  child: new Column(
                    mainAxisAlignment: MainAxisAlignment.start,
                    children: <Widget>[
                      new DropdownButton<FeedCategory>(
                        hint: Text("Select Category"),
                        items: categoriesList.map((FeedCategory category) {
                          return new DropdownMenuItem<FeedCategory>(
                            value: _feedCategory,
                            child: Text(_feedCategory.name),
                          );
                        }).toList(),
                        onChanged: (FeedCategory category) {
                          setState(() {
                            _feedCategory = category;      // Problem here too, the element doesn’t show in the dropdown as selected
                            print("Selected: ${_feedCategory.name} (${_feedCategory.id})");
                          });
                        },
                      ),
                    ],
                  ),
                ),
              ],
              ),
              );
              } else {
              return Container(
              decoration: new BoxDecoration(color: Colors.white),
              );
              }
            },
          ),
        );
      }
    
      @override
      void initState() {
        super.initState();
      }
    }
    

    I would really appreciate any help.