Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2021-1-capstone-design1
/
RIT_Project1
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
1
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
고원빈
2021-05-24 01:36:12 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
d290ec8cbd3a29ab9a08dc139c22a737d624e0bb
d290ec8c
1 parent
a1b0c894
[frontend]2021-05-24
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
385 additions
and
50 deletions
frontend/README.md
frontend/flutter_application_1/.env
frontend/flutter_application_1/lib/src/screens/Homepage.dart
frontend/flutter_application_1/lib/src/screens/BottleList.dart → frontend/flutter_application_1/lib/src/screens/Register/BottleList.dart
frontend/flutter_application_1/lib/src/screens/Register/DetailMedicine.dart
frontend/flutter_application_1/lib/src/screens/HubList.dart → frontend/flutter_application_1/lib/src/screens/Register/HubList.dart
frontend/flutter_application_1/lib/src/screens/RegisterBottle.dart → frontend/flutter_application_1/lib/src/screens/Register/RegisterBottle.dart
frontend/flutter_application_1/lib/src/screens/RegsiterHub.dart → frontend/flutter_application_1/lib/src/screens/Register/RegsiterHub.dart
frontend/flutter_application_1/lib/src/screens/SearchMedicine.dart → frontend/flutter_application_1/lib/src/screens/Register/SearchMedicine.dart
frontend/flutter_application_1/lib/src/screens/SignInPage.dart → frontend/flutter_application_1/lib/src/screens/Register/SignInPage.dart
frontend/flutter_application_1/lib/src/screens/SignUpLocal.dart → frontend/flutter_application_1/lib/src/screens/Register/SignUpLocal.dart
frontend/flutter_application_1/lib/src/screens/models/Data.dart
frontend/flutter_application_1/pubspec.yaml
frontend/README.md
View file @
d290ec8
...
...
@@ -68,4 +68,9 @@ appbar 관련 디자인은 추후 구현 예정
+
약병 ,허브 리스트 출력 구현
### 2021-05-22
+
약병 검색 기능 구현 중
\ No newline at end of file
+
약병 검색 기능 구현 중
### 2021-0523
+
로그인 하여 메인페이지 과정 구현 완료
+
폴더 정리
...
...
frontend/flutter_application_1/.env
View file @
d290ec8
SERVER_URL=http://192.168.0.3:4000/api/
\ No newline at end of file
SERVER_URL=
\ No newline at end of file
...
...
frontend/flutter_application_1/lib/src/screens/Homepage.dart
View file @
d290ec8
...
...
@@ -2,8 +2,8 @@ import 'package:flutter/material.dart';
import
'package:flutter/services.dart'
;
import
'../shared/colors.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'./SignInPage.dart'
;
import
'
.
/SignUpLocal.dart'
;
import
'./
Register/
SignInPage.dart'
;
import
'
Register
/SignUpLocal.dart'
;
class
HomePage
extends
StatefulWidget
{
final
String
pageTitle
;
...
...
@@ -81,32 +81,33 @@ class _HomePageState extends State<HomePage> {
children:
<
Widget
>[
GestureDetector
(
child:
Container
(
width:
size
.
width
*
0.8
,
height:
46
,
margin:
EdgeInsets
.
only
(
bottom:
0
),
child:
FlatButton
(
padding:
EdgeInsets
.
fromLTRB
(
0
,
5
,
0
,
5
),
onPressed:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
SignInPage
(),
));
},
child:
Text
(
'로그인'
,
textScaleFactor:
1.0
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
16
,
fontFamily:
'Noto'
,
fontWeight:
FontWeight
.
bold
),
),
color:
Color
(
0xff1674f6
),
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
50
)),
)),
width:
size
.
width
*
0.8
,
height:
46
,
margin:
EdgeInsets
.
only
(
bottom:
0
),
child:
FlatButton
(
padding:
EdgeInsets
.
fromLTRB
(
0
,
5
,
0
,
5
),
onPressed:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
SignInPage
(),
));
},
child:
Text
(
'로그인'
,
textScaleFactor:
1.0
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
16
,
fontFamily:
'Noto'
,
fontWeight:
FontWeight
.
bold
),
),
color:
Color
(
0xff1674f6
),
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
50
)),
),
),
),
GestureDetector
(
child:
Container
(
...
...
frontend/flutter_application_1/lib/src/screens/BottleList.dart
→
frontend/flutter_application_1/lib/src/screens/
Register/
BottleList.dart
View file @
d290ec8
...
...
@@ -3,8 +3,8 @@ import 'package:flutter/material.dart';
import
'package:flutter/services.dart'
;
import
'package:http/http.dart'
as
http
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'models/Bottle.dart'
;
import
'DashBoard.dart'
;
import
'
../
models/Bottle.dart'
;
import
'
../
DashBoard.dart'
;
class
BottleList
extends
StatefulWidget
{
List
<
Bottle
>
bottlelist
;
...
...
@@ -44,7 +44,9 @@ class _BottleListState extends State<BottleList> {
Expanded
(
child:
ListView
.
separated
(
padding:
const
EdgeInsets
.
all
(
30
),
itemCount:
widget
.
bottlelist
.
length
,
itemCount:
widget
.
bottlelist
.
length
==
null
?
0
:
widget
.
bottlelist
.
length
,
itemBuilder:
(
BuildContext
context
,
int
index
)
{
return
Container
(
padding:
EdgeInsets
.
all
(
8.0
),
...
...
frontend/flutter_application_1/lib/src/screens/Register/DetailMedicine.dart
0 → 100644
View file @
d290ec8
import
'package:Smart_Medicine_Box/src/screens/DashBoard.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/cupertino.dart'
;
import
'dart:convert'
;
import
'package:http/http.dart'
as
http
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'../models/Medicine.dart'
;
class
DetailMedicine
extends
StatefulWidget
{
Medicine
searchMedicine
;
String
bottleId
;
DetailMedicine
({
Key
key
,
this
.
searchMedicine
,
this
.
bottleId
})
:
super
(
key:
key
);
@override
_DetailMedicineState
createState
()
=>
_DetailMedicineState
();
}
class
_DetailMedicineState
extends
State
<
DetailMedicine
>
{
final
medicineDosageController
=
TextEditingController
();
//약 등록
Future
<
String
>
patchMedcine
()
async
{
http
.
Response
response
=
await
http
.
patch
(
Uri
.
encodeFull
(
DotEnv
().
env
[
'SERVER_URL'
]
+
'bottle/'
+
widget
.
bottleId
),
headers:
{
"Content-Type"
:
"application/json"
},
body:
jsonEncode
({
'medicineId'
:
widget
.
searchMedicine
.
medicineId
,
'dosage'
:
medicineDosageController
.
text
}));
print
(
response
.
statusCode
);
if
(
response
.
statusCode
==
200
)
{
return
"Complete"
;
}
else
if
(
response
.
statusCode
==
404
)
{
return
"약병이 존재하지 않습니다."
;
}
else
if
(
response
.
statusCode
==
403
)
{
return
"약병에 접근할 권한이 없습니다."
;
}
else
{
return
"알 수 없는 오류"
;
}
}
Widget
build
(
BuildContext
context
)
{
final
Size
size
=
MediaQuery
.
of
(
context
).
size
;
return
MaterialApp
(
home:
Scaffold
(
appBar:
AppBar
(
backgroundColor:
Colors
.
white
,
leading:
new
Icon
(
Icons
.
medical_services_rounded
,
color:
Colors
.
black
,
size:
45.0
),
title:
Text
(
'Smart Medicine Box'
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
23
,
fontFamily:
'Noto'
,
fontWeight:
FontWeight
.
bold
),
),
),
body:
SingleChildScrollView
(
scrollDirection:
Axis
.
vertical
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
center
,
children:
<
Widget
>[
SizedBox
(
height:
30
),
Container
(
padding:
EdgeInsets
.
fromLTRB
(
5
,
5
,
5
,
5
),
height:
size
.
height
*
0.08
,
width:
size
.
width
,
child:
Center
(
child:
Text
(
'세부 약 정보'
,
textAlign:
TextAlign
.
center
,
textScaleFactor:
1.0
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
36
,
fontFamily:
'NotoSansKR'
,
fontWeight:
FontWeight
.
w700
),
),
),
),
SizedBox
(
height:
5
),
Container
(
width:
size
.
width
,
padding:
EdgeInsets
.
fromLTRB
(
5
,
0
,
5
,
5
),
margin:
EdgeInsets
.
all
(
15
),
decoration:
BoxDecoration
(
border:
Border
.
all
(),
borderRadius:
BorderRadius
.
all
(
Radius
.
circular
(
25.0
)
// <--- border radius here
),
),
child:
Column
(
children:
[
SizedBox
(
height:
40
),
Container
(
child:
Center
(
child:
Text
(
widget
.
searchMedicine
.
name
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
24
,
fontFamily:
'NotoSansKR'
,
fontWeight:
FontWeight
.
w700
)),
),
),
SizedBox
(
height:
15
),
Container
(
width:
size
.
width
,
alignment:
Alignment
(
0.9
,
0
),
child:
Text
(
'제조사: '
+
widget
.
searchMedicine
.
company
,
style:
TextStyle
(
color:
Colors
.
grey
,
fontSize:
20
,
),
),
),
SizedBox
(
height:
30
),
Container
(
width:
size
.
width
,
padding:
EdgeInsets
.
fromLTRB
(
5
,
0
,
5
,
0
),
alignment:
Alignment
(-
1
,
0
),
child:
Text
(
'타겟 층 : '
+
widget
.
searchMedicine
.
target
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
16
),
),
),
SizedBox
(
height:
15
),
Container
(
width:
size
.
width
,
padding:
EdgeInsets
.
fromLTRB
(
5
,
0
,
5
,
0
),
alignment:
Alignment
(-
1
,
0
),
child:
Text
(
'복약 정보 : '
+
widget
.
searchMedicine
.
dosage
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
16
),
),
),
SizedBox
(
height:
10
),
Container
(
width:
size
.
width
,
padding:
EdgeInsets
.
fromLTRB
(
5
,
10
,
5
,
10
),
alignment:
Alignment
(-
1
,
0
),
child:
Column
(
children:
[
SizedBox
(
height:
12
,
),
Container
(
width:
size
.
width
,
child:
Text
(
'경고'
,
style:
TextStyle
(
color:
Colors
.
redAccent
,
fontSize:
14
),
),
),
SizedBox
(
height:
12
),
Container
(
width:
size
.
width
,
child:
Text
(
widget
.
searchMedicine
.
warn
,
style:
TextStyle
(
color:
Colors
.
redAccent
,
fontSize:
14
),
),
),
],
),
),
],
),
),
SizedBox
(
height:
12
),
Container
(
height:
size
.
height
*
0.1
,
padding:
const
EdgeInsets
.
fromLTRB
(
20
,
10
,
20
,
5
),
child:
TextFormField
(
keyboardType:
TextInputType
.
text
,
controller:
medicineDosageController
,
decoration:
InputDecoration
(
border:
OutlineInputBorder
(),
errorBorder:
InputBorder
.
none
,
disabledBorder:
InputBorder
.
none
,
hintText:
'하루에 섭취할 적정 복용량을 숫자만 입력하세요'
,
),
style:
TextStyle
(
fontSize:
16
,
fontFamily:
'NotoSansKR'
,
fontWeight:
FontWeight
.
w600
)),
),
SizedBox
(
height:
12
),
Container
(
height:
size
.
height
*
0.07
,
width:
size
.
width
*
0.8
,
child:
FlatButton
(
padding:
EdgeInsets
.
fromLTRB
(
0
,
5
,
0
,
5
),
onPressed:
()
async
{
String
saveMessage
=
await
patchMedcine
();
if
(
saveMessage
==
"Complete"
)
{
showDialog
(
context:
context
,
builder:
(
BuildContext
context
)
{
return
AlertDialog
(
title:
new
Text
(
'약 등록'
),
content:
new
Text
(
'약 등록이 완료 되었습니다.'
),
actions:
<
Widget
>[
new
FlatButton
(
child:
new
Text
(
'Close'
),
onPressed:
()
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
DashBoard
(
pageNumber:
1
,
bottleID:
int
.
parse
(
widget
.
bottleId
),
)));
})
],
);
});
}
},
child:
Text
(
'약 등록'
,
textScaleFactor:
1.0
,
style:
TextStyle
(
color:
Colors
.
white
,
fontSize:
20
,
fontFamily:
'Noto'
,
fontWeight:
FontWeight
.
bold
),
),
color:
Color
(
0xff1674f6
),
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
50
)),
),
),
SizedBox
(
height:
30
)
],
),
),
),
);
}
}
frontend/flutter_application_1/lib/src/screens/HubList.dart
→
frontend/flutter_application_1/lib/src/screens/
Register/
HubList.dart
View file @
d290ec8
...
...
@@ -5,7 +5,7 @@ import 'package:http/http.dart' as http;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
// Screen import
import
'RegisterBottle.dart'
;
import
'models/Bottle.dart'
;
import
'
../
models/Bottle.dart'
;
import
'BottleList.dart'
;
class
HubList
extends
StatefulWidget
{
...
...
@@ -89,8 +89,6 @@ class _HubListState extends State<HubList> {
var
result
=
await
getBottleList
(
widget
.
hublist
[
index
]);
if
(
result
==
"GET"
)
{
print
(
0
);
print
(
_bottleList
);
Navigator
.
push
(
context
,
MaterialPageRoute
(
...
...
frontend/flutter_application_1/lib/src/screens/RegisterBottle.dart
→
frontend/flutter_application_1/lib/src/screens/Register
/Register
Bottle.dart
View file @
d290ec8
...
...
@@ -16,9 +16,6 @@ class RegisterBottle extends StatefulWidget {
class
_RegisterBottleState
extends
State
<
RegisterBottle
>
{
final
medicineBottleIDController
=
TextEditingController
();
final
medicineHubIDController
=
TextEditingController
();
final
medicineHubPortController
=
TextEditingController
();
final
medicineHubHostController
=
TextEditingController
();
Future
<
String
>
registerhub_Validate
()
async
{
http
.
Response
bottleresponse
=
await
http
.
post
(
...
...
@@ -119,7 +116,11 @@ class _RegisterBottleState extends State<RegisterBottle> {
context
,
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
SearchMedicine
()));
SearchMedicine
(
bottleId:
medicineBottleIDController
.
text
,
)));
})
],
);
...
...
frontend/flutter_application_1/lib/src/screens/RegsiterHub.dart
→
frontend/flutter_application_1/lib/src/screens/Reg
ister/Reg
siterHub.dart
View file @
d290ec8
File moved
frontend/flutter_application_1/lib/src/screens/SearchMedicine.dart
→
frontend/flutter_application_1/lib/src/screens/
Register/
SearchMedicine.dart
View file @
d290ec8
...
...
@@ -3,17 +3,46 @@ import 'package:flutter/material.dart';
import
'package:flutter/services.dart'
;
import
'package:http/http.dart'
as
http
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'
models/Bottl
e.dart'
;
import
'D
ashBoard
.dart'
;
import
'
../models/Medicin
e.dart'
;
import
'D
etailMedicine
.dart'
;
class
SearchMedicine
extends
StatefulWidget
{
String
bottleId
;
SearchMedicine
({
Key
key
,
this
.
bottleId
})
:
super
(
key:
key
);
@override
_SearchMedicineState
createState
()
=>
_SearchMedicineState
();
}
class
_SearchMedicineState
extends
State
<
SearchMedicine
>
{
List
<
Medicine
>
_medicineList
=
new
List
<
Medicine
>();
final
medicineNameController
=
TextEditingController
();
final
medicineFactureController
=
TextEditingController
();
final
medicineCompanyController
=
TextEditingController
();
Future
<
String
>
postMeicineList
()
async
{
http
.
Response
response
=
await
http
.
post
(
Uri
.
encodeFull
(
DotEnv
().
env
[
'SERVER_URL'
]
+
'medicine'
),
headers:
{
"Content-Type"
:
"application/json"
},
body:
jsonEncode
({
'name'
:
medicineNameController
.
text
,
'company'
:
medicineCompanyController
.
text
,
}));
if
(
_medicineList
.
length
!=
0
)
{
_medicineList
.
clear
();
}
if
(
response
.
statusCode
==
200
)
{
List
<
dynamic
>
values
=
new
List
<
dynamic
>();
values
=
json
.
decode
(
response
.
body
);
for
(
int
i
=
0
;
i
<
values
.
length
;
i
++)
{
Map
<
String
,
dynamic
>
map
=
values
[
i
];
_medicineList
.
add
(
Medicine
.
fromJson
(
map
));
}
return
"GET"
;
}
else
{
return
"Not Found"
;
}
}
Widget
build
(
BuildContext
context
)
{
bool
isForward
=
false
;
...
...
@@ -125,7 +154,7 @@ class _SearchMedicineState extends State<SearchMedicine> {
width:
size
.
width
*
0.50
,
child:
TextFormField
(
keyboardType:
TextInputType
.
text
,
controller:
medicine
Facture
Controller
,
controller:
medicine
Company
Controller
,
decoration:
InputDecoration
(
border:
InputBorder
.
none
,
focusedBorder:
InputBorder
.
none
,
...
...
@@ -158,7 +187,11 @@ class _SearchMedicineState extends State<SearchMedicine> {
padding:
const
EdgeInsets
.
fromLTRB
(
10
,
0
,
0
,
0
),
child:
IconButton
(
icon:
Icon
(
Icons
.
search
,
size:
40
),
onPressed:
()
{
onPressed:
()
async
{
String
saveMessage
=
await
postMeicineList
();
if
(
saveMessage
==
"GET"
)
{
setState
(()
{});
}
//검색 함수를 여기다가
},
),
...
...
@@ -169,10 +202,38 @@ class _SearchMedicineState extends State<SearchMedicine> {
SizedBox
(
height:
20
),
Expanded
(
child:
ListView
.
separated
(
itemBuilder:
(
BuildContext
context
,
int
index
)
{},
itemBuilder:
(
BuildContext
context
,
int
index
)
{
return
Container
(
padding:
EdgeInsets
.
all
(
8.0
),
decoration:
BoxDecoration
(
border:
Border
.
all
()),
child:
ListTile
(
title:
Text
(
'Medicine: '
+
_medicineList
[
index
].
name
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
20
,
fontFamily:
'Noto'
,
fontWeight:
FontWeight
.
bold
),
),
trailing:
Icon
(
Icons
.
arrow_forward
),
onTap:
()
async
{
Navigator
.
push
(
context
,
MaterialPageRoute
(
builder:
(
BuildContext
context
)
=>
DetailMedicine
(
searchMedicine:
_medicineList
[
index
],
bottleId:
widget
.
bottleId
,
),
));
}),
);
},
separatorBuilder:
(
BuildContext
contetx
,
int
index
)
=>
const
Divider
(),
itemCount:
0
))
itemCount:
_medicineList
.
length
==
null
?
0
:
_medicineList
.
length
))
],
),
),
...
...
frontend/flutter_application_1/lib/src/screens/SignInPage.dart
→
frontend/flutter_application_1/lib/src/screens/
Register/
SignInPage.dart
View file @
d290ec8
...
...
@@ -4,7 +4,7 @@ import 'package:flutter/services.dart';
import
'package:http/http.dart'
as
http
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'package:shared_preferences/shared_preferences.dart'
;
import
'./DashBoard.dart'
;
import
'.
.
/DashBoard.dart'
;
import
'HubList.dart'
;
import
'RegsiterHub.dart'
;
...
...
frontend/flutter_application_1/lib/src/screens/SignUpLocal.dart
→
frontend/flutter_application_1/lib/src/screens/
Register/
SignUpLocal.dart
View file @
d290ec8
...
...
@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import
'package:http/http.dart'
as
http
;
import
'package:flutter_dotenv/flutter_dotenv.dart'
;
import
'Homepage.dart'
;
import
'
../
Homepage.dart'
;
class
SignUpLocal
extends
StatefulWidget
{
@override
...
...
frontend/flutter_application_1/lib/src/screens/models/Data.dart
0 → 100644
View file @
d290ec8
import
'Medicine.dart'
;
class
Data
{
final
int
totalItem
;
final
List
<
Medicine
>
result
;
Data
({
this
.
totalItem
,
this
.
result
});
factory
Data
.
fromJson
(
Map
<
String
,
dynamic
>
parsedJson
)
{
var
list
=
parsedJson
[
'result'
]
as
List
;
List
<
Medicine
>
resultList
=
list
.
map
((
i
)
=>
Medicine
.
fromJson
(
i
)).
toList
();
return
Data
(
totalItem:
parsedJson
[
'totalItem'
],
result:
resultList
,
);
}
Map
<
String
,
dynamic
>
toJson
()
=>
{
"totalItem"
:
totalItem
,
"result"
:
result
,
};
}
frontend/flutter_application_1/pubspec.yaml
View file @
d290ec8
...
...
@@ -32,7 +32,7 @@ dependencies:
flutter_datetime_picker
:
^1.3.4
timezone
:
^0.6.0
intl
:
^0.16.1
shared_preferences
:
^0.5.
6+1
shared_preferences
:
^0.5.
12+2
flutter_blue
:
^0.7.2
cupertino_icons
:
^0.1.3
http
:
^0.12.0+4
...
...
Please
register
or
login
to post a comment