Showing
7 changed files
with
199 additions
and
36 deletions
... | @@ -90,3 +90,7 @@ appbar 관련 디자인은 추후 구현 예정 | ... | @@ -90,3 +90,7 @@ appbar 관련 디자인은 추후 구현 예정 |
90 | 90 | ||
91 | ### 2021-05-27 | 91 | ### 2021-05-27 |
92 | + app 뒤로가기 설정 변경 | 92 | + app 뒤로가기 설정 변경 |
93 | + | ||
94 | +### 2021-05-29 | ||
95 | ++ 약병 리스트 ui 변경 | ||
96 | ++ DashBoard 새로고침 | ||
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
... | @@ -118,6 +118,13 @@ class _DashBoardState extends State<DashBoard> { | ... | @@ -118,6 +118,13 @@ class _DashBoardState extends State<DashBoard> { |
118 | ), | 118 | ), |
119 | ), | 119 | ), |
120 | body: _tabs[_selectedIndex], | 120 | body: _tabs[_selectedIndex], |
121 | + floatingActionButton: FloatingActionButton( | ||
122 | + onPressed: () { | ||
123 | + setState(() {}); | ||
124 | + }, | ||
125 | + child: const Icon(Icons.refresh_outlined), | ||
126 | + backgroundColor: Colors.blue, | ||
127 | + ), | ||
121 | bottomNavigationBar: BottomNavigationBar( | 128 | bottomNavigationBar: BottomNavigationBar( |
122 | type: BottomNavigationBarType.fixed, | 129 | type: BottomNavigationBarType.fixed, |
123 | backgroundColor: Colors.grey, | 130 | backgroundColor: Colors.grey, |
... | @@ -132,11 +139,12 @@ class _DashBoardState extends State<DashBoard> { | ... | @@ -132,11 +139,12 @@ class _DashBoardState extends State<DashBoard> { |
132 | }) | 139 | }) |
133 | }, | 140 | }, |
134 | items: [ | 141 | items: [ |
135 | - BottomNavigationBarItem(icon: Icon(Icons.favorite), label: 'In'), | 142 | + BottomNavigationBarItem( |
143 | + icon: Icon(Icons.device_thermostat), label: 'In'), | ||
136 | BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), | 144 | BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), |
137 | BottomNavigationBarItem( | 145 | BottomNavigationBarItem( |
138 | label: 'Out', | 146 | label: 'Out', |
139 | - icon: Icon(Icons.favorite), | 147 | + icon: Icon(Icons.access_time), |
140 | ) | 148 | ) |
141 | ], | 149 | ], |
142 | ), | 150 | ), |
... | @@ -146,8 +154,7 @@ class _DashBoardState extends State<DashBoard> { | ... | @@ -146,8 +154,7 @@ class _DashBoardState extends State<DashBoard> { |
146 | Navigator.push( | 154 | Navigator.push( |
147 | context, | 155 | context, |
148 | MaterialPageRoute( | 156 | MaterialPageRoute( |
149 | - builder: (BuildContext context) => | 157 | + builder: (BuildContext context) => BottleList(), |
150 | - BottleList(bottlelist: _bottleList), | ||
151 | )); | 158 | )); |
152 | }, | 159 | }, |
153 | ); | 160 | ); | ... | ... |
... | @@ -5,30 +5,85 @@ import 'package:http/http.dart' as http; | ... | @@ -5,30 +5,85 @@ import 'package:http/http.dart' as http; |
5 | import 'package:flutter_dotenv/flutter_dotenv.dart'; | 5 | import 'package:flutter_dotenv/flutter_dotenv.dart'; |
6 | import '../models/Bottle.dart'; | 6 | import '../models/Bottle.dart'; |
7 | import '../DashBoard.dart'; | 7 | import '../DashBoard.dart'; |
8 | -import '../models/Medicine.dart'; | ||
9 | import '../../utils/user_secure_stoarge.dart'; | 8 | import '../../utils/user_secure_stoarge.dart'; |
10 | 9 | ||
11 | class BottleList extends StatefulWidget { | 10 | class BottleList extends StatefulWidget { |
12 | - List<Bottle> bottlelist; | 11 | + BottleList({Key key}) : super(key: key); |
13 | - BottleList({Key key, this.bottlelist}) : super(key: key); | ||
14 | 12 | ||
15 | @override | 13 | @override |
16 | _BottleListState createState() => _BottleListState(); | 14 | _BottleListState createState() => _BottleListState(); |
17 | } | 15 | } |
18 | 16 | ||
19 | class _BottleListState extends State<BottleList> { | 17 | class _BottleListState extends State<BottleList> { |
18 | + List<Bottle> _bottleList = new List<Bottle>(); | ||
19 | + Future<String> getBottleList() async { | ||
20 | + String hubid = await UserSecureStorage.getHubId(); | ||
21 | + String usertoken = await UserSecureStorage.getUserToken(); | ||
22 | + http.Response response = await http.get( | ||
23 | + Uri.encodeFull( | ||
24 | + DotEnv().env['SERVER_URL'] + 'bottle/hub/' + hubid.toString()), | ||
25 | + headers: {"authorization": usertoken}, | ||
26 | + ); | ||
27 | + print(response.body); | ||
28 | + print(1); | ||
29 | + if (_bottleList.length != 0) { | ||
30 | + _bottleList.clear(); | ||
31 | + } | ||
32 | + if (response.statusCode == 200) { | ||
33 | + List<dynamic> values = new List<dynamic>(); | ||
34 | + values = json.decode(response.body); | ||
35 | + | ||
36 | + for (int i = 0; i < values.length; i++) { | ||
37 | + Map<String, dynamic> map = values[i]; | ||
38 | + _bottleList.add(Bottle.fromJson(map)); | ||
39 | + } | ||
40 | + return "GET"; | ||
41 | + } else if (response.statusCode == 404) { | ||
42 | + return "Not Found"; | ||
43 | + } else { | ||
44 | + return "Error"; | ||
45 | + } | ||
46 | + } | ||
47 | + | ||
20 | Widget build(BuildContext context) { | 48 | Widget build(BuildContext context) { |
21 | final Size size = MediaQuery.of(context).size; | 49 | final Size size = MediaQuery.of(context).size; |
22 | return WillPopScope( | 50 | return WillPopScope( |
23 | child: Scaffold( | 51 | child: Scaffold( |
24 | - body: Container( | 52 | + appBar: AppBar( |
53 | + backgroundColor: Colors.white, | ||
54 | + leading: new Icon(Icons.medical_services_rounded, | ||
55 | + color: Colors.black, size: 45.0), | ||
56 | + title: Text( | ||
57 | + 'Smart Medicine Box', | ||
58 | + style: TextStyle( | ||
59 | + color: Colors.black, | ||
60 | + fontSize: 23, | ||
61 | + fontFamily: 'Noto', | ||
62 | + fontWeight: FontWeight.bold), | ||
63 | + ), | ||
64 | + ), | ||
65 | + body: FutureBuilder( | ||
66 | + future: getBottleList(), | ||
67 | + builder: (BuildContext context, AsyncSnapshot snapshot) { | ||
68 | + if (snapshot.hasData == false) { | ||
69 | + return CircularProgressIndicator(); | ||
70 | + } else if (snapshot.hasError) { | ||
71 | + return Padding( | ||
72 | + padding: const EdgeInsets.all(8.0), | ||
73 | + child: Text( | ||
74 | + 'Error: ${snapshot.error}', | ||
75 | + style: TextStyle(fontSize: 15), | ||
76 | + ), | ||
77 | + ); | ||
78 | + } else { | ||
79 | + return Container( | ||
25 | height: size.height, | 80 | height: size.height, |
26 | child: Column( | 81 | child: Column( |
27 | mainAxisAlignment: MainAxisAlignment.center, | 82 | mainAxisAlignment: MainAxisAlignment.center, |
28 | children: <Widget>[ | 83 | children: <Widget>[ |
29 | - SizedBox(height: 70), | 84 | + SizedBox(height: 10), |
30 | Container( | 85 | Container( |
31 | - height: size.height * 0.1, | 86 | + height: size.height * 0.07, |
32 | width: size.width, | 87 | width: size.width, |
33 | child: Center( | 88 | child: Center( |
34 | child: Text( | 89 | child: Text( |
... | @@ -40,35 +95,90 @@ class _BottleListState extends State<BottleList> { | ... | @@ -40,35 +95,90 @@ class _BottleListState extends State<BottleList> { |
40 | fontWeight: FontWeight.bold), | 95 | fontWeight: FontWeight.bold), |
41 | ), | 96 | ), |
42 | ), | 97 | ), |
43 | - decoration: BoxDecoration(border: Border.all()), | ||
44 | ), | 98 | ), |
45 | - SizedBox(height: 30), | 99 | + SizedBox(height: 10), |
46 | Expanded( | 100 | Expanded( |
47 | - child: ListView.separated( | 101 | + child: GridView.builder( |
48 | padding: const EdgeInsets.all(30), | 102 | padding: const EdgeInsets.all(30), |
49 | - itemCount: widget.bottlelist.length == null | 103 | + itemCount: |
50 | - ? 0 | 104 | + _bottleList.length == null ? 0 : _bottleList.length, |
51 | - : widget.bottlelist.length, | 105 | + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( |
106 | + maxCrossAxisExtent: 200, | ||
107 | + crossAxisSpacing: 10, | ||
108 | + mainAxisSpacing: 10, | ||
109 | + ), | ||
52 | itemBuilder: (BuildContext context, int index) { | 110 | itemBuilder: (BuildContext context, int index) { |
53 | - return Container( | 111 | + return InkResponse( |
54 | - padding: EdgeInsets.all(8.0), | 112 | + splashColor: Colors.transparent, |
55 | - decoration: BoxDecoration(border: Border.all()), | 113 | + child: Container( |
56 | - child: ListTile( | 114 | + height: 140, |
57 | - title: Text( | 115 | + padding: const EdgeInsets.all(10), |
58 | - 'BOTTLE ID : ' + | 116 | + decoration: BoxDecoration( |
59 | - '${widget.bottlelist[index].bottleId}', | 117 | + border: Border.all(), |
118 | + borderRadius: BorderRadius.all( | ||
119 | + Radius.circular(16.0), | ||
120 | + ), | ||
121 | + ), | ||
122 | + child: Column( | ||
123 | + children: [ | ||
124 | + Container( | ||
125 | + decoration: BoxDecoration( | ||
126 | + border: Border( | ||
127 | + bottom: BorderSide( | ||
128 | + color: Colors.black, | ||
129 | + width: 1, | ||
130 | + style: BorderStyle.solid), | ||
131 | + ), | ||
132 | + ), | ||
133 | + height: 40, | ||
134 | + child: Row( | ||
135 | + mainAxisAlignment: | ||
136 | + MainAxisAlignment.spaceBetween, | ||
137 | + children: [ | ||
138 | + Container( | ||
139 | + height: 40, | ||
140 | + child: Center( | ||
141 | + child: Text( | ||
142 | + '${_bottleList[index].bottleId}', | ||
60 | style: TextStyle( | 143 | style: TextStyle( |
61 | color: Colors.black, | 144 | color: Colors.black, |
62 | fontSize: 20, | 145 | fontSize: 20, |
63 | fontFamily: 'Noto', | 146 | fontFamily: 'Noto', |
64 | fontWeight: FontWeight.bold), | 147 | fontWeight: FontWeight.bold), |
65 | ), | 148 | ), |
66 | - trailing: Icon(Icons.arrow_forward), | 149 | + ), |
67 | - onTap: () async { | 150 | + ), |
151 | + Container( | ||
152 | + child: IconButton( | ||
153 | + alignment: Alignment(0.9, 0), | ||
154 | + icon: Icon( | ||
155 | + Icons.create_sharp, | ||
156 | + color: Colors.black, | ||
157 | + ), | ||
158 | + onPressed: () { | ||
159 | + print("asdfg"); | ||
160 | + }, | ||
161 | + ), | ||
162 | + ), | ||
163 | + ], | ||
164 | + ), | ||
165 | + ), | ||
166 | + SizedBox(height: 10), | ||
167 | + Container( | ||
168 | + height: 90, | ||
169 | + child: Icon( | ||
170 | + Icons.medical_services_outlined, | ||
171 | + size: 100, | ||
172 | + ), | ||
173 | + ) | ||
174 | + ], | ||
175 | + ), | ||
176 | + ), | ||
177 | + onTap: () { | ||
68 | UserSecureStorage.setBottleId( | 178 | UserSecureStorage.setBottleId( |
69 | - widget.bottlelist[index].bottleId.toString()); | 179 | + _bottleList[index].bottleId.toString()); |
70 | UserSecureStorage.setMedicineId( | 180 | UserSecureStorage.setMedicineId( |
71 | - widget.bottlelist[index].medicineId.toString()); | 181 | + _bottleList[index].medicineId.toString()); |
72 | Navigator.push( | 182 | Navigator.push( |
73 | context, | 183 | context, |
74 | MaterialPageRoute( | 184 | MaterialPageRoute( |
... | @@ -78,15 +188,16 @@ class _BottleListState extends State<BottleList> { | ... | @@ -78,15 +188,16 @@ class _BottleListState extends State<BottleList> { |
78 | ), | 188 | ), |
79 | ); | 189 | ); |
80 | }, | 190 | }, |
81 | - ), | ||
82 | ); | 191 | ); |
83 | }, | 192 | }, |
84 | - separatorBuilder: (BuildContext contetx, int index) => | ||
85 | - const Divider(), | ||
86 | ), | 193 | ), |
87 | ) | 194 | ) |
88 | ], | 195 | ], |
89 | - )), | 196 | + ), |
197 | + ); | ||
198 | + } | ||
199 | + }, | ||
200 | + ), | ||
90 | ), | 201 | ), |
91 | onWillPop: () { | 202 | onWillPop: () { |
92 | SystemNavigator.pop(); | 203 | SystemNavigator.pop(); | ... | ... |
... | @@ -102,9 +102,7 @@ class _HubListState extends State<HubList> { | ... | @@ -102,9 +102,7 @@ class _HubListState extends State<HubList> { |
102 | context, | 102 | context, |
103 | MaterialPageRoute( | 103 | MaterialPageRoute( |
104 | builder: (BuildContext context) => | 104 | builder: (BuildContext context) => |
105 | - BottleList( | 105 | + BottleList(), |
106 | - bottlelist: _bottleList, | ||
107 | - ), | ||
108 | )); | 106 | )); |
109 | } else if (result == "Not Found") { | 107 | } else if (result == "Not Found") { |
110 | showDialog( | 108 | showDialog( | ... | ... |
... | @@ -233,6 +233,13 @@ packages: | ... | @@ -233,6 +233,13 @@ packages: |
233 | url: "https://pub.dartlang.org" | 233 | url: "https://pub.dartlang.org" |
234 | source: hosted | 234 | source: hosted |
235 | version: "1.8.0-nullsafety.1" | 235 | version: "1.8.0-nullsafety.1" |
236 | + path_provider: | ||
237 | + dependency: "direct main" | ||
238 | + description: | ||
239 | + name: path_provider | ||
240 | + url: "https://pub.dartlang.org" | ||
241 | + source: hosted | ||
242 | + version: "1.6.28" | ||
236 | path_provider_linux: | 243 | path_provider_linux: |
237 | dependency: transitive | 244 | dependency: transitive |
238 | description: | 245 | description: |
... | @@ -240,6 +247,13 @@ packages: | ... | @@ -240,6 +247,13 @@ packages: |
240 | url: "https://pub.dartlang.org" | 247 | url: "https://pub.dartlang.org" |
241 | source: hosted | 248 | source: hosted |
242 | version: "0.0.1+2" | 249 | version: "0.0.1+2" |
250 | + path_provider_macos: | ||
251 | + dependency: transitive | ||
252 | + description: | ||
253 | + name: path_provider_macos | ||
254 | + url: "https://pub.dartlang.org" | ||
255 | + source: hosted | ||
256 | + version: "0.0.4+8" | ||
243 | path_provider_platform_interface: | 257 | path_provider_platform_interface: |
244 | dependency: transitive | 258 | dependency: transitive |
245 | description: | 259 | description: |
... | @@ -350,6 +364,20 @@ packages: | ... | @@ -350,6 +364,20 @@ packages: |
350 | url: "https://pub.dartlang.org" | 364 | url: "https://pub.dartlang.org" |
351 | source: hosted | 365 | source: hosted |
352 | version: "1.8.0-nullsafety.2" | 366 | version: "1.8.0-nullsafety.2" |
367 | + sqflite: | ||
368 | + dependency: "direct main" | ||
369 | + description: | ||
370 | + name: sqflite | ||
371 | + url: "https://pub.dartlang.org" | ||
372 | + source: hosted | ||
373 | + version: "1.3.2+4" | ||
374 | + sqflite_common: | ||
375 | + dependency: transitive | ||
376 | + description: | ||
377 | + name: sqflite_common | ||
378 | + url: "https://pub.dartlang.org" | ||
379 | + source: hosted | ||
380 | + version: "1.0.3+3" | ||
353 | stack_trace: | 381 | stack_trace: |
354 | dependency: transitive | 382 | dependency: transitive |
355 | description: | 383 | description: |
... | @@ -371,6 +399,13 @@ packages: | ... | @@ -371,6 +399,13 @@ packages: |
371 | url: "https://pub.dartlang.org" | 399 | url: "https://pub.dartlang.org" |
372 | source: hosted | 400 | source: hosted |
373 | version: "1.1.0-nullsafety.1" | 401 | version: "1.1.0-nullsafety.1" |
402 | + synchronized: | ||
403 | + dependency: transitive | ||
404 | + description: | ||
405 | + name: synchronized | ||
406 | + url: "https://pub.dartlang.org" | ||
407 | + source: hosted | ||
408 | + version: "2.2.0+2" | ||
374 | term_glyph: | 409 | term_glyph: |
375 | dependency: transitive | 410 | dependency: transitive |
376 | description: | 411 | description: |
... | @@ -421,5 +456,5 @@ packages: | ... | @@ -421,5 +456,5 @@ packages: |
421 | source: hosted | 456 | source: hosted |
422 | version: "0.1.2" | 457 | version: "0.1.2" |
423 | sdks: | 458 | sdks: |
424 | - dart: ">=2.10.0-110 <2.11.0" | 459 | + dart: ">=2.10.2 <2.11.0" |
425 | - flutter: ">=1.20.0 <2.0.0" | 460 | + flutter: ">=1.22.2 <2.0.0" | ... | ... |
... | @@ -39,6 +39,8 @@ dependencies: | ... | @@ -39,6 +39,8 @@ dependencies: |
39 | flutter_dotenv: ^2.1.0 | 39 | flutter_dotenv: ^2.1.0 |
40 | numberpicker: ^1.3.0 | 40 | numberpicker: ^1.3.0 |
41 | flutter_secure_storage: ^3.3.5 | 41 | flutter_secure_storage: ^3.3.5 |
42 | + sqflite: ^1.1.6 | ||
43 | + path_provider: ^1.2.0 | ||
42 | 44 | ||
43 | dev_dependencies: | 45 | dev_dependencies: |
44 | flutter_test: | 46 | flutter_test: | ... | ... |
-
Please register or login to post a comment