You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1008 lines
41 KiB
1008 lines
41 KiB
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
import 'package:google_fonts/google_fonts.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Settings/RequestHttp/changePassword_post.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Settings/RequestHttp/changeprofileimage_post.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Settings/RequestHttp/getDetail_post.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Settings/RequestHttp/getProfileImage_post.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Settings/RequestHttp/logout_post.dart';
|
|
import 'package:image_picker/image_picker.dart';
|
|
import 'package:progress_dialog_null_safe/progress_dialog_null_safe.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../Login/login_screen.dart';
|
|
import '../Settings/inputWidget.dart';
|
|
import 'dart:developer' as logDev;
|
|
|
|
class SettingsScreen extends StatefulWidget {
|
|
const SettingsScreen({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
State<SettingsScreen> createState() => _SettingsScreenState();
|
|
}
|
|
|
|
class _SettingsScreenState extends State<SettingsScreen> {
|
|
bool visible = false;
|
|
bool visiblePersonalInformation = false;
|
|
File? _imagePath;
|
|
|
|
String name = "",
|
|
statusDetail = "",
|
|
dateOfBirth = "",
|
|
phone = "",
|
|
email = "",
|
|
address = "",
|
|
position = "";
|
|
|
|
var _imageToShow;
|
|
|
|
@override
|
|
initState() {
|
|
super.initState();
|
|
passwordController.clear();
|
|
newPasswordController.clear();
|
|
retypeNewPasswordController.clear();
|
|
getDetail();
|
|
_imageToShow = AssetImage('assets/images/ic_administrator.png');
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
_imageToShow = getProfileImage();
|
|
});
|
|
}
|
|
|
|
//Get Profile image
|
|
getProfileImage() async {
|
|
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
final session = prefs.getString('session');
|
|
|
|
ProgressDialog loading = ProgressDialog(context);
|
|
loading = ProgressDialog(context,
|
|
type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
|
|
loading.style(
|
|
message: 'Please Wait .....',
|
|
borderRadius: 5,
|
|
backgroundColor: Colors.white,
|
|
progressWidget: CircularProgressIndicator(),
|
|
elevation: 10.0,
|
|
padding: EdgeInsets.all(10),
|
|
insetAnimCurve: Curves.easeInOut,
|
|
progress: 0.0,
|
|
maxProgress: 100.0,
|
|
progressTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
|
|
messageTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
|
|
|
|
await loading.show();
|
|
|
|
GetProfileImage_Post.connectToAPI(session!).then((valueResult) async {
|
|
Map<String, dynamic> object = json.decode(valueResult);
|
|
if (object.containsKey("result").toString() == "true") {
|
|
String status = object['result']['status'].toString();
|
|
logDev.log(status, name: "STATUS GET PROFILE");
|
|
if (status == "success") {
|
|
String photo = object['result']['photo'].toString();
|
|
if (photo == "false") {
|
|
setState(() {
|
|
_imageToShow = AssetImage('assets/icons/ic_pp_2.png');
|
|
});
|
|
} else if (photo != "false") {
|
|
Uint8List decodedBytes = Base64Decoder().convert(photo);
|
|
//logDev.log(decodedBytes.toString(), name: "DECODED BYTES photo");
|
|
setState(() {
|
|
_imageToShow = Image.memory(decodedBytes, gaplessPlayback: true).image;
|
|
});
|
|
}
|
|
} else if (status == "failed") {
|
|
String message = object['result']['message'].toString();
|
|
Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
}
|
|
await loading.hide();
|
|
} else {
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
await loading.hide();
|
|
}
|
|
});
|
|
await loading.hide();
|
|
return _imageToShow;
|
|
}
|
|
|
|
//Get Detail
|
|
getDetail() async {
|
|
GetDetail_Post.connectToAPI().then((valueResult) async {
|
|
Map<String, dynamic> object = json.decode(valueResult);
|
|
if (object.containsKey("result").toString() == "true") {
|
|
statusDetail = object['result']['status'].toString();
|
|
String message = object['result']['message'].toString();
|
|
if (statusDetail == "failed" || message == "User Not Found") {
|
|
Fluttertoast.showToast(
|
|
msg: message + ", Please restart the Application!",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
} else if (statusDetail != "failed") {
|
|
name = object['result']['name'].toString();
|
|
dateOfBirth = object['result']['date_of_birth'].toString();
|
|
phone = object['result']['phone'].toString();
|
|
email = object['result']['email'].toString();
|
|
address = object['result']['address'].toString();
|
|
position = object['result']['position'].toString();
|
|
|
|
var prefs = await SharedPreferences.getInstance();
|
|
if (position == "false"){
|
|
position = "-";
|
|
await prefs.setString('position', position);
|
|
} else {
|
|
await prefs.setString('position', position);
|
|
}
|
|
|
|
if (name == "false"){
|
|
name = "-";
|
|
}
|
|
if (dateOfBirth == "false"){
|
|
dateOfBirth = "-";
|
|
}
|
|
if (phone == "false"){
|
|
phone = "-";
|
|
}
|
|
if (email == "false"){
|
|
email = "-";
|
|
}
|
|
if (address == "false"){
|
|
address = "-";
|
|
}
|
|
}
|
|
} else {
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
|
|
}
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var size = MediaQuery.of(context).size;
|
|
|
|
ProgressDialog loading = ProgressDialog(context);
|
|
loading = ProgressDialog(context,
|
|
type: ProgressDialogType.normal, isDismissible: false, showLogs: true);
|
|
loading.style(
|
|
message: 'Please Wait .....',
|
|
borderRadius: 5,
|
|
backgroundColor: Colors.white,
|
|
progressWidget: CircularProgressIndicator(),
|
|
elevation: 10.0,
|
|
padding: EdgeInsets.all(10),
|
|
insetAnimCurve: Curves.easeInOut,
|
|
progress: 0.0,
|
|
maxProgress: 100.0,
|
|
progressTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
|
|
messageTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 15.0, fontWeight: FontWeight.w600));
|
|
|
|
return Scaffold(
|
|
body: SingleChildScrollView(
|
|
child: Stack(
|
|
children: <Widget>[
|
|
Container(
|
|
height: size.height * 0.3,
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topRight,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
Color(0xFF4858A7),
|
|
Color(0xFF6474C6),
|
|
])),
|
|
),
|
|
SafeArea(
|
|
child: Padding(
|
|
padding: EdgeInsets.all(20),
|
|
child: Column(
|
|
children: <Widget>[
|
|
Stack(
|
|
alignment: Alignment.topCenter,
|
|
children: [
|
|
Container(
|
|
margin: EdgeInsets.only(top: (((size.width - 20) * 0.33) * 0.5)),
|
|
child: Card(
|
|
elevation: 15,
|
|
child: Container(
|
|
height: (size.height * 0.28) * .7,
|
|
width: size.width - 20,
|
|
padding: EdgeInsets.all(15),
|
|
decoration: BoxDecoration(
|
|
color: Colors.white,
|
|
borderRadius:
|
|
BorderRadius.all(Radius.circular(10))),
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: <Widget>[
|
|
Text(name,
|
|
maxLines: 2,
|
|
overflow: TextOverflow.ellipsis,
|
|
textAlign: TextAlign.center,
|
|
style: GoogleFonts.inter(
|
|
fontSize: size.width*0.045,
|
|
color: Colors.black,
|
|
fontWeight: FontWeight.bold),
|
|
),
|
|
Text(position,
|
|
textAlign: TextAlign.center,
|
|
style: GoogleFonts.inter(
|
|
fontSize: size.width*0.035, color: Colors.black),
|
|
),
|
|
],
|
|
)),
|
|
),
|
|
),
|
|
Container(
|
|
height: (size.width - 20) * 0.33,
|
|
width: (size.width - 20) * 0.33,
|
|
decoration: BoxDecoration(
|
|
color: Colors.black,
|
|
image: DecorationImage(
|
|
image: _imageToShow,
|
|
fit: BoxFit.cover ,
|
|
),
|
|
shape: BoxShape.circle,
|
|
),
|
|
),
|
|
InkWell(
|
|
child: Container(
|
|
height: ((size.width - 20) * 0.33) * 0.25,
|
|
width: ((size.width - 20) * 0.33) * 0.25,
|
|
margin: EdgeInsets.only(
|
|
top: (((size.width - 20) * 0.33) - 20),
|
|
left: ((size.width - 20) * 0.33) - 10),
|
|
decoration: BoxDecoration(
|
|
color: Colors.yellow,
|
|
image: DecorationImage(
|
|
image: AssetImage('assets/images/ic_camera.png'),
|
|
scale: 3,
|
|
fit: BoxFit.scaleDown,
|
|
),
|
|
shape: BoxShape.circle,
|
|
),
|
|
),
|
|
onTap: () async {
|
|
final ImagePicker _picker = ImagePicker();
|
|
final XFile? imagePicked = await _picker.pickImage(
|
|
source: ImageSource.gallery);
|
|
if (imagePicked != null) {
|
|
_imagePath = File(imagePicked.path);
|
|
List<int> imageBytes = _imagePath!.readAsBytesSync();
|
|
String base64Image = base64Encode(imageBytes);
|
|
//logDev.log(base64Image, name: "String base64");
|
|
await loading.show();
|
|
ChangeProfileImage_Post.connectToAPI(base64Image).then((valueResult) async {
|
|
Map<String, dynamic> object = json.decode(valueResult);
|
|
if (object.containsKey("result").toString() == "true") {
|
|
String status = object['result']['status'].toString();
|
|
String message = object['result']['message'].toString();
|
|
if (status == "success") {
|
|
_imageToShow = FileImage(File(imagePicked.path));
|
|
/* Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);*/
|
|
await loading.hide();
|
|
showAlertDialogChangeProfile(context, "Success, " + message, "Ok");
|
|
} else if (status == "failed") {
|
|
/* Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);*/
|
|
await loading.hide();
|
|
showAlertDialogChangeProfile(context, "Failed, " + message, "Back");
|
|
}
|
|
} else {
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
await loading.hide();
|
|
}
|
|
setState(() {});
|
|
});
|
|
} else if (imagePicked == null) {
|
|
//_imagePath = await getImageFileFromAssets('assets/images/ic_administrator.png') as File?;
|
|
}
|
|
},
|
|
)
|
|
],
|
|
),
|
|
InkWell(
|
|
child: roundedRectButton(
|
|
"Personal Information", Gradients1, 20, 5),
|
|
onTap: () async {
|
|
setState(() {
|
|
visiblePersonalInformation =
|
|
!visiblePersonalInformation;
|
|
});
|
|
},
|
|
),
|
|
Visibility(
|
|
visible: visiblePersonalInformation,
|
|
child: Container(
|
|
margin: EdgeInsets.only(top: 10),
|
|
width: size.width - 50,
|
|
padding: EdgeInsets.all(15),
|
|
decoration: BoxDecoration(
|
|
color: Color(0xFFD9D9D9),
|
|
borderRadius: BorderRadius.all(Radius.circular(5))),
|
|
child: Column(
|
|
children: [
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Name",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(name, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Status",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(statusDetail, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Date of Birth",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(dateOfBirth, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Phone Number",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(phone, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Email Address",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(email, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Address",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
roundDetail(address, 0, 5, 3),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
/*InkWell(
|
|
child: roundedRectButton(
|
|
"Save Password", Gradients2, 10, 10),
|
|
onTap: () {
|
|
if (!validateFormSavePassword(context)) {
|
|
return;
|
|
} else if (validateFormSavePassword(context)) {
|
|
if (newPasswordController.text.toString() ==
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
if (passwordController.text.toString() ==
|
|
newPasswordController.text
|
|
.toString() ||
|
|
passwordController.text.toString() ==
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
Fluttertoast.showToast(
|
|
msg:
|
|
"Your new password is the same with your old password, please change with new password!",
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
} else {
|
|
showAlertDialogSavePassword(context);
|
|
}
|
|
} else if (newPasswordController.text
|
|
.toString() !=
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
Fluttertoast.showToast(
|
|
msg:
|
|
"Your retype password was entered incorrectly.\nPlease enter it again!",
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
}
|
|
}
|
|
}),*/
|
|
],
|
|
),
|
|
),
|
|
),
|
|
InkWell(
|
|
child:
|
|
roundedRectButton("Edit Password", Gradients1, 10, 5),
|
|
onTap: () {
|
|
setState(() {
|
|
visible = !visible;
|
|
});
|
|
},
|
|
),
|
|
Visibility(
|
|
visible: visible,
|
|
child: Container(
|
|
margin: EdgeInsets.only(top: 10),
|
|
width: size.width - 50,
|
|
padding: EdgeInsets.all(15),
|
|
decoration: BoxDecoration(
|
|
color: Color(0xFFD9D9D9),
|
|
borderRadius: BorderRadius.all(Radius.circular(5))),
|
|
child: Column(
|
|
children: [
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Type your current Password",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
InputWidgetCurrentPassword(
|
|
"Current Password"),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Type your New Password",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
InputWidgetNewPassword("New Password"),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: <Widget>[
|
|
Padding(
|
|
padding: EdgeInsets.only(bottom: 5),
|
|
child: Text(
|
|
"Re-type your New Password",
|
|
style: TextStyle(
|
|
fontSize: 16, color: Colors.black87),
|
|
),
|
|
),
|
|
Stack(
|
|
alignment: Alignment.bottomRight,
|
|
children: <Widget>[
|
|
InputWidgetRetypeNewPassword(
|
|
"Re-type New Password"),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
InkWell(
|
|
child: roundedRectButton(
|
|
"Save Password", Gradients2, 10, 10),
|
|
onTap: () {
|
|
if (!validateFormSavePassword(context)) {
|
|
return;
|
|
} else if (validateFormSavePassword(context)) {
|
|
if (newPasswordController.text.toString() ==
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
if (passwordController.text.toString() ==
|
|
newPasswordController.text
|
|
.toString() ||
|
|
passwordController.text.toString() ==
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
Fluttertoast.showToast(
|
|
msg:
|
|
"Your new password is the same with your old password, please change with new password!",
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
} else {
|
|
showAlertDialogSavePassword(context);
|
|
}
|
|
} else if (newPasswordController.text
|
|
.toString() !=
|
|
retypeNewPasswordController.text
|
|
.toString()) {
|
|
Fluttertoast.showToast(
|
|
msg:
|
|
"Your retype password was entered incorrectly.\nPlease enter it again!",
|
|
toastLength: Toast.LENGTH_LONG,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
}
|
|
}
|
|
}),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
InkWell(
|
|
child: roundedRectButton("Logout", Gradients1, 10, 5),
|
|
onTap: () {
|
|
showAlertDialogLogout(context);
|
|
}),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
));
|
|
}
|
|
}
|
|
|
|
Widget roundedRectButton(String title, List<Color> gradient, double marginTop, double radiusCircular) {
|
|
return Builder(builder: (BuildContext mContext) {
|
|
return Align(
|
|
alignment: Alignment.center,
|
|
child: Stack(
|
|
children: <Widget>[
|
|
Container(
|
|
margin: EdgeInsets.only(top: marginTop),
|
|
alignment: Alignment.center,
|
|
height: 55,
|
|
width: MediaQuery.of(mContext).size.width - 50,
|
|
decoration: ShapeDecoration(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius:
|
|
BorderRadius.all(Radius.circular(radiusCircular))),
|
|
gradient: LinearGradient(
|
|
colors: gradient,
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight),
|
|
),
|
|
child: Padding(
|
|
padding: EdgeInsets.fromLTRB(10, 3, 10, 3),
|
|
child: Text(title,
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 19,
|
|
fontWeight: FontWeight.w500)),
|
|
),
|
|
padding: EdgeInsets.all(10),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
});
|
|
}
|
|
|
|
Widget roundDetail(String detail, double marginTop, double marginBottom, double radiusCircular) {
|
|
return Builder(builder: (BuildContext mContext) {
|
|
return Align(
|
|
alignment: Alignment.center,
|
|
child: Stack(
|
|
children: <Widget>[
|
|
Container(
|
|
margin: EdgeInsets.only(top: marginTop, bottom: marginBottom),
|
|
alignment: Alignment.centerLeft,
|
|
height: 45,
|
|
width: MediaQuery.of(mContext).size.width - 50,
|
|
decoration: ShapeDecoration(
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius:
|
|
BorderRadius.all(Radius.circular(radiusCircular))),
|
|
color: Colors.blueGrey,
|
|
),
|
|
child: Padding(
|
|
padding: EdgeInsets.fromLTRB(3, 3, 3, 3),
|
|
child: Text(detail,
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 15,
|
|
fontWeight: FontWeight.w500)),
|
|
),
|
|
padding: EdgeInsets.all(10),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
});
|
|
}
|
|
|
|
const List<Color> Gradients1 = [
|
|
//Color(0xFF0EDED2),
|
|
Color(0xFF03A0FE),
|
|
Color(0xFF4858A7),
|
|
//Color(0xFF6474C6),
|
|
];
|
|
|
|
const List<Color> Gradients2 = [
|
|
Color(0xFFFF9945),
|
|
Color(0xFFFc6076),
|
|
];
|
|
|
|
//Save New Password
|
|
showAlertDialogSavePassword(BuildContext context) {
|
|
// set up the button
|
|
Widget okButton = TextButton(
|
|
child: Text("Yes"),
|
|
onPressed: () async {
|
|
ProgressDialog loading = ProgressDialog(context);
|
|
loading = ProgressDialog(context,
|
|
type: ProgressDialogType.normal,
|
|
isDismissible: false,
|
|
showLogs: true);
|
|
loading.style(
|
|
message: 'Please Wait .....',
|
|
borderRadius: 5,
|
|
backgroundColor: Colors.white,
|
|
progressWidget: CircularProgressIndicator(),
|
|
elevation: 10.0,
|
|
padding: EdgeInsets.all(10),
|
|
insetAnimCurve: Curves.easeInOut,
|
|
progress: 0.0,
|
|
maxProgress: 100.0,
|
|
progressTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
|
|
messageTextStyle: TextStyle(
|
|
color: Colors.black,
|
|
fontSize: 15.0,
|
|
fontWeight: FontWeight.w600));
|
|
await loading.show();
|
|
|
|
ChangePassword_Post.connectToAPI(passwordController.text.toString(), newPasswordController.text.toString()).then((valueResult) async {
|
|
Map<String, dynamic> object = json.decode(valueResult);
|
|
if (object.containsKey("result").toString() == "true") {
|
|
String status = object['result']['status'].toString();
|
|
String message = object['result']['message'].toString();
|
|
if (status == "success") {
|
|
Fluttertoast.showToast(
|
|
msg: message + ", Please login again!",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
|
|
passwordController.clear();
|
|
newPasswordController.clear();
|
|
retypeNewPasswordController.clear();
|
|
|
|
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
await prefs.remove('session');
|
|
await loading.hide();
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => LoginView()));
|
|
} else if (status == "failed") {
|
|
Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
await loading.hide();
|
|
}
|
|
} else {
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
await loading.hide();
|
|
}
|
|
});
|
|
},
|
|
);
|
|
|
|
Widget noButton = TextButton(
|
|
child: Text("No"),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text("Employee Self Service"),
|
|
content: Text("Save New Password?"),
|
|
actions: [noButton, okButton],
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
|
|
//Validate Form Change Password
|
|
bool validateFormSavePassword(BuildContext context) {
|
|
bool result = true;
|
|
|
|
if (passwordController.text.toString().isEmpty) {
|
|
Fluttertoast.showToast(
|
|
msg: "Old Password Required!",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
result = false;
|
|
}
|
|
|
|
if (newPasswordController.text.toString().isEmpty) {
|
|
Fluttertoast.showToast(
|
|
msg: "New Password Required",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
result = false;
|
|
}
|
|
|
|
if (retypeNewPasswordController.text.toString().isEmpty) {
|
|
Fluttertoast.showToast(
|
|
msg: "Retype New Password Required",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
result = false;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
//LOGOUT
|
|
showAlertDialogLogout(BuildContext context) {
|
|
// set up the button
|
|
Widget okButton = TextButton(
|
|
child: Text("Yes"),
|
|
onPressed: () async {
|
|
ProgressDialog loading = ProgressDialog(context);
|
|
loading = ProgressDialog(context,
|
|
type: ProgressDialogType.normal,
|
|
isDismissible: false,
|
|
showLogs: true);
|
|
loading.style(
|
|
message: 'Please Wait .....',
|
|
borderRadius: 5,
|
|
backgroundColor: Colors.white,
|
|
progressWidget: CircularProgressIndicator(),
|
|
elevation: 10.0,
|
|
padding: EdgeInsets.all(10),
|
|
insetAnimCurve: Curves.easeInOut,
|
|
progress: 0.0,
|
|
maxProgress: 100.0,
|
|
progressTextStyle: TextStyle(
|
|
color: Colors.black, fontSize: 10.0, fontWeight: FontWeight.w400),
|
|
messageTextStyle: TextStyle(
|
|
color: Colors.black,
|
|
fontSize: 15.0,
|
|
fontWeight: FontWeight.w600));
|
|
await loading.show();
|
|
|
|
Logout_Post.connectToAPI().then((valueResult) async {
|
|
Map<String, dynamic> object = json.decode(valueResult);
|
|
if (object.containsKey("result").toString() == "true") {
|
|
String status = object['result']['status'].toString();
|
|
if (status == "success") {
|
|
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
await prefs.remove('session');
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
await loading.hide();
|
|
Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LoginView()), (route) => false);
|
|
} else if (status == "failed") {
|
|
String message = object['result']['message'].toString();
|
|
Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
await loading.hide();
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
}
|
|
} else {
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
await loading.hide();
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
}
|
|
});
|
|
},
|
|
);
|
|
|
|
Widget noButton = TextButton(
|
|
child: Text("No"),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text("Employee Self Service"),
|
|
content: Text("Are you sure you want to logout from this Application?"),
|
|
|
|
//content: Text("Apakah Anda yakin ingin keluar dari aplikasi ini?"),
|
|
actions: [noButton, okButton],
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
|
|
//Alert Change Profile
|
|
showAlertDialogChangeProfile(BuildContext context, String message, String buttonMessage) {
|
|
// set up the button
|
|
Widget okButton = TextButton(
|
|
child: Text(buttonMessage),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text("Employee Self Service"),
|
|
content: Text(message),
|
|
actions: [okButton],
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
|