From 1e8ba4190fe6356f554bae412adf768298e9973a Mon Sep 17 00:00:00 2001 From: jefry Date: Wed, 13 Oct 2021 13:47:21 +0700 Subject: [PATCH] release ready --- lib/Util/Prefs.dart | 3 + lib/Util/Util.dart | 143 ++++++++++++++++++++++++++++++++-- lib/Util/download_Upload_Handler.dart | 82 +++++++++++++------ lib/home_page.dart | 47 ++++++----- lib/login_page.dart | 23 +++--- lib/main.dart | 2 + pubspec.lock | 30 +++---- pubspec.yaml | 3 +- 8 files changed, 256 insertions(+), 77 deletions(-) diff --git a/lib/Util/Prefs.dart b/lib/Util/Prefs.dart index 7295e3d..7f1317d 100644 --- a/lib/Util/Prefs.dart +++ b/lib/Util/Prefs.dart @@ -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'; diff --git a/lib/Util/Util.dart b/lib/Util/Util.dart index be42ba1..1d63e17 100644 --- a/lib/Util/Util.dart +++ b/lib/Util/Util.dart @@ -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('')) { + 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, diff --git a/lib/Util/download_Upload_Handler.dart b/lib/Util/download_Upload_Handler.dart index cec02a5..f3d54ab 100644 --- a/lib/Util/download_Upload_Handler.dart +++ b/lib/Util/download_Upload_Handler.dart @@ -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); diff --git a/lib/home_page.dart b/lib/home_page.dart index 7fa4941..ea87924 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -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); } diff --git a/lib/login_page.dart b/lib/login_page.dart index 61585ab..c8e2912 100644 --- a/lib/login_page.dart +++ b/lib/login_page.dart @@ -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)), diff --git a/lib/main.dart b/lib/main.dart index 53f20db..cfa9a6b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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()); diff --git a/pubspec.lock b/pubspec.lock index cb8a54a..ab6344b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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" diff --git a/pubspec.yaml b/pubspec.yaml index ba6cad1..686471f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: