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
38baf053
Commit
38baf053
authored
Sep 28, 2022
by
Ade Fikriatul Ilmi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
menambahkan get and put per column
parent
e430a69a
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
459 additions
and
202 deletions
+459
-202
sosmed_api.dart
lib/api/sosmed_api.dart
+140
-3
user_api.dart
lib/api/user_api.dart
+1
-0
admin_sosmed.dart
lib/dashboard/admin/admin_sosmed.dart
+318
-199
No files found.
lib/api/sosmed_api.dart
View file @
38baf053
...
...
@@ -26,11 +26,11 @@ Future<bool> createSosmed (wa, ln, tw, ig, yt) async{
}
}
Future
<
bool
>
updateSosmed
(
wa
,
ln
,
tw
,
ig
,
yt
)
async
{
Future
<
bool
>
updateSosmed
(
id
,
wa
,
ln
,
tw
,
ig
,
yt
)
async
{
final
response
=
await
http
.
p
u
t
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveSettingSosmed'
),
.
p
os
t
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveSettingSosmed'
),
body:
jsonEncode
({
//
'idSettingSosmed': id,
'idSettingSosmed'
:
id
,
'whatsapp'
:
wa
,
'linkedin'
:
ln
,
'twitter'
:
tw
,
...
...
@@ -54,3 +54,140 @@ Future<List<dynamic>> getSosmedDesc() async {
Uri
.
parse
(
'
$qry
/settingsosmed/getSettingSosmedByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
bool
>
createWA
(
wa
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveWhatsapp'
),
body:
jsonEncode
(
{
"whatsapp"
:
wa
,
// "linkedin": ln,
// "twitter": tw,
// "instagram": ig,
// "youtube": yt,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
});
if
(
response
.
statusCode
==
200
)
{
return
true
;
}
else
{
return
false
;
}
}
Future
<
bool
>
createLN
(
ln
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveLinkedin'
),
body:
jsonEncode
(
{
// "whatsapp": wa,
"linkedin"
:
ln
,
// "twitter": tw,
// "instagram": ig,
// "youtube": yt,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
});
if
(
response
.
statusCode
==
200
)
{
return
true
;
}
else
{
return
false
;
}
}
Future
<
bool
>
createTW
(
tw
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveTwitter'
),
body:
jsonEncode
(
{
// "whatsapp": wa,
// "linkedin": ln,
"twitter"
:
tw
,
// "instagram": ig,
// "youtube": yt,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
});
if
(
response
.
statusCode
==
200
)
{
return
true
;
}
else
{
return
false
;
}
}
Future
<
bool
>
createIG
(
ig
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveInstagram'
),
body:
jsonEncode
(
{
// "whatsapp": wa,
// "linkedin": ln,
// "twitter": tw,
"instagram"
:
ig
,
// "youtube": yt,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
});
if
(
response
.
statusCode
==
200
)
{
return
true
;
}
else
{
return
false
;
}
}
Future
<
bool
>
createYT
(
yt
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/settingsosmed/saveYoutube'
),
body:
jsonEncode
(
{
// "whatsapp": wa,
// "linkedin": ln,
// "twitter": tw,
// "instagram": ig,
"youtube"
:
yt
,
}),
headers:
{
'Content-type'
:
'application/json; charset=UTF-8'
,
});
if
(
response
.
statusCode
==
200
)
{
return
true
;
}
else
{
return
false
;
}
}
Future
<
List
<
dynamic
>>
getWaDesc
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/settingsosmed/getWhatsappByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
List
<
dynamic
>>
getLnDesc
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/settingsosmed/getLinkedinByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
List
<
dynamic
>>
getTwDesc
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/settingsosmed/getTwitterByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
List
<
dynamic
>>
getIgDesc
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/settingsosmed/getInstagramByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
Future
<
List
<
dynamic
>>
getYtDesc
()
async
{
var
response
=
await
http
.
get
(
Uri
.
parse
(
'
$qry
/settingsosmed/getYoutubeByIdDesc'
));
return
jsonDecode
(
response
.
body
)[
'data'
];
}
\ No newline at end of file
lib/api/user_api.dart
View file @
38baf053
...
...
@@ -29,6 +29,7 @@ Future<bool> signUp(namars,nors,alamatrs,namapic,nopic,email, password)async{
}
// return response.statusCode;
}
Future
<
bool
>
signIn
(
username
,
password
)
async
{
final
response
=
await
http
.
post
(
Uri
.
parse
(
'
$cmd
/user/signin'
),
...
...
lib/dashboard/admin/admin_sosmed.dart
View file @
38baf053
...
...
@@ -15,19 +15,22 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
var
enb
=
true
;
final
formKey
=
GlobalKey
<
FormState
>();
TextEditingController
waController
=
new
TextEditingController
();
//
final waController = TextEditingController();
//
TextEditingController waController = new TextEditingController();
final
waController
=
TextEditingController
();
final
linkedController
=
TextEditingController
();
final
twitterController
=
TextEditingController
();
final
igController
=
TextEditingController
();
final
youtubeController
=
TextEditingController
();
String
wa
=
''
;
String
ln
=
''
;
String
tw
=
''
;
String
ig
=
''
;
String
yt
=
''
;
String
pattern
=
r'(\62)(\d{2,3})?\)?[ .-]?\d{2,4}[ .-]?\d{2,4}[ .-]?\d{2,4}'
;
@override
Widget
build
(
BuildContext
context
)
{
var
screenSize
=
MediaQuery
.
of
(
context
).
size
;
...
...
@@ -35,7 +38,7 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
color:
const
Color
.
fromRGBO
(
238
,
224
,
224
,
1
),
padding:
EdgeInsets
.
symmetric
(
horizontal:
screenSize
.
width
*
0.05
,
vertical:
screenSize
.
height
*
0.0
5
),
vertical:
screenSize
.
height
*
0.0
4
),
child:
Container
(
width:
screenSize
.
width
,
height:
screenSize
.
height
*
0.8
,
...
...
@@ -62,14 +65,37 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
),
primary:
const
Color
.
fromARGB
(
255
,
0
,
67
,
192
),
),
onPressed:
()
{
onPressed:
()
async
{
switch
(
btnText
)
{
case
'Save Setting'
:
createSosmed
(
wa
,
ln
,
tw
,
ig
,
yt
);
{
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Data Success'
),));
if
(
formKey
.
currentState
!.
validate
())
{
// await updateSosmed(wa, ln, tw, ig, yt);
// await createSosmed(wa, ln, tw, ig, yt);
await
createWA
(
wa
);
await
createLN
(
ln
);
await
createTW
(
tw
);
await
createIG
(
ig
);
await
createYT
(
yt
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
const
SnackBar
(
content:
Text
(
'Data Saved'
),
backgroundColor:
Colors
.
green
)
);
}
else
if
(
formKey
.
currentState
!.
validate
()){}
else
{
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
const
SnackBar
(
content:
Text
(
'Failed to save data, please edit all field'
),
backgroundColor:
Colors
.
red
)
);
}
// waController.clear();
// linkedController.clear();
// twitterController.clear();
...
...
@@ -96,16 +122,35 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
});
break
;
case
'Save Update'
:
createSosmed
(
wa
,
ln
,
tw
,
ig
,
yt
);
{
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Data Success'
),));
if
(
formKey
.
currentState
!.
validate
())
{
// await updateSosmed(wa, ln, tw, ig, yt);
// await createSosmed(wa, ln, tw, ig, yt);
await
createWA
(
wa
);
await
createLN
(
ln
);
await
createTW
(
tw
);
await
createIG
(
ig
);
await
createYT
(
yt
);
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
const
SnackBar
(
content:
Text
(
'Data Saved'
),
backgroundColor:
Colors
.
green
)
);
}
else
if
(
formKey
.
currentState
!.
validate
()){}
else
{
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
const
SnackBar
(
content:
Text
(
'Failed to save data, please edit all field'
),
backgroundColor:
Colors
.
red
)
);
}
break
;
default
:
createSosmed
(
wa
,
ln
,
tw
,
ig
,
yt
);
{
ScaffoldMessenger
.
of
(
context
).
showSnackBar
(
SnackBar
(
content:
Text
(
'Save Data Success'
),));
}
}
},
child:
Text
(
...
...
@@ -123,24 +168,66 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
// 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'),
const
SizedBox
(
height:
10
,
),
// 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
// },
// ),
Column
(
mainAxisAlignment:
MainAxisAlignment
.
spaceBetween
,
children:
[
listsosmed
(
Icon
(
FutureBuilder
<
List
<
dynamic
>>(
future:
getWaDesc
(),
builder:
(
BuildContext
context
,
AsyncSnapshot
snapshot
)
{
var
pgm
=
snapshot
.
data
[
0
];
if
(
snapshot
.
hasError
||
snapshot
.
data
==
null
||
snapshot
.
connectionState
==
ConnectionState
.
waiting
)
{
return
const
CircularProgressIndicator
();
}
return
listsosmed
(
const
Icon
(
Icons
.
whatsapp
,
color:
Colors
.
green
,
),
TextFormField
(
controller:
waController
,
decoration:
InputDecoration
(
controller:
waController
..
text
=
pgm
[
'whatsapp'
],
//initialValue: pgm['whatsapp'],
decoration:
const
InputDecoration
(
errorStyle:
TextStyle
(
color:
Colors
.
red
),
hintText:
'Enter WhatsApp number without +, Ex : 6280000000000 '
),
'Enter WhatsApp number without +, Ex : 6280000000000 '
,
helperText:
'Enter WhatsApp number without +, Ex : 6280000000000 '
,
),
onChanged:
(
value
)
=>
wa
=
value
,
enabled:
enb
,
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter your phone number'
;
}
else
if
(!
RegExp
(
pattern
).
hasMatch
(
value
)){
return
'Please enter with 628 only'
;
}
return
null
;
},
),
ElevatedButton
(
onPressed:
()
{
...
...
@@ -148,35 +235,45 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
context:
context
,
builder:
(
BuildContext
context
)=>
AlertDialog
(
content:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSosmedDesc
(),
content:
Text
(
'Active WA : '
+
pgm
[
'whatsapp'
])
)
,
);
},
child:
const
Text
(
'View Active'
)));
},
),
const
SizedBox
(
height:
10
,
),
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
Text
(
'Active WA : '
+
pgm
[
'whatsapp'
]);
},
),
)
,
);
},
child:
Text
(
'View Active'
))),
SizedBox
(
height:
10
,
),
listsosmed
(
Icon
(
return
listsosmed
(
const
Icon
(
FontAwesomeIcons
.
linkedin
,
color:
Colors
.
blue
,
),
TextFormField
(
controller:
linkedController
,
decoration:
InputDecoration
(
controller:
linkedController
..
text
=
pgm
[
'linkedin'
],
//initialValue: pgm['linkedin'],
decoration:
const
InputDecoration
(
errorStyle:
TextStyle
(
color:
Colors
.
red
),
hintText:
'Enter a new Linkedin link address'
),
onChanged:
(
value
)
=>
ln
=
value
,
enabled:
enb
,
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter linkedin link'
;
}
return
null
;
},
),
ElevatedButton
(
onPressed:
()
{
...
...
@@ -184,35 +281,46 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
context:
context
,
builder:
(
BuildContext
context
)=>
AlertDialog
(
content:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSosmedDesc
(),
content:
Text
(
'Active Linkedin : '
+
pgm
[
'linkedin'
])
)
,
);
},
child:
const
Text
(
'View Active'
)));
},
),
const
SizedBox
(
height:
10
,
),
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
Text
(
'Active Linkedin : '
+
pgm
[
'linkedin'
]);
},
),
)
,
);
},
child:
Text
(
'View Active'
))),
SizedBox
(
height:
10
,
),
listsosmed
(
Icon
(
return
listsosmed
(
const
Icon
(
FontAwesomeIcons
.
twitterSquare
,
color:
Colors
.
blueAccent
,
),
TextFormField
(
controller:
twitterController
,
decoration:
InputDecoration
(
controller:
twitterController
..
text
=
pgm
[
'twitter'
],
//initialValue: pgm['twitter'],
decoration:
const
InputDecoration
(
errorStyle:
TextStyle
(
color:
Colors
.
red
),
hintText:
'Enter a new Twitter link address'
),
onChanged:
(
value
)
=>
tw
=
value
,
enabled:
enb
,
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter twitter link'
;
}
return
null
;
},
),
ElevatedButton
(
onPressed:
()
{
...
...
@@ -220,35 +328,45 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
context:
context
,
builder:
(
BuildContext
context
)=>
AlertDialog
(
content:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSosmedDesc
(),
content:
Text
(
'Active Twitter : '
+
pgm
[
'twitter'
])
)
,
);
},
child:
const
Text
(
'View Active'
)));
},
),
const
SizedBox
(
height:
10
,
),
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
Text
(
'Active Twitter : '
+
pgm
[
'twitter'
]);
},
),
)
,
);
},
child:
Text
(
'View Active'
))),
SizedBox
(
height:
10
,
),
listsosmed
(
Icon
(
return
listsosmed
(
const
Icon
(
FontAwesomeIcons
.
instagramSquare
,
color:
Colors
.
pink
,
),
TextFormField
(
controller:
igController
,
decoration:
InputDecoration
(
controller:
igController
..
text
=
pgm
[
'instagram'
],
// initialValue: pgm['instagram'],
decoration:
const
InputDecoration
(
errorStyle:
TextStyle
(
color:
Colors
.
red
),
hintText:
'Enter a new Instagram link address'
),
onChanged:
(
value
)
=>
ig
=
value
,
enabled:
enb
,
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter instagram link'
;
}
return
null
;
},
),
ElevatedButton
(
onPressed:
()
{
...
...
@@ -256,35 +374,45 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
context:
context
,
builder:
(
BuildContext
context
)=>
AlertDialog
(
content:
FutureBuilder
<
List
<
dynamic
>>(
future:
getSosmedDesc
(),
content:
Text
(
'Active Instagram : '
+
pgm
[
'instagram'
])
)
,
);
},
child:
const
Text
(
'View Active'
)));
},
),
const
SizedBox
(
height:
10
,
),
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
Text
(
'Active Instagram : '
+
pgm
[
'instagram'
]);
},
),
)
,
);
},
child:
Text
(
'View Active'
))),
SizedBox
(
height:
10
,
),
listsosmed
(
Icon
(
return
listsosmed
(
const
Icon
(
FontAwesomeIcons
.
youtube
,
color:
Colors
.
red
,
),
TextFormField
(
controller:
youtubeController
,
decoration:
InputDecoration
(
controller:
youtubeController
..
text
=
pgm
[
'youtube'
],
//initialValue: pgm['youtube'],
decoration:
const
InputDecoration
(
errorStyle:
TextStyle
(
color:
Colors
.
red
),
hintText:
'Enter a new Youtube link address'
),
onChanged:
(
value
)
=>
yt
=
value
,
enabled:
enb
,
validator:
(
value
)
{
if
(
value
==
null
||
value
.
isEmpty
)
{
return
'Please enter youtube link'
;
}
return
null
;
},
),
ElevatedButton
(
onPressed:
()
{
...
...
@@ -292,21 +420,12 @@ class _SosmedDashboardState extends State<SosmedDashboard> {
context:
context
,
builder:
(
BuildContext
context
)=>
AlertDialog
(
content:
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
Text
(
'Active Youtube : '
+
pgm
[
'youtube'
]);
},
),
content:
Text
(
'Active Youtube : '
+
pgm
[
'youtube'
])
)
,
);
},
child:
Text
(
'View Active'
))),
},
child:
const
Text
(
'View Active'
)));
},
),
],
),
],
...
...
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