@@ -4,6 +4,7 @@ class keyClass{ | |||
static String duration = 'DURATION'; | |||
static String loginId = 'LOGIN_ID'; | |||
static String hostAddress = 'HOST'; | |||
static String restTokenAddress = 'REST'; | |||
static String company = 'COMPANY'; | |||
static String user_id = 'USER'; | |||
static String cabang_id = 'CABANG_ID'; | |||
@@ -11,6 +12,8 @@ class keyClass{ | |||
static String targetProccess = 'dbPath'; | |||
static String submitProccess = 'SUBMIT'; | |||
static String stock_id = 'STOCK_TAKING_UNIT_ID'; | |||
static String client_credential = 'CLIENT_CREDENTIAL'; | |||
static String rest_data = 'REST_DATA'; | |||
} | |||
class columnName{ | |||
static String id = 'ID'; | |||
@@ -2,31 +2,135 @@ import 'dart:async'; | |||
import 'dart:convert'; | |||
import 'dart:io'; | |||
import 'package:flutter/services.dart'; | |||
import 'package:http/http.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'package:flushbar/flushbar.dart'; | |||
import 'package:http/io_client.dart'; | |||
import '../main.dart'; | |||
import 'package:location/location.dart'; | |||
import 'package:permission_handler/permission_handler.dart' as pHandler; | |||
// import 'package:app_settings/app_settings.dart'; | |||
import 'Prefs.dart'; | |||
import 'package:oauth2/oauth2.dart' as oauth2; | |||
class Util{ | |||
bool tokenValidity = true; | |||
bool useLocal = false; | |||
JsonDataPostRaw(Map jsonData, String url,{timeout:false}) async{ | |||
getOauth2Client() async { | |||
bool resetClient = false; | |||
oauth2.Credentials restData = (prefs.getString(keyClass.rest_data)!=null&&prefs.getString(keyClass.rest_data).contains("accessToken"))?oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)):null; | |||
if(restData == null)resetClient = true; | |||
else{ | |||
if(DateTime.now().isAfter(restData.expiration))resetClient = true; | |||
} | |||
oauth2.Client client; | |||
if(resetClient||!tokenValidity){ | |||
final tokenEndpoint = Uri.parse(prefs.getString(keyClass.restTokenAddress)); | |||
if(prefs.getString(keyClass.client_credential)==null){ | |||
client = await initRest(); | |||
} | |||
else{ | |||
var clients = JsonDecoder().convert(prefs.getString(keyClass.client_credential)); | |||
client = await oauth2.clientCredentialsGrant(tokenEndpoint, clients["id"], clients["secret"],httpClient: http); | |||
prefs.setString(keyClass.rest_data, client.credentials.toJson()); | |||
} | |||
} | |||
else { | |||
if (prefs.getString(keyClass.client_credential) == null) { | |||
client = await initRest(); | |||
} | |||
else { | |||
var clients = JsonDecoder().convert(prefs.getString(keyClass.client_credential)); | |||
client = new oauth2.Client(restData, identifier: clients["id"], | |||
secret: clients["secret"], | |||
httpClient: http); | |||
} | |||
} | |||
return client; | |||
} | |||
JsonDataPostRaw(Map jsonData, String url,{secure:true,timeout:false}) async{ | |||
var httpClient; | |||
const JsonDecoder decoder = const JsonDecoder(); | |||
var headers = {'Content-type': 'application/json'}; | |||
try { | |||
var response; | |||
if(secure) { | |||
httpClient = await getOauth2Client(); | |||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||
headers["Authorization"] = | |||
"bearer ${tokenRestData.accessToken}"; | |||
} | |||
else { | |||
httpClient = http; | |||
} | |||
if (timeout) | |||
response = await http.post( | |||
response = await httpClient.post( | |||
Uri.parse(url), headers: headers, | |||
body: json.encode(jsonData)).timeout( | |||
const Duration(seconds: 10)); | |||
else | |||
response = await httpClient.post( | |||
Uri.parse(url), headers: {'Content-type': 'application/json'}, | |||
body: json.encode(jsonData)); | |||
if(response.statusCode == 403) tokenValidity = false; | |||
if(htmlErrorTitle(response.body.toString())!=""){ | |||
return {"STATUS":(response.statusCode != 200)?0:1,"DATA":htmlErrorTitle(response.body.toString())}; | |||
} | |||
final Map data = decoder.convert(response.body); | |||
try{data["DATA"] = decoder.convert(data["DATA"]);}catch(e){} | |||
return data; | |||
} on TimeoutException catch(e){ | |||
return {"STATUS":0,"DATA":"Request Timeout"}; | |||
} | |||
on HandshakeException catch(e){ | |||
if(useLocal){ | |||
return {"STATUS":0,"DATA":"Not Connected to Server. $e"}; | |||
} | |||
else{ | |||
useLocal = true; | |||
http = IOClient(HttpClient(context: clientContext)); | |||
return await JsonDataPostRaw(jsonData, url,timeout:timeout,secure: secure); | |||
} | |||
} | |||
on Exception catch(exception){ | |||
print(url); | |||
// Toast("Not Connected to Server", Colors.red); | |||
return {"STATUS":0,"DATA":"Not Connected to Server. $exception"}; | |||
} | |||
} | |||
JsonDataPutRaw(Map jsonData, String url,{secure:true,timeout:false}) async{ | |||
var httpClient; | |||
const JsonDecoder decoder = const JsonDecoder(); | |||
var headers = {'Content-type': 'application/json'}; | |||
try { | |||
var response; | |||
if(secure) { | |||
httpClient = await getOauth2Client(); | |||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||
headers["Authorization"] = | |||
"bearer ${tokenRestData.accessToken}"; | |||
} | |||
else { | |||
httpClient = http; | |||
} | |||
if (timeout) | |||
response = await httpClient.put( | |||
Uri.parse(url), headers: headers, | |||
body: json.encode(jsonData)).timeout( | |||
const Duration(seconds: 10)); | |||
else | |||
response = await http.post( | |||
response = await httpClient.put( | |||
Uri.parse(url), headers: {'Content-type': 'application/json'}, | |||
body: json.encode(jsonData)); | |||
if(response.statusCode == 403) tokenValidity = false; | |||
if(htmlErrorTitle(response.body.toString())!=""){ | |||
return {"STATUS":(response.statusCode != 200)?0:1,"DATA":htmlErrorTitle(response.body.toString())}; | |||
} | |||
final Map data = decoder.convert(response.body); | |||
try{data["DATA"] = decoder.convert(data["DATA"]);}catch(e){} | |||
return data; | |||
} on TimeoutException catch(e){ | |||
return {"STATUS":0,"DATA":"Request Timeout"}; | |||
@@ -38,7 +142,7 @@ class Util{ | |||
else{ | |||
useLocal = true; | |||
http = IOClient(HttpClient(context: clientContext)); | |||
return await JsonDataPostRaw(jsonData, url,timeout:timeout); | |||
return await JsonDataPostRaw(jsonData, url,timeout:timeout,secure: secure); | |||
} | |||
} | |||
@@ -49,6 +153,33 @@ class Util{ | |||
} | |||
} | |||
htmlErrorTitle(String html){ | |||
try{ | |||
if(html.contains('<title>')) { | |||
String titleElement = html.substring(html.indexOf("<title>")+7,html.indexOf("<\/title>")); | |||
return titleElement; | |||
} | |||
else return ''; | |||
} | |||
catch(e){ | |||
return ''; | |||
} | |||
} | |||
initRest()async{ | |||
try{ | |||
if(prefs.getString(keyClass.client_credential)==null){ | |||
prefs.setString(keyClass.client_credential, json.encode({ | |||
"id": "IZ4W8u8YZmLtUV0p1zd-_A..", | |||
"secret" : "AQ16v4bzGWm9AsWHvUcu2Q.." | |||
}).toString()); | |||
} | |||
return await getOauth2Client(); | |||
} | |||
catch(e){ | |||
print(e); | |||
print("error fetching Rest token"); | |||
} | |||
} | |||
showLoading(context,{dissmissable=false,onwillpop}){ | |||
showDialog( | |||
context: context, | |||
@@ -5,7 +5,10 @@ import 'dart:typed_data'; | |||
import 'package:http/io_client.dart'; | |||
import 'package:path_provider/path_provider.dart'; | |||
import 'package:http/http.dart'; | |||
import 'package:unitstocks/Util/Prefs.dart'; | |||
import '../main.dart'; | |||
import 'package:oauth2/oauth2.dart' as oauth2; | |||
class file_Trans_Handler { | |||
// double _progress = 0; | |||
@@ -17,32 +20,54 @@ class file_Trans_Handler { | |||
StreamController _progress = new StreamController<double>(); | |||
Stream<double> get progress =>_progress.stream; | |||
bool useLocal = false; | |||
var httpClient; | |||
downloadFile(String fileName,String link) async { | |||
StreamedResponse _response; | |||
List<int> _bytes = []; | |||
int _total = 0; | |||
httpClient = await util.getOauth2Client(); | |||
print('Start Download'); | |||
_progress.add(null); | |||
try { | |||
Request req = new Request('GET', Uri.parse(link)); | |||
// req.headers = ''; | |||
_response = await http.send(req).timeout( | |||
_response = await httpClient.send(req).timeout( | |||
Duration(seconds: 20)); | |||
// _response = await client.get('$link',headers: 'application/json') | |||
_total = _response.contentLength; | |||
print('${_total / 1024} KB'); | |||
if(_response.statusCode==200){ | |||
_total = _response.contentLength?? int.parse(_response.headers['file-size']); | |||
} | |||
// print('${_total / 1024} KB'); | |||
_error = ''; | |||
dlulStream = _response.stream.listen((value) { | |||
_bytes.addAll(value); | |||
_progress.add(((_bytes.length / _total))); | |||
if(_response.statusCode==200){ | |||
_bytes.addAll(value); | |||
_progress.add(((_bytes.length / _total))); | |||
} | |||
else{ | |||
String resString = utf8.decode(value); | |||
if(util.htmlErrorTitle(resString)!=""){ | |||
_error = util.htmlErrorTitle(resString); | |||
} | |||
_error = resString; | |||
} | |||
}) | |||
..onDone(() async { | |||
_progress.add(0.0); | |||
print('Finish Download'); | |||
final file = File( | |||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | |||
await file.writeAsBytes(_bytes); | |||
_path = file.path; | |||
if(_error==''){ | |||
_progress.add(0.0); | |||
print('Finish Download'); | |||
final file = File( | |||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | |||
await file.writeAsBytes(_bytes); | |||
_path = file.path; | |||
} | |||
else{ | |||
print('Error Download, $_error'); | |||
_progress.add(-1.0); | |||
} | |||
}) | |||
..onError((e) async { | |||
print('Error Download, $e'); | |||
@@ -70,18 +95,27 @@ class file_Trans_Handler { | |||
} | |||
uploadFile(String fileName,String link,String company,String cabang_id) async{ | |||
httpClient = await util.getOauth2Client(); | |||
oauth2.Credentials tokenRestData = oauth2.Credentials.fromJson(prefs.getString(keyClass.rest_data)); | |||
final file = File( | |||
"${(await getApplicationDocumentsDirectory()).path}/$fileName"); | |||
String mimeType = 'application/vnd.sqlite3'; | |||
if(file.existsSync()){ | |||
Uint8List byte = file.readAsBytesSync(); | |||
// print("file size ${file.lengthSync()/1024}"); | |||
try{ | |||
var _reponse = await http.post( | |||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | |||
body: json.encode({"byte":byte,"cabangId":cabang_id,"company":company})); | |||
var _response = await httpClient.put( | |||
Uri.parse(link), headers: {"cabangId":cabang_id,"company":company,'Content-type': mimeType,'Authorization':'Bearer ${tokenRestData.accessToken}'}, | |||
body: byte); | |||
print('File send ${file.lengthSync()/1024} KB'); | |||
final Map data = JsonDecoder().convert(_reponse.body); | |||
// print(_reponse.body); | |||
if(_response.statusCode!=200){ | |||
if(util.htmlErrorTitle(_response.body.toString())!=""){ | |||
return {"STATUS":0,"DATA":util.htmlErrorTitle(_response.body.toString())}; | |||
} | |||
throw _response.body.toString(); | |||
} | |||
final Map data = JsonDecoder().convert(_response.body); | |||
// print(_response.body); | |||
// if(data['STATUS']==1){ | |||
// return {"STATUS":1,"DATA":'File send ${file.lengthSync()/1024} KB'}; | |||
// } | |||
@@ -110,11 +144,12 @@ class file_Trans_Handler { | |||
} | |||
unPackDb(String link,String company,String cabang_id,String dbPath) async{ | |||
try{ | |||
var _reponse = await http.post( | |||
var _response = await http.post( | |||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | |||
body: json.encode({"cabangId":cabang_id,"company":company,"dbPath":dbPath})); | |||
final Map data = JsonDecoder().convert(_reponse.body); | |||
final Map data = JsonDecoder().convert(_response.body); | |||
return data; | |||
} | |||
on HandshakeException catch(e){ | |||
@@ -135,10 +170,10 @@ class file_Trans_Handler { | |||
submitDb(String link,String company,String stock_id) async{ | |||
try{ | |||
var _reponse = await http.post( | |||
var _response = await http.post( | |||
Uri.parse(link), headers: {'Content-type': 'application/json'}, | |||
body: json.encode({"stockTakingId":stock_id,"company":company})); | |||
final Map data = JsonDecoder().convert(_reponse.body); | |||
final Map data = JsonDecoder().convert(_response.body); | |||
return data; | |||
} | |||
on HandshakeException catch(e){ | |||
@@ -156,20 +191,21 @@ class file_Trans_Handler { | |||
return {"STATUS":0,"DATA":'Request timeout. Make sure server is up and running'}; | |||
} | |||
} | |||
// apex rest blm support multipart | |||
uploadMultipart(String fileName,String link)async{ | |||
httpClient = await util.getOauth2Client(); | |||
StreamedResponse _response; | |||
List<int> _bytes = []; | |||
int _total = 0; | |||
try{ | |||
var request = MultipartRequest('POST', Uri.parse(link)); | |||
var request = MultipartRequest('PUT', Uri.parse(link)); | |||
request.files.add( | |||
await MultipartFile.fromPath( | |||
'picture', | |||
"${(await getApplicationDocumentsDirectory()).path}/$fileName" | |||
) | |||
); | |||
_response = await http.send(request); | |||
_response = await httpClient.send(request); | |||
_total = File("${(await getApplicationDocumentsDirectory()).path}/$fileName").lengthSync(); | |||
dlulStream = _response.stream.listen((value) { | |||
_bytes.addAll(value); | |||
@@ -105,14 +105,17 @@ class _HomePageState extends State<HomePage> { | |||
loadState()async{ | |||
String company = prefs.getString(keyClass.company); | |||
if(prefs.getString(keyClass.stock_id) == null) | |||
{ | |||
valueTab value = await DBHelper.database.getValue(keyClass.stock_id); | |||
await prefs.setString(keyClass.stock_id, value.value); | |||
} | |||
String stock_taking_id = prefs.getString(keyClass.stock_id); | |||
if(company!=null&&stock_taking_id!=null){ | |||
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getStateStockUnit'); | |||
print(result); | |||
var result = await util.JsonDataPostRaw({"company":company,"stockTakingId":stock_taking_id}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/state/'); | |||
if(result['STATUS']==1){ | |||
setState(() { | |||
state = result['DATA']['STATE']; | |||
state = result['DATA']; | |||
}); | |||
} | |||
} | |||
@@ -129,7 +132,7 @@ class _HomePageState extends State<HomePage> { | |||
changeCabang(context)async{ | |||
util.showLoading(context); | |||
var result = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.user_id)}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getCabangByUser'); | |||
var result = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/user/cabangs/'); | |||
Navigator.pop(context); | |||
if(result['STATUS']==1){ | |||
var selected = prefs.getString(keyClass.cabang_id)??result['DATA'][0]["RETURN_VALUE"]; | |||
@@ -472,7 +475,7 @@ class _HomePageState extends State<HomePage> { | |||
}, | |||
onSelected: (value)async{ | |||
if(value == 'hostChange'){ | |||
hostAddress.text = prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'; | |||
hostAddress.text = prefs.getString(keyClass.hostAddress); | |||
await showDialog(context: context,builder: (context)=> | |||
Material( | |||
color: Colors.white.withOpacity(0.9), | |||
@@ -533,7 +536,7 @@ class _HomePageState extends State<HomePage> { | |||
contentPadding: EdgeInsets.all(8), | |||
), | |||
onSubmitted: (value){ | |||
prefs.setString(keyClass.hostAddress,(value=='')?'https://unitstocksbackend.thamringroup.web.id':value); | |||
prefs.setString(keyClass.hostAddress,(value=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':value); | |||
Navigator.pop(context); | |||
}, | |||
), | |||
@@ -549,7 +552,7 @@ class _HomePageState extends State<HomePage> { | |||
TextButton( | |||
child: Text('OK',style: TextStyle(color: Colors.indigo),), | |||
onPressed: (){ | |||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://unitstocksbackend.thamringroup.web.id':hostAddress.text); | |||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':hostAddress.text); | |||
Navigator.pop(context); | |||
}, | |||
) | |||
@@ -593,7 +596,7 @@ class _HomePageState extends State<HomePage> { | |||
if(value == 'logout'){ | |||
prefs.remove(keyClass.cabang_id); | |||
prefs.remove(keyClass.company); | |||
prefs.remove(keyClass.user_id); | |||
prefs.remove(keyClass.loginId); | |||
prefs.setBool(keyClass.logged_in, false); | |||
Navigator.pushNamed(context, '/login'); | |||
} | |||
@@ -678,7 +681,8 @@ class _HomePageState extends State<HomePage> { | |||
print('fetching'); | |||
util.showLoading(context); | |||
file_Trans_Handler trans = new file_Trans_Handler(); | |||
trans.downloadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getSqliteDb/${prefs.getString(keyClass.company)}/${prefs.getString(keyClass.cabang_id)}"); | |||
// trans.downloadFile('UnitStocking.db',"http://172.16.1.8:14002/getSqliteDbtest/TBS/02"); | |||
trans.downloadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)}/stock_taking/get_units/${prefs.getString(keyClass.company)}/${prefs.getString(keyClass.cabang_id)}"); | |||
progressDLStream = trans.progress.listen((value)async { | |||
if(progressDL==null) { | |||
// print(['test',value]); | |||
@@ -810,7 +814,7 @@ class _HomePageState extends State<HomePage> { | |||
popped = true; | |||
return true; | |||
}); | |||
var upload = await trans.uploadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/uploadSqlitedb",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id)); | |||
var upload = await trans.uploadFile('UnitStocking.db',"${prefs.getString(keyClass.hostAddress)}/stock_taking/upload/",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id)); | |||
if(!popped){ | |||
Navigator.pop(context); | |||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | |||
@@ -845,7 +849,7 @@ class _HomePageState extends State<HomePage> { | |||
children: <Widget>[ | |||
Container( | |||
alignment: (progressUL!=null)?Alignment.bottomCenter:Alignment.bottomLeft, | |||
padding: EdgeInsets.only(left: 10,right: 10,top: 10,bottom: 15), | |||
padding: EdgeInsets.only(left: 10,right: 10,top: 10,bottom: 0), | |||
child: (progressUL!=null)?Column( | |||
mainAxisSize: MainAxisSize.min, | |||
children: <Widget>[ | |||
@@ -926,11 +930,10 @@ class _HomePageState extends State<HomePage> { | |||
)); | |||
if(result){ | |||
util.showLoading(context); | |||
file_Trans_Handler trans = new file_Trans_Handler(); | |||
var upload = await trans.unPackDb("${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/unpackDb",prefs.getString(keyClass.company),prefs.getString(keyClass.cabang_id),prefs.getString(keyClass.targetProccess)); | |||
var unpack = await util.JsonDataPutRaw({"cabangId":prefs.getString(keyClass.cabang_id),"company":prefs.getString(keyClass.company),"dbPath":prefs.getString(keyClass.targetProccess)}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/add_collection/'); | |||
Navigator.pop(context); | |||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | |||
if(upload['STATUS']==1){ | |||
util.showFlushbar(context, unpack['DATA'],color:(unpack['STATUS']!=1)?Colors.red:Colors.grey); | |||
if(unpack['STATUS']==1){ | |||
prefs.remove(keyClass.targetProccess); | |||
prefs.setBool(keyClass.submitProccess,true); | |||
} | |||
@@ -989,11 +992,15 @@ class _HomePageState extends State<HomePage> { | |||
)); | |||
if(result){ | |||
util.showLoading(context); | |||
file_Trans_Handler trans = new file_Trans_Handler(); | |||
var upload = await trans.submitDb("${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/submitStock",prefs.getString(keyClass.company),prefs.getString(keyClass.stock_id)); | |||
if(prefs.getString(keyClass.stock_id) == null) | |||
{ | |||
valueTab value = await DBHelper.database.getValue(keyClass.stock_id); | |||
await prefs.setString(keyClass.stock_id, value.value); | |||
} | |||
var submits = await util.JsonDataPostRaw({"stockTakingId":prefs.getString(keyClass.stock_id),"company":prefs.getString(keyClass.company),"user_id":prefs.getString(keyClass.loginId)}, '${prefs.getString(keyClass.hostAddress)}/stock_taking/submit/'); | |||
Navigator.pop(context); | |||
util.showFlushbar(context, upload['DATA'],color:(upload['STATUS']!=1)?Colors.red:Colors.grey); | |||
if(upload['STATUS']==1){ | |||
util.showFlushbar(context, submits['DATA'],color:(submits['STATUS']!=1)?Colors.red:Colors.grey); | |||
if(submits['STATUS']==1){ | |||
loadState(); | |||
prefs.remove(keyClass.submitProccess); | |||
} | |||
@@ -1,5 +1,4 @@ | |||
import 'dart:io'; | |||
import 'package:flutter/cupertino.dart'; | |||
import 'package:flutter/material.dart'; | |||
import 'main.dart'; | |||
@@ -23,12 +22,12 @@ class _LoginPageState extends State<LoginPage> { | |||
Login()async{ | |||
util.showLoading(context); | |||
var result = await util.JsonDataPostRaw({"User":userCon.text,"Pass":passCon.text}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/login'); | |||
var result = await util.JsonDataPostRaw({"User":userCon.text,"Pass":passCon.text}, '${prefs.getString(keyClass.hostAddress)}/user//login/'); | |||
if(result['STATUS']==1){ | |||
prefs.setString(keyClass.user_id, result['DATA'][keyClass.user_id]); | |||
prefs.setString(keyClass.company, result['DATA'][keyClass.company]); | |||
prefs.setString(keyClass.loginId, result['DATA'][keyClass.loginId.toLowerCase()]); | |||
prefs.setString(keyClass.company, result['DATA'][keyClass.company.toLowerCase()]); | |||
prefs.setBool(keyClass.logged_in, true); | |||
var cabangList = await util.JsonDataPostRaw({"company":prefs.getString(keyClass.company),"User":prefs.getString(keyClass.user_id)}, '${prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'}/getCabangByUser'); | |||
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']; | |||
@@ -82,7 +81,7 @@ class _LoginPageState extends State<LoginPage> { | |||
prefs.setBool(keyClass.logged_in, false); | |||
prefs.remove(keyClass.cabang_id); | |||
prefs.remove(keyClass.company); | |||
prefs.remove(keyClass.user_id); | |||
prefs.remove(keyClass.loginId); | |||
}); | |||
} | |||
return false; | |||
@@ -104,13 +103,13 @@ class _LoginPageState extends State<LoginPage> { | |||
flex: 3, | |||
child: InkWell( | |||
onLongPress: ()async{ | |||
hostAddress.text = prefs.getString(keyClass.hostAddress)??'https://unitstocksbackend.thamringroup.web.id'; | |||
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://unitstocksbackend.thamringroup.web.id':value); | |||
prefs.setString(keyClass.hostAddress,(value=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':value); | |||
Navigator.pop(context); | |||
}, | |||
), | |||
@@ -118,7 +117,7 @@ class _LoginPageState extends State<LoginPage> { | |||
TextButton( | |||
child: Text('OK'), | |||
onPressed: (){ | |||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://unitstocksbackend.thamringroup.web.id':hostAddress.text); | |||
prefs.setString(keyClass.hostAddress,(hostAddress.text=='')?'https://tbg.thamringroup.web.id/ords/tbs/unit/v1':hostAddress.text); | |||
Navigator.pop(context); | |||
}, | |||
) | |||
@@ -306,7 +305,7 @@ class _LoginPageState extends State<LoginPage> { | |||
prefs.setBool(keyClass.logged_in, false); | |||
prefs.remove(keyClass.cabang_id); | |||
prefs.remove(keyClass.company); | |||
prefs.remove(keyClass.user_id); | |||
prefs.remove(keyClass.loginId); | |||
}); | |||
}, | |||
child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | |||
@@ -334,7 +333,7 @@ class _LoginPageState extends State<LoginPage> { | |||
// prefs.setBool(keyClass.logged_in, false); | |||
// prefs.remove(keyClass.cabang_id); | |||
// prefs.remove(keyClass.company); | |||
// prefs.remove(keyClass.user_id); | |||
// prefs.remove(keyClass.loginId); | |||
// }); | |||
// return false; | |||
// }, | |||
@@ -424,7 +423,7 @@ class _LoginPageState extends State<LoginPage> { | |||
// prefs.setBool(keyClass.logged_in, false); | |||
// prefs.remove(keyClass.cabang_id); | |||
// prefs.remove(keyClass.company); | |||
// prefs.remove(keyClass.user_id); | |||
// prefs.remove(keyClass.loginId); | |||
// }); | |||
// }, | |||
// child: Text('Cancel',style: TextStyle(color: Colors.indigo)), | |||
@@ -31,6 +31,8 @@ void main() async{ | |||
WidgetsFlutterBinding.ensureInitialized(); | |||
prefs = await SharedPreferences.getInstance(); | |||
await registerCert(); | |||
if( prefs.getString(keyClass.hostAddress) ==null)await prefs.setString(keyClass.hostAddress, "https://tbg.thamringroup.web.id/ords/tbs/unit/v1"); | |||
await prefs.setString(keyClass.restTokenAddress, "https://tbg.thamringroup.web.id/ords/tbs/oauth/token"); | |||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) | |||
.then((_) { | |||
runApp(new MyApp()); | |||
@@ -7,14 +7,14 @@ packages: | |||
name: archive | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.13" | |||
version: "3.1.5" | |||
args: | |||
dependency: transitive | |||
description: | |||
name: args | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "1.6.0" | |||
version: "2.3.0" | |||
async: | |||
dependency: transitive | |||
description: | |||
@@ -64,13 +64,6 @@ packages: | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "1.15.0" | |||
convert: | |||
dependency: transitive | |||
description: | |||
name: convert | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.1" | |||
cross_file: | |||
dependency: transitive | |||
description: | |||
@@ -84,7 +77,7 @@ packages: | |||
name: crypto | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.4" | |||
version: "3.0.1" | |||
cupertino_icons: | |||
dependency: "direct main" | |||
description: | |||
@@ -138,7 +131,7 @@ packages: | |||
name: flutter_launcher_icons | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.7.5" | |||
version: "0.9.2" | |||
flutter_plugin_android_lifecycle: | |||
dependency: transitive | |||
description: | |||
@@ -176,7 +169,7 @@ packages: | |||
name: image | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.12" | |||
version: "3.0.8" | |||
image_picker: | |||
dependency: "direct main" | |||
description: | |||
@@ -247,6 +240,13 @@ packages: | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "1.7.0" | |||
oauth2: | |||
dependency: "direct main" | |||
description: | |||
name: oauth2 | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.0" | |||
path: | |||
dependency: transitive | |||
description: | |||
@@ -309,7 +309,7 @@ packages: | |||
name: petitparser | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.4.0" | |||
version: "4.3.0" | |||
photo_view: | |||
dependency: "direct main" | |||
description: | |||
@@ -489,14 +489,14 @@ packages: | |||
name: xml | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "3.6.1" | |||
version: "5.3.0" | |||
yaml: | |||
dependency: transitive | |||
description: | |||
name: yaml | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.2.1" | |||
version: "3.1.0" | |||
sdks: | |||
dart: ">=2.14.0 <3.0.0" | |||
flutter: ">=2.5.0" |
@@ -1,7 +1,7 @@ | |||
name: unitstocks | |||
description: App to stock Thamrin Brothers Units | |||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | |||
version: 1.0.3+6 | |||
version: 1.0.4+7 | |||
environment: | |||
sdk: ">=2.1.0 <3.0.0" | |||
@@ -27,6 +27,7 @@ dependencies: | |||
# app_settings: | |||
# autocomplete_textfield: | |||
barcode_scan: ^3.0.1 | |||
oauth2: ^2.0.0 | |||
dev_dependencies: | |||