web-dev-qa-db-fra.com

comment obtenir l'index sélectionné du bouton déroulant dans le flutter

Comment être sélectionnéIndex de liste déroulante en flutter,

Dans le menu déroulant, il n'y a pas de propriété pour obtenir l'index sélectionné, s'il existe comment obtenir l'index sélectionné et mon code se présente comme suit:

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(),
            ),

          ),),
5
siva kumar

Vous devez probablement utiliser un objet de modèle personnalisé (par exemple, User) comme type pour DropdownButton.

 video

importer '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>[const User('Foo'), const 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(),
          ),
        ),
      ),
    );
  }
}
12
Collin Jackson

Semblable à la réponse de Collin Jackson, vous pouvez simplement utiliser une liste de chaînes et vérifier l'indexOf pour définir la valeur, ce qui peut être préférable dans certaines situations plutôt que de créer une classe d'utilisateur . Si vous souhaitez définir une valeur initiale, définissez _user à une valeur entière lorsqu'elle est définie.

int _user;
...

var users = <String>[
  'Bob',
  'Allie',
  'Jason',
];

return new DropdownButton<String>(
  hint: new Text('Pickup on every'),
  value: _user == null ? null : users[_user],
  items: users.map((String value) {
    return new DropdownMenuItem<String>(
      value: value,
      child: new Text(value),
    );
  }).toList(),
  onChanged: (value) {
    setState(() {
      _user = users.indexOf(value);
    });
  },
);
3
Nico Westerdale