Kaynağa Gözat

release ready

master
jefry 3 yıl önce
ebeveyn
işleme
1e8ba4190f
8 değiştirilmiş dosya ile 256 ekleme ve 77 silme
  1. +3
    -0
      lib/Util/Prefs.dart
  2. +137
    -6
      lib/Util/Util.dart
  3. +59
    -23
      lib/Util/download_Upload_Handler.dart
  4. +27
    -20
      lib/home_page.dart
  5. +11
    -12
      lib/login_page.dart
  6. +2
    -0
      lib/main.dart
  7. +15
    -15
      pubspec.lock
  8. +2
    -1
      pubspec.yaml

+ 3
- 0
lib/Util/Prefs.dart Dosyayı Görüntüle

@@ -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';


+ 137
- 6
lib/Util/Util.dart Dosyayı Görüntüle

@@ -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,


+ 59
- 23
lib/Util/download_Upload_Handler.dart Dosyayı Görüntüle

@@ -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);


+ 27
- 20
lib/home_page.dart Dosyayı Görüntüle

@@ -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);
}


+ 11
- 12
lib/login_page.dart Dosyayı Görüntüle

@@ -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)),


+ 2
- 0
lib/main.dart Dosyayı Görüntüle

@@ -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());


+ 15
- 15
pubspec.lock Dosyayı Görüntüle

@@ -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"

+ 2
- 1
pubspec.yaml Dosyayı Görüntüle

@@ -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:


Yükleniyor…
İptal
Kaydet