import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'main.dart'; import 'Util/Prefs.dart'; import 'package:permission_handler/permission_handler.dart' as pHandler; class LoginPage extends StatefulWidget { LoginPage({Key key}) : super(key: key); @override _LoginPageState createState() => _LoginPageState(); } class _LoginPageState extends State { final userCon = new TextEditingController(); final passCon = new TextEditingController(); final hostAddress = new TextEditingController(); List cabangDrop = []; String selected; Login()async{ util.showLoading(context); var result = await util.JsonDataPostRaw({"User":userCon.text,"Pass":passCon.text}, '${prefs.getString(keyClass.hostAddress)}/user//login/'); if(result['STATUS']==1&& result["DATA"]["status"]=='OK'){ prefs.setString(keyClass.loginId, result['DATA'][keyClass.loginId.toLowerCase()]); // print("user id ${result['DATA'][keyClass.loginId.toLowerCase()]}"); prefs.setString(keyClass.company, result['DATA'][keyClass.company.toLowerCase()]); prefs.setBool(keyClass.logged_in, true); if(prefs.getString(keyClass.cabang_id)!= null && prefs.getString(keyClass.cabang_id)!= ''){ Navigator.pop(context); Navigator.pushNamed(context, '/home'); } else{ var cabangList = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/user/cabangs/'); Navigator.pop(context); if(cabangList['STATUS']==1){ cabangDrop = cabangList['DATA']; selected = cabangDrop[0]['RETURN_VALUE']; setState(() { }); FocusScope.of(context).requestFocus(new FocusNode()); } else{ util.showFlushbar(context, cabangList['DATA'],color: Colors.red); } } } else{ Navigator.pop(context); print(result is String); util.showFlushbar(context, (result['DATA'] is String)?result['DATA']:result['DATA']['info'],color: Colors.red); } } @override void initState() { WidgetsBinding.instance.addPostFrameCallback((_) async { await util.permissionCheck(context,pHandler.Permission.storage,()async{print("storage permit granted!");},customMessage: " untuk menyimpan data backup"); }); super.initState(); } @override Widget build(BuildContext context) { // if(prefs.getBool(keyClass.logged_in)==null||!prefs.getBool(keyClass.logged_in)){ return Scaffold( resizeToAvoidBottomInset: true, body: WillPopScope( onWillPop: ()async{ if(prefs.getBool(keyClass.logged_in)==null||!prefs.getBool(keyClass.logged_in)){ await showDialog(context: context,builder: (context)=>AlertDialog( content: Text('Exit the app?'), actions: [ TextButton( child: Text('Exit'), onPressed: ()async{ Navigator.pop(context); await locationStream?.cancel(); exit(0); }, ), TextButton( child: Text('Cancel'), onPressed: (){ Navigator.pop(context); }, ) ], )); } else{ setState(() { prefs.setBool(keyClass.logged_in, false); prefs.remove(keyClass.cabang_id); prefs.remove(keyClass.company); prefs.remove(keyClass.loginId); }); } return false; }, child: Container( padding: EdgeInsets.only(bottom: MediaQuery.of(context).size.width*0.1), decoration: BoxDecoration( color: Colors.white ), child: Stack( children: [ Positioned.fill( child: Column( children: [ Expanded( flex: 1, child: Container(), ), Expanded( flex: 3, child: InkWell( onLongPress: ()async{ hostAddress.text = prefs.getString(keyClass.hostAddress); await showDialog(context: context,builder: (context)=>AlertDialog( title: Text('Set IP Address'), content: TextField( controller: hostAddress, onSubmitted: (value){ prefs.setString(keyClass.hostAddress,(value=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':value); Navigator.pop(context); }, ), actions: [ TextButton( child: Text('OK'), onPressed: (){ prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':hostAddress.text); Navigator.pop(context); }, ) ], )); }, child: Column( children: [ Container(child: Icon(Icons.input,size: 150,color: Colors.indigo,),), Text('Login',style: TextStyle(fontSize: 25,color: Colors.indigo,fontWeight: FontWeight.bold),), ], ), ), ), Expanded( flex: 3, child: Column( children: [ Container( width: MediaQuery.of(context).size.width*0.8, child: TextFormField( controller: userCon, style: TextStyle(color: Colors.indigo,fontSize: 16), decoration: InputDecoration( hintText: 'User ID', contentPadding:EdgeInsets.only(left: 30,right: 30,top: 20,bottom: 20), hintStyle: TextStyle(fontSize: 16,color: Colors.indigo.withOpacity(0.7)), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.indigo, width: 2), borderRadius: BorderRadius.circular(100) ), enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.indigo.withOpacity(0.5), width: 0.5), borderRadius: BorderRadius.circular(100) ) ), ), ), SizedBox(height: 15,), Container( width: MediaQuery.of(context).size.width*0.8, child: TextFormField( obscureText: true, controller: passCon, style: TextStyle(color: Colors.indigo,fontSize: 16), decoration: InputDecoration( contentPadding:EdgeInsets.only(left: 30,right: 30,top: 20,bottom: 20), hintText: 'Password', hintStyle: TextStyle(fontSize: 16,color: Colors.indigo.withOpacity(0.7)), focusedBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.indigo, width: 2), borderRadius: BorderRadius.circular(100) ), enabledBorder: OutlineInputBorder( borderSide: BorderSide( color: Colors.indigo.withOpacity(0.5), width: 0.5), borderRadius: BorderRadius.circular(100) ) ), ), ), // SizedBox(height: 30,), ], ), ), // Expanded( // flex: 3, // child: Container(color: Colors.yellow,), // ), ], ), ), (prefs.getBool(keyClass.logged_in)==null||!prefs.getBool(keyClass.logged_in)) ?Container() :Positioned.fill( child: Container( color: Colors.white.withOpacity(0.9), child: Center( child: Container( decoration: BoxDecoration( color: Colors.white, boxShadow: [ BoxShadow( color: Colors.grey.withOpacity(0.5), spreadRadius: 5, blurRadius: 7, offset: Offset(0, 3), // changes position of shadow ), ], borderRadius: BorderRadius.circular(5) ), height: MediaQuery.of(context).size.height/3.2, width: MediaQuery.of(context).size.width*0.75, child: Column( children: [ Flexible( flex:3, child: Container( padding: EdgeInsets.only(top:10,left: 10,right: 10), alignment: Alignment.center, decoration: BoxDecoration( // color: Colors.indigo, borderRadius: BorderRadius.only(topLeft: Radius.circular(5),topRight: Radius.circular(5)) ), child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.center, children: [ Icon(Icons.business,size: 70,color: Colors.indigo,), SizedBox(height: 5,), Text('Pilih Cabang',style: TextStyle(fontWeight: FontWeight.bold,fontSize: 16,color: Colors.indigo),) ], ), ), ), Flexible( flex: 1, child: Container( padding: EdgeInsets.only(left: 20,right: 20), alignment: Alignment.centerLeft, child: Theme( data: ThemeData( canvasColor: Colors.white, primaryColor: Colors.indigo, accentColor: Colors.indigo, hintColor: Colors.indigo ), child: DropdownButtonFormField( style: TextStyle(color: Colors.black.withOpacity(0.6),fontWeight: FontWeight.w500,fontSize: 14,), decoration: InputDecoration( contentPadding: EdgeInsets.all(8.0), ), value: selected, onChanged: (value){ setState(() { selected = value; }); }, items: cabangDrop.map>((item)=>DropdownMenuItem( value: item['RETURN_VALUE'], child: Container(width: MediaQuery.of(context).size.width*0.55,child: Text(item["DISPLAY_VALUE"])), )).toList(), ), ), ), ), Flexible( flex: 1, child: Container( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ ButtonTheme( minWidth: 10, child: TextButton( onPressed: (){ prefs.setString(keyClass.cabang_id, selected); Navigator.pushNamed(context, '/home'); }, child: Text('Set',style: TextStyle(color: Colors.indigo),), ), ), TextButton( onPressed: (){ setState(() { prefs.setBool(keyClass.logged_in, false); prefs.remove(keyClass.cabang_id); prefs.remove(keyClass.company); prefs.remove(keyClass.loginId); }); }, child: Text('Cancel',style: TextStyle(color: Colors.indigo)), ) ], ), ), ) ], ), ), ), ) ), ], ), ), ), bottomSheet: Padding( padding: EdgeInsets.only(bottom: MediaQuery.of(context).size.width*0.06,left: MediaQuery.of(context).size.width*0.1,right: MediaQuery.of(context).size.width*0.1), child: TextButton( onPressed: Login, style: TextButton.styleFrom( backgroundColor: Colors.indigo, padding: EdgeInsets.all(15), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(100.0), side: BorderSide(color: Colors.indigo) ), ), child: Container(width: MediaQuery.of(context).size.width,child: Text('Login',textAlign: TextAlign.center,style: TextStyle(color: Colors.white,fontSize: 21),)), ), ), ); } }