dartflutter

how to get selected index of dropdownbutton in flutter


How to get selectedIndex of dropdown in flutter,

In dropdownbutton there is no property to get selected index, if there how to get the selected index and my code look like this:

new DropdownButton( hint:new Text("Select a users"),value: selectedUser,

              onChanged: (String newValue) {
                setState(() {
                  selectedUser = newValue;
                });
              },
              items: userInfoToMap.map((ListOfUsers value) {
                return new DropdownMenuItem<String>(
                    value: value.name,
                    child:new Text(value.name,style: new TextStyle(color: Colors.black))
                );
              })
                  .toList(),
            ),

          ),),

Solution

  • You should probably use a custom model object (e.g. User) as the type for DropdownButton.

    video

    import 'package:flutter/material.dart';
    
    void main() {
      runApp(new MyApp());
    }
    
    class User {
      const User(this.name);    
      final String name;
    }
    
    class MyApp extends StatefulWidget {
      State createState() => new MyAppState();
    }
    
    class MyAppState extends State<MyApp> {
      User selectedUser;
      List<User> users = <User>[User('Foo'), User('Bar')];    
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(
          home: new Scaffold(
            body: new Center(
              child: new DropdownButton<User>(
                hint: new Text("Select a user"),
                value: selectedUser,
                onChanged: (User newValue) {
                  setState(() {
                    selectedUser = newValue;
                  });
                },
                items: users.map((User user) {
                  return new DropdownMenuItem<User>(
                    value: user,
                    child: new Text(
                      user.name,
                      style: new TextStyle(color: Colors.black),
                    ),
                  );
                }).toList(),
              ),
            ),
          ),
        );
      }
    }