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(),
),
),),
Vous devez probablement utiliser un objet de modèle personnalisé (par exemple, User
) comme type pour DropdownButton
.
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(),
),
),
),
);
}
}
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);
});
},
);