2017-09-20 4 views
0

ausgewählt Wie selectedIndex des Drop-Down in Flattern zu bekommen,wie Index des Dropdownbutton in Flattern bekommen

In Dropdownbutton gibt es keine Eigenschaft ist ausgewählt Index zu erhalten, da, wenn, wie Sie den ausgewählten Index und meinen Code wie folgt aussehen zu bekommen :

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

     ),), 
+0

sollte nicht selectedUser eine globale Variable sein. Wenn Sie einen Gegenstand wählen, wird onChange aufgerufen? – user1462442

+0

kannst du mir dafür ein Beispiel geben Danke für die Antwort –

+0

was ist mit 'userInfoToMap.indexOf (newValue)'? –

Antwort

2

Sie wahrscheinlich ein eigenes Modellobjekt (zB User) als Typ für DropdownButton verwenden sollte.

video

Import '-Paket: flattern/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(), 
     ), 
     ), 
    ), 
    ); 
    } 
}