forked from dienianindya/gsi_ess_mobile
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.
337 lines
11 KiB
337 lines
11 KiB
import 'dart:async';
|
|
import 'dart:convert';
|
|
import 'dart:io';
|
|
import 'package:connectivity_plus/connectivity_plus.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
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/Login/login_screen.dart';
|
|
import 'package:employee_selfservice_mobile/Screens/Splash/loginstatus_post.dart';
|
|
import 'package:employee_selfservice_mobile/constants.dart';
|
|
import 'package:internet_connection_checker/internet_connection_checker.dart';
|
|
import 'package:lottie/lottie.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import '../Home/home_screen.dart';
|
|
import '../Splash/background.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
import 'dart:developer' as logDev;
|
|
|
|
class Splash extends StatefulWidget {
|
|
const Splash({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
_SplashState createState() => _SplashState();
|
|
}
|
|
|
|
class _SplashState extends State<Splash> {
|
|
late StreamSubscription subscription;
|
|
bool isDeviceConnected = false;
|
|
bool isAlertSet = false;
|
|
|
|
@override
|
|
void initState() {
|
|
//getConnectivity();
|
|
Timer(Duration(seconds: 10), () => loginStatus(context));
|
|
super.initState();
|
|
}
|
|
|
|
/*getConnectivity() =>
|
|
subscription = Connectivity().onConnectivityChanged.listen(
|
|
(ConnectivityResult result) async {
|
|
isDeviceConnected = await InternetConnectionChecker().hasConnection;
|
|
if (!isDeviceConnected && isAlertSet == false) {
|
|
showConnectivityDialogBox();
|
|
setState(() => isAlertSet = true);
|
|
}
|
|
},
|
|
);*/
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
resizeToAvoidBottomInset: false,
|
|
body: Stack(
|
|
children: <Widget>[
|
|
Background(),
|
|
SplashScreen(),
|
|
],
|
|
));
|
|
}
|
|
|
|
/*showConnectivityDialogBox() =>
|
|
showCupertinoDialog<String>(
|
|
context: context,
|
|
builder: (BuildContext context) =>
|
|
CupertinoAlertDialog(
|
|
title: const Text('No Connection'),
|
|
content: const Text('Please check your internet connectivity'),
|
|
actions: <Widget>[
|
|
Column(
|
|
children: [
|
|
SizedBox(
|
|
width: 250,
|
|
height: 250,
|
|
child: LottieBuilder.asset(
|
|
//'assets/animation/animation_no_internet.json',
|
|
'assets/animation/animation_no_internet_3.json',
|
|
repeat: true),
|
|
),
|
|
],
|
|
),
|
|
TextButton(
|
|
onPressed: () async {
|
|
Navigator.pop(context, 'Cancel');
|
|
setState(() => isAlertSet = false);
|
|
isDeviceConnected =
|
|
await InternetConnectionChecker().hasConnection;
|
|
if (!isDeviceConnected && isAlertSet == false) {
|
|
showConnectivityDialogBox();
|
|
setState(() => isAlertSet = true);
|
|
}
|
|
},
|
|
child: const Text('Retry'),
|
|
),
|
|
],
|
|
),
|
|
);*/
|
|
}
|
|
|
|
class SplashScreen extends StatelessWidget {
|
|
const SplashScreen({Key? key}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
var size = MediaQuery.of(context).size;
|
|
|
|
return Scaffold(
|
|
body: Container(
|
|
width: double.infinity,
|
|
height: double.infinity,
|
|
decoration: BoxDecoration(
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topRight,
|
|
end: Alignment.bottomRight,
|
|
colors: [
|
|
Color(0xFF4858A7),
|
|
Color(0xFF4858A7),
|
|
Color(0xFF6474C6),
|
|
//Color(0xFF8C99DD),
|
|
//Color(0xFFFFFFFF)
|
|
])),
|
|
child: Center(
|
|
child: Column(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
crossAxisAlignment: CrossAxisAlignment.center,
|
|
children: [
|
|
Container(
|
|
/*decoration: BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
color: Colors.white
|
|
),*/
|
|
child: SizedBox(
|
|
width: size.width * 0.55,
|
|
//height: 250,
|
|
child: Image.asset('assets/animation/iconapp2.gif')
|
|
/*LottieBuilder.asset('assets/animation/animation_4.json',
|
|
repeat: true, ),*/
|
|
),
|
|
),
|
|
/* Text(appName,
|
|
style: GoogleFonts.carterOne(fontSize: 25, color: Colors.white))*/
|
|
],
|
|
),
|
|
),
|
|
));
|
|
}
|
|
}
|
|
|
|
Future<void> loginStatus(BuildContext context) async {
|
|
final SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
String? version = prefs.getString('version');
|
|
String? device = prefs.getString('device');
|
|
String? session = prefs.getString('session');
|
|
String? notif_token = prefs.getString('notif_token');
|
|
|
|
if (session == null) {
|
|
version = "1.0.0";
|
|
session = "";
|
|
notif_token = "";
|
|
|
|
if (Platform.isAndroid){
|
|
device = "android";
|
|
} else if (Platform.isIOS){
|
|
device = "ios";
|
|
}
|
|
|
|
}
|
|
|
|
//logDev.log(session, name: "SESSIONNYA");
|
|
|
|
LoginStatus_Post.connectToAPI(version!, device!, session, notif_token!).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") {
|
|
Fluttertoast.showToast(
|
|
msg: "You are already logged in",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
Navigator.pushReplacement(
|
|
context, MaterialPageRoute(builder: (context) => HomeView()));
|
|
} else if (status == "failed") {
|
|
String message = object['result']['message'].toString();
|
|
if (message == "Not Logged In") {
|
|
Fluttertoast.showToast(
|
|
msg: message,
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
Navigator.pushReplacement(
|
|
context, MaterialPageRoute(builder: (context) => LoginView()));
|
|
} else {
|
|
String title = object['result']['title'].toString();
|
|
String action = object['result']['action'].toString();
|
|
String block = object['result']['block'].toString();
|
|
if (block == "false") {
|
|
Widget okButton = TextButton(
|
|
child: Text(action),
|
|
onPressed: () async {
|
|
Uri url = Uri.parse(Uri.encodeFull("https://play.google.com/store/apps"));
|
|
//final Uri uri = Uri(scheme: "https", host: "play.google.com");
|
|
if(!await launchUrl(url, mode: LaunchMode.externalApplication)) {
|
|
throw "Can not launch url";
|
|
}
|
|
},
|
|
);
|
|
|
|
Widget noButton = TextButton(
|
|
child: Text("Later"),
|
|
onPressed: () {
|
|
if (session == ""){
|
|
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => LoginView()));
|
|
} else {
|
|
Navigator.pushReplacement(context, MaterialPageRoute(builder: (context) => HomeView()));
|
|
}
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text(appName),
|
|
content: Text(title + "\n" + message),
|
|
actions: [noButton, okButton],
|
|
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
} else if (block == "true") {
|
|
Widget okButton = TextButton(
|
|
child: Text(action),
|
|
onPressed: () async {
|
|
if (action == "update") {
|
|
_launchURL(Uri.parse("https://play.google.com/store/apps"));
|
|
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
|
|
Uri url = Uri.parse(Uri.encodeFull("https://play.google.com/store/apps"));
|
|
//final Uri uri = Uri(scheme: "https", host: "play.google.com");
|
|
if(!await launchUrl(url, mode: LaunchMode.externalApplication)) {
|
|
throw "Can not launch url";
|
|
}
|
|
} else if (action == "close") {
|
|
SystemChannels.platform.invokeMethod('SystemNavigator.pop');
|
|
}
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text(appName),
|
|
content: Text(title + "\n" + message),
|
|
actions: [okButton],
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
alertDialogFailedResponse(context);
|
|
Fluttertoast.showToast(
|
|
msg: "Server Response Error",
|
|
toastLength: Toast.LENGTH_SHORT,
|
|
gravity: ToastGravity.CENTER,
|
|
timeInSecForIosWeb: 1,
|
|
textColor: Colors.white,
|
|
fontSize: 16.0);
|
|
}
|
|
});
|
|
}
|
|
|
|
_launchURL(Uri url) async {
|
|
if (await canLaunchUrl(url)) {
|
|
await launchUrl(url);
|
|
} else {
|
|
throw 'Could not launch $url';
|
|
}
|
|
}
|
|
|
|
alertDialogFailedResponse(BuildContext context){
|
|
Widget okButton = TextButton(
|
|
child: Text("Refresh"),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
Navigator.pushReplacement(context, MaterialPageRoute(
|
|
builder: (context) => SplashScreen()));
|
|
},
|
|
);
|
|
|
|
Widget noButton = TextButton(
|
|
child: Text("Back"),
|
|
onPressed: () {
|
|
Navigator.of(context, rootNavigator: true).pop();
|
|
Navigator.pop(context);
|
|
|
|
},
|
|
);
|
|
|
|
// set up the AlertDialog
|
|
AlertDialog alert = AlertDialog(
|
|
title: Text(appName),
|
|
content: Text("Server Response Error"),
|
|
actions: [
|
|
noButton,
|
|
okButton,
|
|
],
|
|
);
|
|
|
|
// show the dialog
|
|
showDialog(
|
|
context: context,
|
|
barrierDismissible: false,
|
|
builder: (BuildContext context) {
|
|
return alert;
|
|
},
|
|
);
|
|
}
|
|
|
|
|