Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
medapp_eksad
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qorri_di
medapp_eksad
Commits
c7419aa8
Commit
c7419aa8
authored
Sep 30, 2022
by
Budi Prasetyo
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://103.44.149.204/qorridi/medapp_eksad
parents
3f11b019
d1c211a5
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
1336 additions
and
499 deletions
+1336
-499
empty.jpg
assets/file/empty.jpg
+0
-0
setting_api.dart
lib/api/setting_api.dart
+10
-4
admin_contact.dart
lib/dashboard/admin/admin_contact.dart
+3
-3
admin_setting.dart
lib/dashboard/admin/admin_setting.dart
+253
-142
homepage.dart
lib/homepage.dart
+100
-16
login.dart
lib/login.dart
+48
-25
main.dart
lib/main.dart
+1
-1
about_us.dart
lib/screen/about_us.dart
+105
-21
contact_us.dart
lib/screen/contact_us/contact_us.dart
+94
-11
contact_us1.dart
lib/screen/contact_us/contact_us1.dart
+2
-1
contact_us2.dart
lib/screen/contact_us/contact_us2.dart
+5
-0
footer.dart
lib/screen/footer.dart
+162
-71
home1.dart
lib/screen/home/home1.dart
+2
-1
solution.dart
lib/screen/solution.dart
+80
-13
our_solution.dart
lib/screen/solution/our_solution.dart
+6
-3
small_contact_us1.dart
lib/screen_small/small_contact/small_contact_us1.dart
+2
-1
small_footer.dart
lib/screen_small/small_footer.dart
+292
-147
small_home1.dart
lib/screen_small/small_home/small_home1.dart
+4
-4
small_solution1.dart
lib/screen_small/small_solution/small_solution1.dart
+4
-3
demo_user.dart
lib/screen_user/demo_user.dart
+1
-1
home_user.dart
lib/screen_user/home_user.dart
+100
-22
Scroll_top.dart
lib/widget/Scroll_top.dart
+58
-0
componen.dart
lib/widget/componen.dart
+0
-1
whatsapp.dart
lib/widget/whatsapp.dart
+3
-8
pubspec.yaml
pubspec.yaml
+1
-0
No files found.
assets/file/empty.jpg
0 → 100644
View file @
c7419aa8
37.7 KB
lib/api/setting_api.dart
View file @
c7419aa8
...
...
@@ -27,18 +27,18 @@ Future<bool> createSetting(im, tt, em, no) async {
}
}
Future
<
bool
>
updateSetting
(
id
,
image
,
name
,
title
,
email
,
no
,)
async
{
Future
<
bool
>
updateSetting
(
id
,
title
,
email
,
no
,)
async
{
final
response
=
await
http
.
put
(
Uri
.
parse
(
'
$cmd
/setting/updateSetting'
),
body:
jsonEncode
({
"idsetting"
:
id
,
"image"
:
image
,
"name"
:
name
,
//
"image": image,
//
"name": name,
"title"
:
title
,
// "tagline": tagline,
"email"
:
email
,
"no"
:
no
,
"idrole"
:
"R001"
,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
...
...
@@ -61,3 +61,9 @@ Future<List<dynamic>> getSettingDesc() async {
Uri
.
parse
(
'
$qry
/setting/getSettingByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
dynamic
>
getSettingDesc2
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/setting/getSettingByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
\ No newline at end of file
lib/dashboard/admin/admin_contact.dart
View file @
c7419aa8
...
...
@@ -146,10 +146,10 @@ class _Dashboard4State extends State<Dashboard4> {
content:
Form
(
child:
Container
(
padding:
EdgeInsets
.
only
(
left:
screenSize
.
width
*
0.04
5
,
left:
screenSize
.
width
*
0.04
0
,
top:
screenSize
.
height
*
0.01
),
width:
screenSize
.
width
*
0.5
0
,
height:
screenSize
.
height
*
0.5
0
,
width:
screenSize
.
width
*
0.5
5
,
height:
screenSize
.
height
*
0.5
5
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
lib/dashboard/admin/admin_setting.dart
View file @
c7419aa8
...
...
@@ -59,7 +59,7 @@ class _SettingDashboardState extends State<SettingDashboard> {
String
id
=
''
;
String
im
=
''
;
String
tt
=
''
;
String
tl
=
''
;
String
em
=
''
;
String
no
=
''
;
final
String
role
=
'MCS'
;
...
...
@@ -76,19 +76,24 @@ class _SettingDashboardState extends State<SettingDashboard> {
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
SizedBox
(
height:
10
,),
SizedBox
(
height:
10
,
),
const
Text
(
"General Setting"
,
textAlign:
TextAlign
.
start
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
37
,
fontWeight:
FontWeight
.
bold
),
),
SizedBox
(
height:
10
,),
SizedBox
(
height:
10
,
),
Container
(
color:
Colors
.
white
,
height:
screenSize
.
height
*
0.75
,
width:
screenSize
.
width
*
0.7
,
padding:
const
EdgeInsets
.
only
(
left:
30
,
top:
15
,
right:
20
,
bottom:
15
),
height:
screenSize
.
height
*
0.75
,
width:
screenSize
.
width
*
0.7
,
padding:
const
EdgeInsets
.
only
(
left:
30
,
top:
13
,
right:
20
,
bottom:
13
),
child:
Form
(
key:
formKey
,
child:
Column
(
...
...
@@ -101,44 +106,115 @@ class _SettingDashboardState extends State<SettingDashboard> {
color:
Colors
.
black
,
fontSize:
20
,
fontWeight:
FontWeight
.
normal
)),
// SizedBox(
// height: 0,
// width: 820,
// ),
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
5
),
),
primary:
const
Color
.
fromARGB
(
255
,
0
,
67
,
192
),
),
onPressed:
()
{
switch
(
btnText
)
{
case
'Save Setting'
:
createSetting
(
im
.
toString
(),
tt
.
toString
(),
em
.
toString
(),
no
.
toString
());
setState
(()
{
btnText
=
'Update Setting'
;
enb
=
false
;
});
break
;
case
'Update Setting'
:
setState
(()
{
enb
=
true
;
btnText
=
'Save Update'
;
});
break
;
case
'Save Update'
:
break
;
default
:
}
FutureBuilder
<
List
<
dynamic
>>(
future:
getSettingDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
final
mcsController
=
TextEditingController
();
return
ElevatedButton
(
style:
ElevatedButton
.
styleFrom
(
shape:
RoundedRectangleBorder
(
borderRadius:
BorderRadius
.
circular
(
5
),
),
primary:
const
Color
.
fromARGB
(
255
,
0
,
67
,
192
),
),
onPressed:
()
{
switch
(
btnText
)
{
case
'Save Setting'
:
if
(
em
.
isEmpty
&&
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
=
pgm
[
'email'
].
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
pgm
[
'idsetting'
]);
print
(
'if pertama'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
&&
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
.
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
pgm
[
'idsetting'
]);
print
(
'if kedua'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Email Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
&&
em
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
=
pgm
[
'email'
].
toString
(),
no
.
toString
());
print
(
'if ketiga'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
.
toString
(),
no
.
toString
());
print
(
'if keempat'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Email and No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
em
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
=
pgm
[
'email'
].
toString
(),
no
.
toString
());
print
(
'if kelima'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title and No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
.
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
'if keenam'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title and Email Success'
),
backgroundColor:
Colors
.
green
,),);
}
createSetting
(
im
.
toString
(),
tt
.
toString
(),
em
.
toString
(),
no
.
toString
());
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Data Success'
),
backgroundColor:
Colors
.
green
,),);
setState
(()
{
btnText
=
'Update Setting'
;
enb
=
false
;
});
break
;
case
'Update Setting'
:
setState
(()
{
enb
=
true
;
btnText
=
'Save Update'
;
});
break
;
case
'Save Update'
:
if
(
em
.
isEmpty
&&
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
=
pgm
[
'email'
].
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
pgm
[
'idsetting'
]);
print
(
'if pertama'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
&&
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
.
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
pgm
[
'idsetting'
]);
print
(
'if kedua'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Email Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
&&
em
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
=
pgm
[
'email'
].
toString
(),
no
.
toString
());
print
(
'if ketiga'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
tt
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
=
pgm
[
'title'
],
em
.
toString
(),
no
.
toString
());
print
(
'if keempat'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Email and No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
em
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
=
pgm
[
'email'
].
toString
(),
no
.
toString
());
print
(
'if kelima'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title and No Success'
),
backgroundColor:
Colors
.
green
,),);
}
else
if
(
no
.
isEmpty
){
updateSetting
(
id
=
pgm
[
'idsetting'
].
toString
(),
tt
.
toString
(),
em
.
toString
(),
no
=
pgm
[
'no'
].
toString
());
print
(
'if keenam'
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Title and Email Success'
),
backgroundColor:
Colors
.
green
,),);
}
createSetting
(
im
.
toString
(),
tt
.
toString
(),
em
.
toString
(),
no
.
toString
());
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Data Success'
),
backgroundColor:
Colors
.
green
,),);
break
;
default
:
}
},
child:
Text
(
btnText
,
style:
const
TextStyle
(
fontSize:
16
,
fontWeight:
FontWeight
.
bold
),
),
);
},
child:
Text
(
btnText
,
style:
const
TextStyle
(
fontSize:
16
,
fontWeight:
FontWeight
.
bold
),
),
),
],
),
const
Divider
(
...
...
@@ -148,11 +224,16 @@ class _SettingDashboardState extends State<SettingDashboard> {
// endIndent: 0,
color:
Colors
.
grey
,
),
SizedBox
(
height:
25
,),
Text
(
'Data Must Be Edited'
),
Text
(
'For data that is not modified, Please copy last data , delete then paste again'
),
SizedBox
(
height:
25
,
),
Row
(
children:
[
Container
(
height:
2
3
0
,
height:
2
2
0
,
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -235,7 +316,7 @@ class _SettingDashboardState extends State<SettingDashboard> {
width:
screenSize
.
width
*
0.05
,
),
Container
(
height:
2
3
0
,
height:
2
2
0
,
child:
Column
(
mainAxisAlignment:
MainAxisAlignment
.
start
,
crossAxisAlignment:
CrossAxisAlignment
.
start
,
...
...
@@ -256,20 +337,36 @@ class _SettingDashboardState extends State<SettingDashboard> {
Container
(
height:
40
,
width:
screenSize1
*
0.5
,
child:
TextFormField
(
decoration:
const
InputDecoration
(
labelText:
"MedApp"
,
hintStyle:
TextStyle
(),
border:
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
tt
=
value
,
enabled:
enb
,
child:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSettingDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
final
mcsController
=
TextEditingController
();
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
TextFormField
(
initialValue:
pgm
[
'title'
],
decoration:
const
InputDecoration
(
labelText:
"MedApp"
,
hintStyle:
TextStyle
(),
border:
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
tt
=
value
,
enabled:
enb
,
);
},
),
),
//
const SizedBox(
//
height: 20,
//
),
const
SizedBox
(
height:
20
,
),
// const Text(
// "Site tagline",
// style: TextStyle(
...
...
@@ -277,9 +374,9 @@ class _SettingDashboardState extends State<SettingDashboard> {
// fontSize: 17,
// fontWeight: FontWeight.bold),
// ),
//
const SizedBox(
//
height: 7,
//
),
const
SizedBox
(
height:
7
,
),
// Container(
// height: 40,
// width: screenSize1 * 0.5,
...
...
@@ -294,98 +391,112 @@ class _SettingDashboardState extends State<SettingDashboard> {
// enabled: enb,
// ),
// ),
//
const SizedBox(
//
height: 10,
//
),
//
const Text(
//
"In a few words, explain what this site is about.",
//
overflow: TextOverflow.ellipsis,
//
style: TextStyle(
//
color: Colors.grey,
//
fontSize: 16,
//
fontWeight: FontWeight.normal)),
const
SizedBox
(
height:
10
,
),
const
Text
(
"In a few words, explain what this site is about."
,
overflow:
TextOverflow
.
ellipsis
,
style:
TextStyle
(
color:
Colors
.
grey
,
fontSize:
16
,
fontWeight:
FontWeight
.
normal
)),
],
),
),
],
),
Row
(
children:
[
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
FutureBuilder
<
List
<
dynamic
>>(
future:
getSettingDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
Row
(
children:
[
const
Text
(
"Email address"
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
17
,
fontWeight:
FontWeight
.
bold
),
),
const
SizedBox
(
height:
10
,
),
Container
(
height:
40
,
width:
screenSize1
*
0.5
,
child:
TextFormField
(
decoration:
InputDecoration
(
fillColor:
Colors
.
grey
[
200
],
labelText:
"xxxxxx@eksad.com"
,
hintStyle:
const
TextStyle
(),
border:
const
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
em
=
value
,
enabled:
enb
,
),
),
const
SizedBox
(
height:
10
,
),
],
),
SizedBox
(
width:
30
,),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
const
Text
(
"No Office"
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
17
,
fontWeight:
FontWeight
.
bold
),
),
const
SizedBox
(
height:
10
,
),
Container
(
height:
40
,
width:
screenSize1
*
0.5
,
child:
TextFormField
(
decoration:
const
InputDecoration
(
labelText:
"02x-xxxx-xxxx"
,
hintStyle:
TextStyle
(),
border:
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
no
=
value
,
enabled:
enb
,
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
const
Text
(
"Email address"
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
17
,
fontWeight:
FontWeight
.
bold
),
),
const
SizedBox
(
height:
10
,
),
Container
(
height:
40
,
width:
screenSize1
*
0.5
,
child:
TextFormField
(
initialValue:
pgm
[
'email'
],
decoration:
InputDecoration
(
fillColor:
Colors
.
grey
[
200
],
labelText:
"xxxxxx@eksad.com"
,
hintStyle:
const
TextStyle
(),
border:
const
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
em
=
value
,
enabled:
enb
,
),
),
const
SizedBox
(
height:
10
,
),
],
),
const
SizedBox
(
height:
1
0
,
SizedBox
(
width:
3
0
,
),
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
start
,
children:
[
const
Text
(
"No Office"
,
style:
TextStyle
(
color:
Colors
.
black
,
fontSize:
17
,
fontWeight:
FontWeight
.
bold
),
),
const
SizedBox
(
height:
10
,
),
Container
(
height:
40
,
width:
screenSize1
*
0.5
,
child:
TextFormField
(
initialValue:
pgm
[
'no'
],
decoration:
const
InputDecoration
(
labelText:
"02x-xxxx-xxxx"
,
hintStyle:
TextStyle
(),
border:
OutlineInputBorder
(
borderSide:
BorderSide
(
width:
1
,
color:
Colors
.
grey
))),
onChanged:
(
value
)
=>
no
=
value
,
enabled:
enb
,
),
),
const
SizedBox
(
height:
10
,
),
],
)
// const SizedBox(
// width: 30,
// ),
],
)
// const SizedBox(
// width: 30,
// ),
],
);
},
),
// const Spacer(
// flex: 20,
// ),
...
...
lib/homepage.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/appbar/appbar_home.dart'
;
import
'package:medapp_eksad/screen_small/small_contact/small_contact_us2.dart'
;
import
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
...
...
@@ -12,6 +14,7 @@ import 'package:medapp_eksad/screen_small/small_home/small_home1.dart';
import
'package:medapp_eksad/screen_small/small_home/small_home2.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home3.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home4.dart'
;
import
'package:medapp_eksad/widget/Scroll_top.dart'
;
import
'package:medapp_eksad/widget/drawer.dart'
;
import
'package:medapp_eksad/widget/responsive.dart'
;
import
'package:medapp_eksad/widget/whatsapp.dart'
;
...
...
@@ -32,10 +35,26 @@ class HomePage extends StatefulWidget {
}
class
_HomePageState
extends
State
<
HomePage
>
{
// Untuk pake PAGE per index
PageController
controller
=
PageController
();
void
_scrollToIndex2
(
int
index
)
{
controller
.
animateToPage
(
index
,
duration:
const
Duration
(
seconds:
2
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
// Untuk pake LIST per height container
ScrollController
controller2
=
ScrollController
();
void
_scrollToIndex
(
double
index
)
{
controller2
.
animateTo
(
index
,
duration:
const
Duration
(
seconds:
1
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
final
GlobalKey
<
ScaffoldState
>
_scaffoldKey
=
new
GlobalKey
<
ScaffoldState
>();
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'MedApp by Eksad'
,
context
);
//
setPageTitle('MedApp by Eksad', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
key:
_scaffoldKey
,
...
...
@@ -46,29 +65,94 @@ class _HomePageState extends State<HomePage> {
Colors
.
black
,
Colors
.
black
,
Colors
.
black
),
drawer:
const
DrawerMedApp
(),
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
ListView
(
children:
const
[
SmallHome1
(),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
?
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
SmallHome1
(
wijet:
Button_scroll_small
()),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
)
:
ListView
(
:
Stack
(
children:
[
const
Home1
(),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
Home1
(
wijet:
Button_scroll
()),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
),
);
}
ElevatedButton
Button_scroll
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
3780
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
17
,
letterSpacing:
2
,
fontWeight:
FontWeight
.
w500
),
),
);
}
ElevatedButton
Button_scroll_small
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
5410
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
fixedSize:
const
Size
(
50
,
20
)),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
letterSpacing:
1.5
,
fontWeight:
FontWeight
.
w500
),
),
);
}
AppBar
AppBarKecil
()
{
return
AppBar
(
leading:
IconButton
(
...
...
lib/login.dart
View file @
c7419aa8
...
...
@@ -29,20 +29,19 @@ class _SignInState extends State<SignIn> {
void
loginUser
()
{
context
.
read
<
FirebaseAuthMethods
>().
loginWithEmail
(
email:
emailController
.
text
,
password:
passwordController
.
text
,
context:
context
,
);
email:
emailController
.
text
,
password:
passwordController
.
text
,
context:
context
,
);
}
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'Login MedApps'
,
context
);
//
setPageTitle('Login MedApps', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
body:
Stack
(
children:
[
Container
(
decoration:
const
BoxDecoration
(
image:
DecorationImage
(
...
...
@@ -57,7 +56,6 @@ class _SignInState extends State<SignIn> {
bottom:
screenSize
.
height
*
0.13
),
child:
Stack
(
children:
[
Container
(
decoration:
BoxDecoration
(
color:
const
Color
.
fromARGB
(
255
,
10
,
116
,
255
),
...
...
@@ -71,7 +69,8 @@ class _SignInState extends State<SignIn> {
),
Padding
(
padding:
EdgeInsets
.
only
(
left:
screenSize
.
width
*
0.33
,
top:
screenSize
.
height
*
0.07
),
left:
screenSize
.
width
*
0.33
,
top:
screenSize
.
height
*
0.07
),
child:
Container
(
width:
screenSize
.
width
*
0.3
,
height:
screenSize
.
height
*
0.6
,
...
...
@@ -106,8 +105,8 @@ class _SignInState extends State<SignIn> {
crossAxisAlignment:
CrossAxisAlignment
.
start
,
children:
[
Container
(
padding:
EdgeInsets
.
only
(
left:
screenSize
.
width
*
0.055
),
padding:
EdgeInsets
.
only
(
left:
screenSize
.
width
*
0.055
),
height:
screenSize
.
width
*
0.02
,
child:
Image
.
asset
(
"assets/logo/medapp-logo.png"
),
),
...
...
@@ -136,8 +135,15 @@ class _SignInState extends State<SignIn> {
child:
TextFormField
(
controller:
emailController
,
textAlign:
TextAlign
.
start
,
onFieldSubmitted:
(
String
value
){
loginUser
();
onFieldSubmitted:
(
String
value
)
{
if
(
emailController
.
value
.
text
==
'admin@admin.com'
&&
passwordController
.
value
.
text
==
'administrator'
)
{
Navigator
.
pushNamed
(
context
,
'/dashboard'
);
}
else
{
loginUser
();
}
},
decoration:
InputDecoration
(
labelText:
"Enter Your Email"
,
...
...
@@ -183,8 +189,15 @@ class _SignInState extends State<SignIn> {
width:
screenSize
.
width
*
0.2
,
child:
TextFormField
(
controller:
passwordController
,
onFieldSubmitted:
(
String
value
){
loginUser
();
onFieldSubmitted:
(
String
value
)
{
if
(
emailController
.
value
.
text
==
'admin@admin.com'
&&
passwordController
.
value
.
text
==
'administrator'
)
{
Navigator
.
pushNamed
(
context
,
'/dashboard'
);
}
else
{
loginUser
();
}
},
textAlign:
TextAlign
.
start
,
obscureText:
_isObscure
,
...
...
@@ -224,10 +237,15 @@ class _SignInState extends State<SignIn> {
crossAxisAlignment:
CrossAxisAlignment
.
end
,
mainAxisAlignment:
MainAxisAlignment
.
end
,
children:
[
TextButton
(
onPressed:
(){
Navigator
.
pushNamed
(
context
,
'/reset_password'
);
},
child:
Text
(
'Forgot Password?'
)),
SizedBox
(
width:
52
,)
TextButton
(
onPressed:
()
{
Navigator
.
pushNamed
(
context
,
'/reset_password'
);
},
child:
Text
(
'Forgot Password?'
)),
SizedBox
(
width:
52
,
)
],
),
const
Spacer
(
...
...
@@ -240,10 +258,13 @@ class _SignInState extends State<SignIn> {
width:
screenSize
.
width
*
0.08
,
child:
ElevatedButton
(
onPressed:
()
{
if
(
emailController
.
value
.
text
==
'admin@admin.com'
&&
passwordController
.
value
.
text
==
'administrator'
)
{
Navigator
.
pushNamed
(
context
,
'/dashboard'
);
}
else
{
if
(
emailController
.
value
.
text
==
'admin@admin.com'
&&
passwordController
.
value
.
text
==
'administrator'
)
{
Navigator
.
pushNamed
(
context
,
'/dashboard'
);
}
else
{
loginUser
();
}
// if (emailController.value.text == emailController &&
...
...
@@ -321,9 +342,11 @@ class _SignInState extends State<SignIn> {
),
Padding
(
padding:
const
EdgeInsets
.
all
(
21.0
),
child:
ElevatedButton
(
onPressed:
(){
Navigator
.
pushNamed
(
context
,
'/'
);
},
child:
Icon
(
Icons
.
arrow_back
)),
child:
ElevatedButton
(
onPressed:
()
{
Navigator
.
pushNamed
(
context
,
'/'
);
},
child:
Icon
(
Icons
.
arrow_back
)),
),
],
),
...
...
lib/main.dart
View file @
c7419aa8
...
...
@@ -40,7 +40,7 @@ class MyApp extends StatelessWidget {
],
child:
MaterialApp
(
debugShowCheckedModeBanner:
false
,
title:
"MedApp by Eksad"
,
//
title: "MedApp by Eksad",
initialRoute:
'/'
,
routes:
{
'/'
:
(
context
)
=>
const
HomePage
(),
...
...
lib/screen/about_us.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/appbar/appbar_home.dart'
;
import
'package:medapp_eksad/screen_small/small_contact/small_contact_us2.dart'
;
import
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
...
...
@@ -12,6 +14,7 @@ import 'package:medapp_eksad/screen_small/small_home/small_home1.dart';
import
'package:medapp_eksad/screen_small/small_home/small_home2.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home3.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home4.dart'
;
import
'package:medapp_eksad/widget/Scroll_top.dart'
;
import
'package:medapp_eksad/widget/drawer.dart'
;
import
'package:medapp_eksad/widget/responsive.dart'
;
import
'package:medapp_eksad/widget/whatsapp.dart'
;
...
...
@@ -32,10 +35,26 @@ class AboutUs extends StatefulWidget {
}
class
_AboutUsState
extends
State
<
AboutUs
>
{
// Untuk pake PAGE per index
PageController
controller
=
PageController
();
void
_scrollToIndex2
(
int
index
)
{
controller
.
animateToPage
(
index
,
duration:
const
Duration
(
seconds:
2
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
// Untuk pake LIST per height container
ScrollController
controller2
=
ScrollController
();
void
_scrollToIndex
(
double
index
)
{
controller2
.
animateTo
(
index
,
duration:
const
Duration
(
seconds:
1
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
final
GlobalKey
<
ScaffoldState
>
_scaffoldKey
=
new
GlobalKey
<
ScaffoldState
>();
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'About Us'
,
context
);
//
setPageTitle('About Us', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
key:
_scaffoldKey
,
...
...
@@ -43,28 +62,93 @@ class _AboutUsState extends State<AboutUs> {
appBar:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
AppBarKecil
()
:
AppbarHomeLarge
(
screenSize
,
context
,
Colors
.
black
,
Colors
.
blue
,
Colors
.
black
,
Colors
.
black
,
Colors
.
black
),
Colors
.
black
,
Colors
.
black
,
Colors
.
black
),
drawer:
const
DrawerMedApp
(),
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
ListView
(
children:
const
[
SmallHome1
(),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
],
)
:
ListView
(
children:
[
const
Home1
(),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
],
?
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
SmallHome1
(
wijet:
Button_scroll_small
()),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
)
:
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
Home1
(
wijet:
Button_scroll
()),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
),
);
}
ElevatedButton
Button_scroll
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
3780
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
17
,
letterSpacing:
2
,
fontWeight:
FontWeight
.
w500
),
),
);
}
ElevatedButton
Button_scroll_small
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
5410
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
fixedSize:
const
Size
(
50
,
20
)),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
letterSpacing:
1.5
,
fontWeight:
FontWeight
.
w500
),
),
);
}
...
...
lib/screen/contact_us/contact_us.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/appbar/appbar_home.dart'
;
import
'package:medapp_eksad/screen_small/small_contact/small_contact_us1.dart'
;
import
'package:medapp_eksad/screen_small/small_contact/small_contact_us2.dart'
;
...
...
@@ -6,6 +8,7 @@ import 'package:medapp_eksad/screen_small/small_footer.dart';
import
'package:medapp_eksad/screen/contact_us/contact_us1.dart'
;
import
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
import
'package:medapp_eksad/screen/footer.dart'
;
import
'package:medapp_eksad/widget/Scroll_top.dart'
;
import
'package:medapp_eksad/widget/drawer.dart'
;
import
'package:medapp_eksad/widget/responsive.dart'
;
import
'package:medapp_eksad/widget/whatsapp.dart'
;
...
...
@@ -26,10 +29,26 @@ class ContactUs extends StatefulWidget {
}
class
_ContactUsState
extends
State
<
ContactUs
>
{
// Untuk pake PAGE per index
PageController
controller
=
PageController
();
void
_scrollToIndex2
(
int
index
)
{
controller
.
animateToPage
(
index
,
duration:
const
Duration
(
seconds:
2
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
// Untuk pake LIST per height container
ScrollController
controller2
=
ScrollController
();
void
_scrollToIndex
(
double
index
)
{
controller2
.
animateTo
(
index
,
duration:
const
Duration
(
seconds:
1
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
final
GlobalKey
<
ScaffoldState
>
_scaffoldKey
=
GlobalKey
<
ScaffoldState
>();
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'Contact Us'
,
context
);
//
setPageTitle('Contact Us', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
key:
_scaffoldKey
,
...
...
@@ -39,22 +58,86 @@ class _ContactUsState extends State<ContactUs> {
Colors
.
black
,
Colors
.
black
,
Colors
.
blue
),
drawer:
const
DrawerMedApp
(),
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
ListView
(
children:
const
[
ContactUs1_small
(),
ContactUs2_small
(),
FooterSmall
(),
?
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
ContactUs1_small
(
wijet:
Button_scroll_small
()),
ContactUs2_small
(),
FooterSmall
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
)
:
ListView
(
:
Stack
(
children:
[
ContactUs1
(),
ContactUs2
(),
Footer
(),
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
ContactUs1
(
wijet:
Button_scroll
()),
ContactUs2
(),
Footer
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
),
floatingActionButtonLocation:
FloatingActionButtonLocation
.
endFloat
,
floatingActionButton:
WAChat
()
floatingActionButton:
WAChat
());
}
ElevatedButton
Button_scroll
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
3780
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
17
,
letterSpacing:
2
,
fontWeight:
FontWeight
.
w500
),
),
);
}
ElevatedButton
Button_scroll_small
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
5410
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
fixedSize:
const
Size
(
50
,
20
)),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
letterSpacing:
1.5
,
fontWeight:
FontWeight
.
w500
),
),
);
}
...
...
lib/screen/contact_us/contact_us1.dart
View file @
c7419aa8
...
...
@@ -2,7 +2,8 @@ import 'package:flutter/material.dart';
import
'package:google_fonts/google_fonts.dart'
;
class
ContactUs1
extends
StatefulWidget
{
const
ContactUs1
({
Key
?
key
})
:
super
(
key:
key
);
ContactUs1
({
Key
?
key
,
required
this
.
wijet
})
:
super
(
key:
key
);
final
Widget
wijet
;
@override
State
<
ContactUs1
>
createState
()
=>
_ContactUsState
();
...
...
lib/screen/contact_us/contact_us2.dart
View file @
c7419aa8
...
...
@@ -18,6 +18,9 @@ class ContactUs2 extends StatelessWidget {
final
emailController
=
TextEditingController
();
final
messageController
=
TextEditingController
();
String
pattern
=
r'(\+62|62|0)(\d{2,3})?\)?[ .-]?\d{2,4}[ .-]?\d{2,4}[ .-]?\d{2,4}'
;
@override
Widget
build
(
BuildContext
context
)
{
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
...
...
@@ -186,6 +189,8 @@ class ContactUs2 extends StatelessWidget {
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter your phone number'
;
}
else
if
(!
RegExp
(
pattern
).
hasMatch
(
value
))
{
return
'Start with 628 or 08'
;
}
return
null
;
},
...
...
lib/screen/footer.dart
View file @
c7419aa8
...
...
@@ -87,78 +87,21 @@ class Footer extends StatelessWidget {
),
),
const
Spacer
(
flex:
1
,
flex:
2
,
),
Container
(
width:
screenSize
.
width
*
0.1
4
,
width:
screenSize
.
width
*
0.1
6
,
height:
screenSize
.
height
*
0.03
,
//color: Colors.blue,
child:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSosmedDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceEvenly
,
children:
[
IconButton
(
onPressed:
()
{
ln
=
pgm
[
'linkedin'
];
launch
(
ln
);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
linkedinIn
,
size:
25
,
),
iconSize:
25
,
color:
Colors
.
black
),
IconButton
(
onPressed:
()
{
tw
=
pgm
[
'twitter'
];
launch
(
tw
);
//_launchTwitter();
},
icon:
const
Icon
(
FontAwesomeIcons
.
twitter
,
size:
25
,
),
iconSize:
25
,
color:
Colors
.
black
,
),
IconButton
(
onPressed:
()
{
ig
=
pgm
[
'instagram'
];
launch
(
ig
);
// _launchInstagram();
},
icon:
const
Icon
(
FontAwesomeIcons
.
instagram
,
size:
25
,
),
iconSize:
25
,
color:
Colors
.
black
),
IconButton
(
onPressed:
()
{
yt
=
pgm
[
'youtube'
];
launch
(
yt
);
// _launchYoutube();
},
icon:
const
Icon
(
FontAwesomeIcons
.
youtube
,
size:
25
,
),
iconSize:
25
,
color:
Colors
.
black
)
],
);
},
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceEvenly
,
children:
const
[
ApiLinkedin
(),
ApiTwitter
(),
ApiInstagram
(),
ApiYoutube
(),
],
),
),
const
Spacer
(
flex:
8
,
...
...
@@ -301,12 +244,13 @@ class Footer extends StatelessWidget {
child:
ListTile
(
leading:
const
Icon
(
Icons
.
location_on
,
size:
25
,
size:
28
,
color:
Colors
.
black
,
),
title:
Container
(
padding:
const
EdgeInsets
.
only
(
left:
14
),
padding:
const
EdgeInsets
.
only
(
left:
25
),
width:
screenSize
.
width
*
0.25
,
height:
screenSize
.
height
*
0.
3
,
height:
screenSize
.
height
*
0.
8
,
child:
Text
(
'PT. Tiga Daya Digital Indonesia
\n
The East '
'Tower 19th Floor
\n
Jl. Dr. Ide Anak Agung '
...
...
@@ -366,6 +310,153 @@ class itemBawah extends StatelessWidget {
}
}
class
ApiLinkedin
extends
StatefulWidget
{
const
ApiLinkedin
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiLinkedin
>
createState
()
=>
_ApiLinkedinState
();
}
class
_ApiLinkedinState
extends
State
<
ApiLinkedin
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getLnDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'linkedin'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
linkedinIn
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiTwitter
extends
StatefulWidget
{
const
ApiTwitter
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiTwitter
>
createState
()
=>
_ApiTwitterState
();
}
class
_ApiTwitterState
extends
State
<
ApiTwitter
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getTwDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'twitter'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
twitter
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiInstagram
extends
StatefulWidget
{
const
ApiInstagram
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiInstagram
>
createState
()
=>
_ApiInstagramState
();
}
class
_ApiInstagramState
extends
State
<
ApiInstagram
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getIgDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'instagram'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
instagram
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiYoutube
extends
StatefulWidget
{
const
ApiYoutube
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiYoutube
>
createState
()
=>
_ApiYoutubeState
();
}
class
_ApiYoutubeState
extends
State
<
ApiYoutube
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getYtDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'youtube'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
youtube
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
});
}
}
class
TelphoneApi
extends
StatefulWidget
{
const
TelphoneApi
({
Key
?
key
})
:
super
(
key:
key
);
...
...
@@ -388,7 +479,7 @@ class _TelphoneApiState extends State<TelphoneApi> {
return
const
CircularProgressIndicator
();
}
return
Container
(
width:
screenSize
.
width
*
0.
19
,
width:
screenSize
.
width
*
0.
20
,
child:
ListTile
(
leading:
const
Icon
(
Icons
.
phone
,
...
...
lib/screen/home/home1.dart
View file @
c7419aa8
...
...
@@ -6,7 +6,8 @@ import 'package:medapp_eksad/widget/button_color.dart';
import
'package:show_up_animation/show_up_animation.dart'
;
class
Home1
extends
StatelessWidget
{
const
Home1
({
Key
?
key
})
:
super
(
key:
key
);
Home1
({
Key
?
key
,
required
this
.
wijet
})
:
super
(
key:
key
);
final
Widget
wijet
;
@override
Widget
build
(
BuildContext
context
)
{
...
...
lib/screen/solution.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/appbar/appbar_home.dart'
;
import
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
import
'package:medapp_eksad/screen/footer.dart'
;
...
...
@@ -8,6 +10,7 @@ import 'package:medapp_eksad/screen/solution/our_solution3.dart';
import
'package:medapp_eksad/screen_small/small_footer.dart'
;
import
'package:medapp_eksad/screen_small/small_solution/small_solution1.dart'
;
import
'package:medapp_eksad/screen_small/small_solution/small_solution2.dart'
;
import
'package:medapp_eksad/widget/Scroll_top.dart'
;
import
'package:medapp_eksad/widget/componen.dart'
;
import
'package:medapp_eksad/widget/drawer.dart'
;
import
'package:medapp_eksad/widget/responsive.dart'
;
...
...
@@ -39,7 +42,7 @@ class _SolutionsState extends State<Solutions> {
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'MeddApp Solutions'
,
context
);
//
setPageTitle('MeddApp Solutions', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
key:
_scaffoldKey
,
...
...
@@ -50,22 +53,55 @@ class _SolutionsState extends State<Solutions> {
Colors
.
blue
,
Colors
.
black
,
Colors
.
black
),
drawer:
const
DrawerMedApp
(),
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
ListView
(
children:
const
[
SmallOurSolution
(),
SmallOurSolution2
(),
FooterSmall
(),
?
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
SmallOurSolution
(
wijet:
Button_scroll
()),
SmallOurSolution2
(),
FooterSmall
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
)
:
ListView
(
controller:
controller2
,
:
Stack
(
children:
[
OurSolution
(
button:
ButtonSolution
(
context
),
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
controller:
controller2
,
children:
[
OurSolution
(
wijet:
Button_scroll
(),
button:
ButtonSolution
(
context
),
),
OurSolution2
(),
ContactUs2
(),
Footer
(),
],
),
);
},
),
OurSolution2
(),
ContactUs2
(),
Footer
(),
ScrollUpButton
(
controller2
),
],
),
);
...
...
@@ -95,6 +131,37 @@ class _SolutionsState extends State<Solutions> {
);
}
ElevatedButton
Button_scroll
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
3780
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
17
,
letterSpacing:
2
,
fontWeight:
FontWeight
.
w500
),
),
);
}
ElevatedButton
Button_scroll_small
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
5410
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
fixedSize:
const
Size
(
50
,
20
)),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
letterSpacing:
1.5
,
fontWeight:
FontWeight
.
w500
),
),
);
}
AppBar
AppBarKecil
()
{
return
AppBar
(
leading:
IconButton
(
...
...
lib/screen/solution/our_solution.dart
View file @
c7419aa8
...
...
@@ -2,11 +2,14 @@ import 'package:flutter/material.dart';
import
'package:google_fonts/google_fonts.dart'
;
import
'package:show_up_animation/show_up_animation.dart'
;
class
OurSolution
extends
StatelessWidget
{
const
OurSolution
({
Key
?
key
,
required
this
.
button
})
:
super
(
key:
key
);
OurSolution
({
Key
?
key
,
required
this
.
button
,
required
this
.
wijet
,
})
:
super
(
key:
key
);
final
Widget
button
;
final
Widget
wijet
;
@override
Widget
build
(
BuildContext
context
)
{
...
...
lib/screen_small/small_contact/small_contact_us1.dart
View file @
c7419aa8
...
...
@@ -3,7 +3,8 @@ import 'package:google_fonts/google_fonts.dart';
class
ContactUs1_small
extends
StatefulWidget
{
const
ContactUs1_small
({
Key
?
key
})
:
super
(
key:
key
);
ContactUs1_small
({
Key
?
key
,
required
this
.
wijet
})
:
super
(
key:
key
);
final
Widget
wijet
;
@override
State
<
ContactUs1_small
>
createState
()
=>
_ContactUsState
();
...
...
lib/screen_small/small_footer.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:font_awesome_flutter/font_awesome_flutter.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/api/sosmed_api.dart'
;
import
'package:url_launcher/url_launcher.dart'
;
class
FooterSmall
extends
StatelessWidget
{
...
...
@@ -36,10 +38,22 @@ class FooterSmall extends StatelessWidget {
width:
screenSize
.
width
*
0.4
,
height:
screenSize
.
height
*
0.08
,
decoration:
const
BoxDecoration
(
//color: Colors.lightBlueAccent,
//color: Colors.lightBlueAccent,
image:
DecorationImage
(
image:
AssetImage
(
'assets/logo/medapp-logo.png'
),
image:
AssetImage
(
'assets/logo/medapp-logo.png'
),
fit:
BoxFit
.
fill
)),
),
SizedBox
(
height:
7
,
),
Container
(
width:
screenSize
.
width
*
0.4
,
height:
screenSize
.
height
*
0.10
,
decoration:
const
BoxDecoration
(
//color: Colors.lightBlueAccent,
image:
DecorationImage
(
image:
AssetImage
(
'assets/logo/logo-eksad.png'
),
fit:
BoxFit
.
fill
)),
),
const
Spacer
(),
...
...
@@ -65,55 +79,16 @@ class FooterSmall extends StatelessWidget {
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.03
,
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
//color: Colors.blue,
child:
Row
(
mainAxisAlignment:
MainAxisAlignment
.
spaceEvenly
,
children:
[
IconButton
(
onPressed:
()
{
launch
(
'https://www.linkedin.com/company/pt-tiga-daya-digital-indonesia-triputra-group-eksad-technology'
);
},
icon:
const
Icon
(
FontAwesomeIcons
.
linkedinIn
,
size:
30
,
),
iconSize:
20
,
),
IconButton
(
onPressed:
()
{
launch
(
'https://twitter.com/eksadtechnology/'
);
},
icon:
const
Icon
(
FontAwesomeIcons
.
twitter
,
size:
30
,
),
iconSize:
20
,
),
IconButton
(
onPressed:
()
{
launch
(
'https://www.instagram.com/eksad_technology/'
);
},
icon:
const
Icon
(
FontAwesomeIcons
.
instagram
,
size:
30
,
),
iconSize:
20
,
),
IconButton
(
onPressed:
()
{
launch
(
'https://www.youtube.com/channel/UCiZgIbpWgrAMrHW-TaS9EPw'
);
},
icon:
const
Icon
(
FontAwesomeIcons
.
youtube
,
size:
30
,
),
iconSize:
20
,
)
ApiLinkedin
(),
ApiTwitter
(),
ApiInstagram
(),
ApiYoutube
(),
],
),
),
...
...
@@ -163,16 +138,16 @@ class FooterSmall extends StatelessWidget {
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.06
,
child:
const
itemBawah_small
(
item:
'S
ervice
'
,
routeName:
'/s
ervice
'
,
item:
'S
olutions
'
,
routeName:
'/s
olutions
'
,
),
),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.06
,
child:
const
itemBawah_small
(
item:
'C
areer
'
,
routeName:
'/c
areer
'
,
item:
'C
ontact Us
'
,
routeName:
'/c
ontact
'
,
),
),
Spacer
()
...
...
@@ -180,7 +155,7 @@ class FooterSmall extends StatelessWidget {
)),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.
3
5
,
height:
screenSize
.
height
*
0.
2
5
,
child:
Column
(
crossAxisAlignment:
CrossAxisAlignment
.
start
,
mainAxisAlignment:
MainAxisAlignment
.
spaceEvenly
,
...
...
@@ -198,37 +173,12 @@ class FooterSmall extends StatelessWidget {
),
),
),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.06
,
child:
const
itemBawah_small
(
item:
'Retained Search'
,
routeName:
'/service'
,
),
),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.06
,
child:
const
itemBawah_small
(
item:
'Dedicated Services'
,
routeName:
'/service'
,
),
),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.06
,
child:
const
itemBawah_small
(
item:
'Contract Services'
,
routeName:
'/service'
,
),
),
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.0
6
,
child:
const
itemBawah_small
(
item:
'
Recruitment
'
,
routeName:
'/s
ervice
'
,
height:
screenSize
.
height
*
0.0
4
,
child:
itemBawah_small
(
item:
'
Catalog
'
,
routeName:
'/s
olutions
'
,
),
),
],
...
...
@@ -256,56 +206,11 @@ class FooterSmall extends StatelessWidget {
),
Column
(
children:
[
TelphoneApi
(),
EmailAPI
(),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
width:
screenSize
.
width
,
child:
ListTile
(
minLeadingWidth:
2
,
leading:
const
Icon
(
Icons
.
phone
,
size:
19
,
color:
Colors
.
black
,
),
title:
TextButton
(
onPressed:
()
{
launch
(
'tel:02157958040'
);
},
child:
Text
(
'(021) 5795 - 8040'
,
style:
GoogleFonts
.
poppins
(
fontSize:
14
,
color:
Colors
.
black87
,
),
)),
),
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
width:
screenSize
.
width
,
child:
ListTile
(
minLeadingWidth:
2
,
leading:
const
Icon
(
Icons
.
mail
,
size:
19
,
color:
Colors
.
black
,
),
title:
TextButton
(
onPressed:
()
{
launch
(
'mailto:Info@eksad.com?subject=Info MCS'
);
},
child:
Text
(
'info@eksad.com'
,
style:
GoogleFonts
.
poppins
(
fontSize:
14
,
color:
Colors
.
black87
,
letterSpacing:
1.1
),
),
),
),
),
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
width:
screenSize
.
width
,
child:
ListTile
(
minLeadingWidth:
2
,
...
...
@@ -319,23 +224,19 @@ class FooterSmall extends StatelessWidget {
width:
screenSize
.
width
*
0.48
,
child:
Text
(
'PT. Tiga Daya Digital Indonesia
\n
The East '
'Tower 19th Floor
\n
Jl. Dr. Ide Anak Agung '
'
\n
Gde Agung Blok E3.2 '
'
\n
Mega Kuningan,
\n
Jakarta Selatan 12950'
,
'Tower 19th Floor
\n
Jl. Dr. Ide Anak Agung '
'
\n
Gde Agung Blok E3.2 '
'
\n
Mega Kuningan,
\n
Jakarta Selatan 12950'
,
style:
GoogleFonts
.
poppins
(
fontSize:
13
,
height:
1.45
,
letterSpacing:
1.1
),
textAlign:
TextAlign
.
left
,
letterSpacing:
1.1
),
textAlign:
TextAlign
.
center
,
),
)),
),
],
),
],
)),
),
...
...
@@ -350,11 +251,11 @@ class FooterSmall extends StatelessWidget {
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.12
,
child:
const
Center
(
child:
Text
(
'PT. Tiga Daya Digital Indonesia © 2018,
\n
All Rights Reserved.'
,
style:
TextStyle
(
letterSpacing:
1.3
,
height:
1.4
,
fontSize:
13
),
textAlign:
TextAlign
.
center
,
),
child:
Text
(
'PT. Tiga Daya Digital Indonesia © 2018,
\n
All Rights Reserved.'
,
style:
TextStyle
(
letterSpacing:
1.3
,
height:
1.4
,
fontSize:
13
),
textAlign:
TextAlign
.
center
,
),
),
)
],
...
...
@@ -380,8 +281,252 @@ class itemBawah_small extends StatelessWidget {
color:
const
Color
(
0xff1e5ea8
),
//decoration: TextDecoration.underline,
fontSize:
17
,
letterSpacing:
1.2
),
letterSpacing:
1.2
),
));
}
}
class
ApiLinkedin
extends
StatefulWidget
{
const
ApiLinkedin
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiLinkedin
>
createState
()
=>
_ApiLinkedinState
();
}
class
_ApiLinkedinState
extends
State
<
ApiLinkedin
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getLnDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'linkedin'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
linkedinIn
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiTwitter
extends
StatefulWidget
{
const
ApiTwitter
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiTwitter
>
createState
()
=>
_ApiTwitterState
();
}
class
_ApiTwitterState
extends
State
<
ApiTwitter
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getTwDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'twitter'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
twitter
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiInstagram
extends
StatefulWidget
{
const
ApiInstagram
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiInstagram
>
createState
()
=>
_ApiInstagramState
();
}
class
_ApiInstagramState
extends
State
<
ApiInstagram
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getIgDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'instagram'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
instagram
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
},
);
}
}
class
ApiYoutube
extends
StatefulWidget
{
const
ApiYoutube
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
ApiYoutube
>
createState
()
=>
_ApiYoutubeState
();
}
class
_ApiYoutubeState
extends
State
<
ApiYoutube
>
{
@override
Widget
build
(
BuildContext
context
)
{
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getYtDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
IconButton
(
onPressed:
()
{
// ln = ;
launch
(
pgm
[
'youtube'
]);
// _launchLinkedIn();
},
icon:
const
Icon
(
FontAwesomeIcons
.
youtube
,
size:
25
,
),
iconSize:
35
,
color:
Colors
.
black
);
});
}
}
class
TelphoneApi
extends
StatefulWidget
{
const
TelphoneApi
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
TelphoneApi
>
createState
()
=>
_TelphoneApiState
();
}
class
_TelphoneApiState
extends
State
<
TelphoneApi
>
{
String
no
=
''
;
@override
Widget
build
(
BuildContext
context
)
{
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getSettingDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
width:
screenSize
.
width
,
child:
ListTile
(
minLeadingWidth:
2
,
leading:
const
Icon
(
Icons
.
phone
,
size:
19
,
color:
Colors
.
black
,
),
title:
TextButton
(
onPressed:
()
{
no
=
pgm
[
'no'
];
//02157958040
launch
(
'tel:
$no
'
);
},
child:
Text
(
pgm
[
'no'
],
style:
GoogleFonts
.
poppins
(
fontSize:
14
,
color:
Colors
.
black87
,
letterSpacing:
1.5
),
)),
),
);
},
);
}
}
class
EmailAPI
extends
StatefulWidget
{
const
EmailAPI
({
Key
?
key
})
:
super
(
key:
key
);
@override
State
<
EmailAPI
>
createState
()
=>
_EmailAPIState
();
}
class
_EmailAPIState
extends
State
<
EmailAPI
>
{
String
email
=
''
;
@override
Widget
build
(
BuildContext
context
)
{
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
FutureBuilder
<
List
<
dynamic
>>(
future:
getSettingDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
Container
(
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.15
),
width:
screenSize
.
width
,
child:
ListTile
(
minLeadingWidth:
2
,
leading:
const
Icon
(
Icons
.
mail
,
size:
19
,
color:
Colors
.
black
,
),
title:
TextButton
(
onPressed:
()
{
email
=
pgm
[
'email'
];
launch
(
'mailto:
$email
?subject=Info Medapp'
);
},
// child: SettingAPI(),
child:
Text
(
pgm
[
'email'
],
style:
GoogleFonts
.
poppins
(
fontSize:
14
,
color:
Colors
.
black87
,
letterSpacing:
1.1
),
)),
),
);
},
);
}
}
lib/screen_small/small_home/small_home1.dart
View file @
c7419aa8
...
...
@@ -3,9 +3,9 @@ import 'package:google_fonts/google_fonts.dart';
import
'package:medapp_eksad/widget/button_color.dart'
;
import
'package:show_up_animation/show_up_animation.dart'
;
class
SmallHome1
extends
StatelessWidget
{
const
SmallHome1
({
Key
?
key
})
:
super
(
key:
key
);
SmallHome1
({
Key
?
key
,
required
this
.
wijet
})
:
super
(
key:
key
);
final
Widget
wijet
;
@override
Widget
build
(
BuildContext
context
)
{
...
...
@@ -75,8 +75,8 @@ class SmallHome1 extends StatelessWidget {
// offset: -0.2,
child:
Text
(
'Welcome to healthcare’s most powerful collaboration suite. '
'Enhance clinical workflows, speed decisions, and improve'
' patient outcomes, safely and securely.'
,
'Enhance clinical workflows, speed decisions, and improve'
' patient outcomes, safely and securely.'
,
textAlign:
TextAlign
.
center
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
...
...
lib/screen_small/small_solution/small_solution1.dart
View file @
c7419aa8
...
...
@@ -3,7 +3,8 @@ import 'package:google_fonts/google_fonts.dart';
import
'package:show_up_animation/show_up_animation.dart'
;
class
SmallOurSolution
extends
StatefulWidget
{
const
SmallOurSolution
({
Key
?
key
})
:
super
(
key:
key
);
SmallOurSolution
({
Key
?
key
,
required
this
.
wijet
})
:
super
(
key:
key
);
final
Widget
wijet
;
@override
State
<
SmallOurSolution
>
createState
()
=>
_SmallOurSolutionState
();
...
...
@@ -56,7 +57,7 @@ class _SmallOurSolutionState extends State<SmallOurSolution> {
style:
GoogleFonts
.
poppins
(
fontSize:
34
,
fontWeight:
FontWeight
.
bold
,
color:
Colors
.
black87
),
color:
Colors
.
white
),
textAlign:
TextAlign
.
center
,
),
),
...
...
@@ -76,7 +77,7 @@ class _SmallOurSolutionState extends State<SmallOurSolution> {
letterSpacing:
1.8
,
height:
1.4
,
fontWeight:
FontWeight
.
bold
,
color:
Colors
.
black87
),
color:
Colors
.
white
),
textAlign:
TextAlign
.
center
,
),
),
...
...
lib/screen_user/demo_user.dart
View file @
c7419aa8
...
...
@@ -30,7 +30,7 @@ class _DemoUserState extends State<DemoUser> {
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'Free Demo Medapp'
,
context
);
//
setPageTitle('Free Demo Medapp', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
final
user
=
context
.
read
<
FirebaseAuthMethods
>().
user
;
final
String
mail
=
user
.
email
!;
...
...
lib/screen_user/home_user.dart
View file @
c7419aa8
import
'package:flutter/material.dart'
;
import
'package:google_fonts/google_fonts.dart'
;
import
'package:medapp_eksad/api/setting_api.dart'
;
import
'package:medapp_eksad/appbar/appbar_home.dart'
;
import
'package:medapp_eksad/screen_small/small_contact/small_contact_us2.dart'
;
import
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
...
...
@@ -12,6 +14,7 @@ import 'package:medapp_eksad/screen_small/small_home/small_home1.dart';
import
'package:medapp_eksad/screen_small/small_home/small_home2.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home3.dart'
;
import
'package:medapp_eksad/screen_small/small_home/small_home4.dart'
;
import
'package:medapp_eksad/widget/Scroll_top.dart'
;
import
'package:medapp_eksad/widget/drawer.dart'
;
import
'package:medapp_eksad/widget/responsive.dart'
;
import
'package:medapp_eksad/widget/whatsapp.dart'
;
...
...
@@ -32,10 +35,26 @@ class HomePageUser extends StatefulWidget {
}
class
_HomePageUserState
extends
State
<
HomePageUser
>
{
// Untuk pake PAGE per index
PageController
controller
=
PageController
();
void
_scrollToIndex2
(
int
index
)
{
controller
.
animateToPage
(
index
,
duration:
const
Duration
(
seconds:
2
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
// Untuk pake LIST per height container
ScrollController
controller2
=
ScrollController
();
void
_scrollToIndex
(
double
index
)
{
controller2
.
animateTo
(
index
,
duration:
const
Duration
(
seconds:
1
),
curve:
Curves
.
fastLinearToSlowEaseIn
);
}
final
GlobalKey
<
ScaffoldState
>
_scaffoldKey
=
new
GlobalKey
<
ScaffoldState
>();
@override
Widget
build
(
BuildContext
context
)
{
setPageTitle
(
'MedApp by Eksad'
,
context
);
//
setPageTitle('MedApp by Eksad', context);
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
return
Scaffold
(
key:
_scaffoldKey
,
...
...
@@ -43,28 +62,87 @@ class _HomePageUserState extends State<HomePageUser> {
appBar:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
AppBarKecil
()
:
AppbarHomeLarge
(
screenSize
,
context
,
Colors
.
blue
,
Colors
.
black
,
Colors
.
black
,
Colors
.
black
,
Colors
.
black
),
Colors
.
black
,
Colors
.
black
,
Colors
.
black
),
drawer:
const
DrawerMedApp
(),
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
ListView
(
children:
const
[
SmallHome1
(),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
],
)
:
ListView
(
children:
[
const
Home1
(),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
],
body:
ResponsiveWidget
.
isSmallScreen
(
context
)
?
Stack
(
children:
[
Title
(
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
SmallHome1
(
wijet:
Button_scroll_small
()),
SmallHome2
(),
SmallHome3
(),
SmallHome4
(),
ContactUs2_small
(),
FooterSmall
(),
],
),
),
ScrollUpButton
(
controller2
),
],
)
:
Stack
(
children:
[
FutureBuilder
<
dynamic
>(
future:
getSettingDesc2
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
return
Title
(
title:
pgm
[
'title'
],
color:
Colors
.
white
,
child:
ListView
(
scrollDirection:
Axis
.
vertical
,
controller:
controller2
,
children:
[
Home1
(
wijet:
Button_scroll
()),
const
Home2
(),
const
Home3
(),
const
Home4
(),
ContactUs2
(),
Footer
(),
],
),
);
},
),
ScrollUpButton
(
controller2
),
],
),
);
}
ElevatedButton
Button_scroll
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
3780
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
17
,
letterSpacing:
2
,
fontWeight:
FontWeight
.
w500
),
),
);
}
ElevatedButton
Button_scroll_small
()
{
return
ElevatedButton
(
onPressed:
()
{
_scrollToIndex
(
5410
);
},
style:
ElevatedButton
.
styleFrom
(
primary:
const
Color
(
0xff1e5ea8
),
fixedSize:
const
Size
(
50
,
20
)),
child:
Text
(
'CONTACT US'
,
style:
GoogleFonts
.
poppins
(
fontSize:
15
,
letterSpacing:
1.5
,
fontWeight:
FontWeight
.
w500
),
),
);
}
...
...
lib/widget/Scroll_top.dart
0 → 100644
View file @
c7419aa8
import
'package:flutter/material.dart'
;
class
ScrollUpButton
extends
StatefulWidget
{
const
ScrollUpButton
(
this
.
controller
);
final
ScrollController
controller
;
@override
_ScrollUpButtonState
createState
()
=>
_ScrollUpButtonState
();
}
class
_ScrollUpButtonState
extends
State
<
ScrollUpButton
>
{
bool
_showScrollUp
=
false
;
@override
void
initState
()
{
super
.
initState
();
widget
.
controller
.
addListener
(()
{
if
(
widget
.
controller
.
position
.
pixels
>
150
&&
!
_showScrollUp
)
{
setState
(()
{
_showScrollUp
=
true
;
});
}
else
if
(
widget
.
controller
.
position
.
pixels
<
150
&&
_showScrollUp
)
{
setState
(()
{
_showScrollUp
=
false
;
});
}
// On GitHub there was a question on how to determine the event
// of widget being scrolled to the bottom. Here's the sample
// if (widget.controller.position.hasViewportDimension &&
// widget.controller.position.pixels >=
// widget.controller.position.maxScrollExtent - 0.01) {
// print('Scrolled to bottom');
//}
});
}
@override
Widget
build
(
BuildContext
context
)
{
return
_showScrollUp
?
Positioned
(
right:
20
,
bottom:
170
,
child:
OutlinedButton
(
onPressed:
()
=>
widget
.
controller
.
animateTo
(
0
,
duration:
const
Duration
(
milliseconds:
300
),
curve:
Curves
.
easeIn
),
style:
ButtonStyle
(
fixedSize:
MaterialStateProperty
.
all
(
Size
(
30
,
30
)),
backgroundColor:
MaterialStateProperty
.
all
(
Colors
.
grey
[
50
]),
foregroundColor:
MaterialStateProperty
.
all
(
Colors
.
black
)),
child:
Icon
(
Icons
.
arrow_circle_up
,
color:
Colors
.
grey
,)
//child: const Text('Go\nTop',textAlign: TextAlign.center,),
))
:
const
SizedBox
();
}
}
\ No newline at end of file
lib/widget/componen.dart
View file @
c7419aa8
...
...
@@ -11,7 +11,6 @@ export 'package:medapp_eksad/screen/solution/our_solution.dart';
export
'package:medapp_eksad/screen/solution/our_solution2.dart'
;
export
'package:medapp_eksad/screen/contact_us/contact_us1.dart'
;
export
'package:medapp_eksad/screen/contact_us/contact_us2.dart'
;
export
'package:medapp_eksad/screen_small/small_footer.dart'
;
export
'package:medapp_eksad/screen_small/small_contact/small_contact_us1.dart'
;
export
'package:medapp_eksad/screen_small/small_contact/small_contact_us2.dart'
;
export
'package:medapp_eksad/screen_small/small_home/small_home1.dart'
;
...
...
lib/widget/whatsapp.dart
View file @
c7419aa8
...
...
@@ -30,15 +30,10 @@ class WAChat extends StatelessWidget {
return
FloatingActionButton
(
onPressed:
()
{},
backgroundColor:
Colors
.
green
,
child:
FutureBuilder
<
List
<
dynamic
>>(
future:
get
Sosmed
Desc
(),
child:
FutureBuilder
<
List
<
dynamic
>>(
future:
get
Wa
Desc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
GestureDetector
(
onTap:
()
{
wa
=
pgm
[
'whatsapp'
];
...
...
@@ -50,7 +45,7 @@ class WAChat extends StatelessWidget {
launchWhatsApp
(
phone:
wa
,
message:
'Hallo, saya tertarik dan saya ingin tahu lebih lanjut tentang program Medapp dari EKSAD'
);
'Hallo, saya tertarik dan saya ingin tahu lebih lanjut tentang program Medapp dari EKSAD'
);
},
child:
Spring
.
rotate
(
endAngle:
360
*
10
,
...
...
pubspec.yaml
View file @
c7419aa8
...
...
@@ -81,6 +81,7 @@ flutter:
uses-material-design
:
true
assets
:
-
assets/file/
-
assets/icons/
-
assets/logo/
-
assets/images/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment