@@ -10,9 +10,10 @@ class Home extends StatefulWidget {
10
10
}
11
11
12
12
class _HomeState extends State <Home > {
13
- final apiKey = "" ;
14
13
final _controller = TextEditingController ();
15
14
15
+ String _query = "" ;
16
+
16
17
@override
17
18
void dispose () {
18
19
_controller.dispose ();
@@ -35,35 +36,56 @@ class _HomeState extends State<Home> {
35
36
36
37
Future <List <User >> _future () async {
37
38
final response = await http.get (
38
- Uri . parse ( 'https://exercise-646d.restdb.io/rest/group-1' ),
39
+ _getUri ( ),
39
40
headers: {
40
41
'x-apikey' : '5c5c7076f210985199db5488' ,
41
42
},
42
43
);
43
44
44
45
if (response.statusCode == 200 ) {
45
- return (json.decode (response.body) as List )
46
+ final users = (json.decode (response.body) as List )
46
47
.map ((i) => User .fromJson (i))
47
48
.toList ();
49
+
50
+ return users;
48
51
} else {
49
52
throw Exception ('Failed to load users' );
50
53
}
51
54
}
52
55
53
- Widget _body () {
54
- return FutureBuilder <List <User >>(
55
- future: _future (),
56
- builder: (context, snapshot) {
57
- if (snapshot.hasData) {
58
- return _content (snapshot.data);
59
- }
56
+ Uri _getUri () {
57
+ Uri uri;
60
58
61
- if (snapshot.hasError) {
62
- return _showError (snapshot.error.toString ());
63
- }
59
+ if (_query.isEmpty) {
60
+ uri = Uri (
61
+ scheme: 'https' ,
62
+ host: 'exercise-646d.restdb.io' ,
63
+ path: 'rest/group-1' ,
64
+ );
65
+ } else {
66
+ uri = Uri (
67
+ scheme: 'https' ,
68
+ host: 'exercise-646d.restdb.io' ,
69
+ path: 'rest/group-1' ,
70
+ queryParameters: {'q' : '{"CITY":"$_query "}' },
71
+ );
72
+ }
64
73
65
- return _showLoading ();
66
- },
74
+ return uri;
75
+ }
76
+
77
+ Widget _body () {
78
+ return Padding (
79
+ padding: const EdgeInsets .all (8.0 ),
80
+ child: Column (
81
+ children: [_filterByCity (), _content ()],
82
+ ),
83
+ );
84
+ }
85
+
86
+ Widget _showEmptyPrompt () {
87
+ return Center (
88
+ child: Text ("No users in '$_query ' found" ),
67
89
);
68
90
}
69
91
@@ -79,15 +101,28 @@ class _HomeState extends State<Home> {
79
101
);
80
102
}
81
103
82
- Widget _content (List <User > users) {
83
- return Padding (
84
- padding: const EdgeInsets .all (8.0 ),
85
- child: Column (
86
- children: [
87
- _filterByCity (),
88
- Expanded (child: _listView (users)),
89
- ],
90
- ),
104
+ Widget _content () {
105
+ return FutureBuilder <List <User >>(
106
+ future: _future (),
107
+ builder: (context, snapshot) {
108
+ if (snapshot.connectionState == ConnectionState .waiting) {
109
+ return _showLoading ();
110
+ }
111
+
112
+ if (snapshot.hasData) {
113
+ if (snapshot.data.isEmpty) {
114
+ return _showEmptyPrompt ();
115
+ }
116
+
117
+ return Expanded (child: _listView (snapshot.data));
118
+ }
119
+
120
+ if (snapshot.hasError) {
121
+ return _showError (snapshot.error.toString ());
122
+ }
123
+
124
+ return _showLoading ();
125
+ },
91
126
);
92
127
}
93
128
@@ -125,7 +160,9 @@ class _HomeState extends State<Home> {
125
160
}
126
161
127
162
void _onFilterButtonPressed () {
128
- print ("Button pressed" );
163
+ setState (() {
164
+ _query = _controller.text;
165
+ });
129
166
}
130
167
131
168
Widget _listView (List <User > users) {
0 commit comments