/
main.dart
127 lines (112 loc) · 3.43 KB
/
main.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import 'package:flutter/material.dart';
import 'package:flutter_dropdown/flutter_dropdown.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
List<Person> persons = [
Person(gender: "Male", url: "https://images.unsplash.com/photo-1555952517-2e8e729e0b44"),
Person(gender: "Female", url: "https://images.unsplash.com/photo-1555952517-2e8e729e0b44"),
Person(gender: "Other", url: "https://images.unsplash.com/photo-1555952517-2e8e729e0b44"),
];
Person selectedPerson;
void _incrementCounter() {
setState(() {
_counter++;
selectedPerson = null;
});
}
@override
void initState() {
selectedPerson = persons.first;
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
Text("Simple dropdown widget with string"),
DropDown<String>(
items: <String>["Male", "Female", "Other"],
initialValue: "Female",
hint: Text("Select gender"),
onChanged: print,
),
SizedBox(height: 20),
Text("A dropdown with object and With custom widgets"),
DropDown<Person>(
items: persons,
// initialValue: selectedPerson,
hint: Text("Select"),
initialValue: persons.first,
onChanged: (Person p) {
print(p?.gender);
setState(() {
selectedPerson = p;
});
},
isCleared: selectedPerson == null,
customWidgets: persons.map((p) => buildDropDownRow(p)).toList(),
isExpanded: true,
),
Text("Selected person's gender is: ${selectedPerson?.gender ?? "None"}"),
],
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
Row buildDropDownRow(Person person) {
return Row(
children: <Widget>[
Expanded(child: Text(person?.gender ?? "Select")),
CircleAvatar(
backgroundImage: NetworkImage(person.url),
),
],
);
}
}
class Person {
final String gender;
final String name;
final String url;
Person({this.name, this.gender, this.url});
}