@@ -8,6 +8,8 @@ | |||
<uses-permission android:name="android.permission.INTERNET"/> | |||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> | |||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> | |||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | |||
<application | |||
android:name="io.flutter.app.FlutterApplication" | |||
android:label="unitstocks" | |||
@@ -1,11 +1,13 @@ | |||
import 'dart:async'; | |||
import 'dart:io' as io; | |||
import 'dart:typed_data'; | |||
import 'UnitModel.dart'; | |||
import 'package:path/path.dart'; | |||
import 'package:path_provider/path_provider.dart'; | |||
import 'package:sqflite/sqflite.dart'; | |||
import 'Prefs.dart'; | |||
import '../main.dart'; | |||
import 'package:permission_handler/permission_handler.dart' as pHandler; | |||
class DBHelper { | |||
DBHelper._(); | |||
@@ -15,18 +17,45 @@ class DBHelper { | |||
Future<Database> get db async { | |||
if (_db == null) _db = await initDb(); | |||
return _db; | |||
} | |||
backupDb() async{ | |||
try{ | |||
//backupDatabase | |||
String backupPath = join(_db.path.substring(0,_db.path.indexOf("/Android"))+"/Download/UnitDBBackup/", "${prefs.getString(keyClass.stock_id)}_UnitStocking.db"); | |||
io.File dbFile = io.File(_db.path); | |||
dbFile.copySync(backupPath); | |||
// if(dbPath == null || dbPath == ''){ | |||
final database = await db; | |||
var dbPath = database.path; | |||
await DBHelper.database.closeDb(); | |||
// } | |||
await prefs.remove(keyClass.backup_stock_id); | |||
var stock_id = prefs.getString(keyClass.stock_id)??''; | |||
if(stock_id != ''){ | |||
var cabang = prefs.getString(keyClass.cabang_id)??''; | |||
if(cabang !='' && cabang != null ) await prefs.setString(keyClass.backup_cabang_id,cabang); | |||
if(stock_id !='' && stock_id != null ) await prefs.setString(keyClass.backup_stock_id,stock_id); | |||
//backupDatabase | |||
String backupPath = join(dbPath.substring(0,dbPath.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | |||
io.File backupFile = new io.File(backupPath); | |||
io.File dbFile = io.File(dbPath); | |||
if(dbFile.existsSync()){ | |||
// dbFile.copySync(backupPath); | |||
Uint8List byte = dbFile.readAsBytesSync(); | |||
backupFile.writeAsBytesSync(byte); | |||
return {"STATUS":1,"MSG":"Backup Berhasil!"}; | |||
} | |||
else{ | |||
return {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||
print('file backup dont exist tho'); | |||
} | |||
} | |||
else{ | |||
return {"STATUS":0,"MSG":"Backup gagal data unit tidak ditemukan!"}; | |||
} | |||
} | |||
catch(e){ | |||
print(e); | |||
return {"STATUS":0,"MSG":"Backup gagal!"}; | |||
} | |||
return _db; | |||
} | |||
initDb() async { | |||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | |||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||
@@ -35,22 +64,37 @@ class DBHelper { | |||
} | |||
restoreDb()async{ | |||
await closeDb(); | |||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | |||
String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download/UnitDBBackup/", "${prefs.getString(keyClass.stock_id)}_UnitStocking.db"); | |||
io.File backupdbFile = io.File(backupPath); | |||
if(backupdbFile.existsSync()){ | |||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||
backupdbFile.copySync(path); | |||
return {"STATUS":1,"MSG":"File Back up successfull"}; | |||
var result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||
if(prefs.getString(keyClass.stock_id) == null || prefs.getString(keyClass.stock_id) == prefs.getString(keyClass.backup_cabang_id)){ | |||
if(prefs.getString(keyClass.backup_stock_id)!=null && prefs.getString(keyClass.backup_cabang_id)!= null){ | |||
await util.permissionCheck(context,pHandler.Permission.storage,()async{ | |||
io.Directory documentsDirectory = await getExternalStorageDirectory(); | |||
String backupPath = join(documentsDirectory.path.substring(0,documentsDirectory.path.indexOf("/Android"))+"/Download", "${prefs.getString(keyClass.backup_stock_id)}_UnitStocking.db"); | |||
io.File backupdbFile = io.File(backupPath); | |||
if(backupdbFile.existsSync()){ | |||
io.File dbFile = new io.File(join(documentsDirectory.path, "UnitStocking.db")); | |||
Uint8List byte = backupdbFile.readAsBytesSync(); | |||
dbFile.writeAsBytesSync(byte); | |||
result = {"STATUS":1,"MSG":"File Back up successfull"}; | |||
await DBHelper.database.closeDb(); | |||
} | |||
else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||
},customMessage: " untuk menyimpan data backup"); | |||
} | |||
} | |||
return {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||
else result = {"STATUS":0,"MSG":"File Backup tidak ditemukan!"}; | |||
return result; | |||
} | |||
closeDb() async { | |||
final database = await db; | |||
await database.close(); | |||
_db = null; | |||
try{ | |||
Database database = await db; | |||
if(database.isOpen) await database.close(); | |||
_db = null; | |||
} | |||
catch(e){ | |||
_db = null; | |||
} | |||
} | |||
_onCreate(Database db, int version) async { | |||
@@ -266,9 +310,11 @@ class DBHelper { | |||
try{ | |||
final database = await db; | |||
var res = await database.query(tableName.values,where: "${columnName.name} = ?",whereArgs: [value]); | |||
var res2 = await database.query(tableName.values); | |||
return res.isEmpty?null:valueTab.fromJson(res.first); | |||
} | |||
catch(e){ | |||
print(e); | |||
return null; | |||
} | |||
} | |||
@@ -307,7 +353,6 @@ class DBHelper { | |||
newValue.name, | |||
newValue.value | |||
]); | |||
print('Row Inserted'); | |||
return res; | |||
} | |||
catch(e){ | |||
@@ -12,6 +12,9 @@ class keyClass{ | |||
static String targetProccess = 'dbPath'; | |||
static String submitProccess = 'SUBMIT'; | |||
static String stock_id = 'STOCK_TAKING_UNIT_ID'; | |||
static String backup_stock_id = 'BACKUP_STOCK_TAKING_UNIT_ID'; | |||
static String backup_cabang_id = 'BACKUP_CABANG_ID'; | |||
static String client_credential = 'CLIENT_CREDENTIAL'; | |||
static String rest_data = 'REST_DATA'; | |||
static String tgl_start = 'TGL_START'; | |||
@@ -16,6 +16,7 @@ import 'package:intl/intl.dart'; | |||
import 'main.dart'; | |||
import 'Util/Prefs.dart'; | |||
import 'Util/UnitModel.dart'; | |||
import 'package:permission_handler/permission_handler.dart' as pHandler; | |||
class HomePage extends StatefulWidget { | |||
// HomePage({Key key}) : super(key: key); | |||
@@ -36,7 +37,7 @@ class _HomePageState extends State<HomePage> { | |||
String state = ''; | |||
final hostAddress = new TextEditingController(); | |||
clearData(context)async{ | |||
clearData(context,{backup=true})async{ | |||
setState(() { | |||
progressDL = null; | |||
isLoading = false; | |||
@@ -56,40 +57,31 @@ class _HomePageState extends State<HomePage> { | |||
onPressed: ()async{ | |||
util.showLoading(context); | |||
await Future.sync(()async{ | |||
await prefs.remove(keyClass.lastDownload); | |||
await prefs.remove(keyClass.lastUpload); | |||
await prefs.remove(keyClass.targetProccess); | |||
await prefs.remove(keyClass.submitProccess); | |||
await prefs.remove(keyClass.stock_id); | |||
setState(() { | |||
lastUpload = ''; | |||
lastDownload = ''; | |||
timeString = ''; | |||
}); | |||
// var result = await DBHelper.database.deleteAll(); | |||
// if(result!=null) { | |||
// await DBHelper.database.closeDb(); | |||
// if(result!=null){ | |||
try{ | |||
Directory documentsDirectory = await getExternalStorageDirectory(); | |||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||
File db = File(path); | |||
if(db.existsSync()){ | |||
await DBHelper.database.closeDb(); | |||
//auto backup | |||
// if(backup)await DBHelper.database.backupDb(context); | |||
db.deleteSync(); | |||
await prefs.remove(keyClass.lastDownload); | |||
await prefs.remove(keyClass.lastUpload); | |||
await prefs.remove(keyClass.targetProccess); | |||
await prefs.remove(keyClass.submitProccess); | |||
await prefs.remove(keyClass.stock_id); | |||
setState(() { | |||
lastUpload = ''; | |||
lastDownload = ''; | |||
timeString = ''; | |||
}); | |||
} | |||
} | |||
catch(e){ | |||
print(e); | |||
util.showFlushbar(context, 'Failed to delete database file',color: Colors.red); | |||
} | |||
// } | |||
// else{ | |||
// errMsg = 'Failed to clear unit data'; | |||
// } | |||
// } | |||
// else{ | |||
// errMsg = 'Failed to clear unit data'; | |||
// } | |||
}); | |||
Navigator.pop(context); | |||
Navigator.pop(context,true); | |||
@@ -133,6 +125,7 @@ class _HomePageState extends State<HomePage> { | |||
lastUpload = prefs.getString(keyClass.lastUpload)??''; | |||
WidgetsBinding.instance.addPostFrameCallback((_) async { | |||
await _check_Update(); | |||
await util.permissionCheck(context,pHandler.Permission.storage,()async{print("storage permit granted!");},customMessage: " untuk menyimpan data backup"); | |||
}); | |||
} | |||
@@ -522,12 +515,22 @@ class _HomePageState extends State<HomePage> { | |||
), | |||
), | |||
PopupMenuItem( | |||
value:'backup', | |||
child: Row( | |||
children: <Widget>[ | |||
Icon(Icons.save,color: Colors.black,), | |||
SizedBox(width: 10,), | |||
Text('Backup Data') | |||
], | |||
), | |||
), | |||
PopupMenuItem( | |||
value:'restore', | |||
child: Row( | |||
children: <Widget>[ | |||
Icon(Icons.sync,color: Colors.black,), | |||
SizedBox(width: 10,), | |||
Text('Restore Backup') | |||
Text('Restore Data') | |||
], | |||
), | |||
), | |||
@@ -670,40 +673,71 @@ class _HomePageState extends State<HomePage> { | |||
prefs.setBool(keyClass.logged_in, false); | |||
Navigator.pushNamed(context, '/login'); | |||
} | |||
if(value == 'backup'){ | |||
var result = await DBHelper.database.backupDb(); | |||
util.showFlushbar(context, result['MSG'],color: result["STATUS"]==1?Colors.grey:Colors.red); | |||
} | |||
if(value == 'restore'){ | |||
await showDialog(context: context,builder: (context)=>AlertDialog( | |||
bool isRestore = await showDialog(context: context,builder: (context)=>AlertDialog( | |||
title: Text('Restore Data ?'), | |||
content: Text('Restore data akan menghapus dan mengganti data unit yang ada dengan data unit backup.'), | |||
content: Text('Restore data akan menghapus dan mengganti data unit dan cabang yang ada dengan data backup.'), | |||
actions: <Widget>[ | |||
TextButton( | |||
child: Text('Proceed'), | |||
onPressed: ()async{ | |||
util.showLoading(context); | |||
var result = await DBHelper.database.restoreDb(); | |||
if(result["STATUS"]==1){ | |||
await prefs.remove(keyClass.lastDownload); | |||
await prefs.remove(keyClass.lastUpload); | |||
await prefs.remove(keyClass.targetProccess); | |||
await prefs.remove(keyClass.submitProccess); | |||
setState(() { | |||
lastUpload = ''; | |||
lastDownload = ''; | |||
timeString = ''; | |||
}); | |||
valueTab value = await DBHelper.database.getValue(keyClass.tgl_start); | |||
if(value != null)await prefs.setString(keyClass.lastDownload, value.value); | |||
} | |||
util.showFlushbar(context, result["MSG"]); | |||
Navigator.pop(context); | |||
Navigator.pop(context); | |||
Navigator.pop(context,true); | |||
}, | |||
), | |||
TextButton( | |||
child: Text('Cancel'), | |||
onPressed: ()=>Navigator.pop(context), | |||
onPressed: ()=>Navigator.pop(context,false), | |||
) | |||
], | |||
)); | |||
if(isRestore??false){ | |||
var response; | |||
bool isclear; | |||
Directory documentsDirectory = await getExternalStorageDirectory(); | |||
String path = join(documentsDirectory.path, "UnitStocking.db"); | |||
File db = File(path); | |||
if(db.existsSync()){ | |||
isclear = await clearData(context,backup: false); | |||
} | |||
else{ | |||
isclear = true; | |||
} | |||
if(isclear??false){ | |||
var result = await DBHelper.database.restoreDb(); | |||
if(result["STATUS"]==1){ | |||
await prefs.remove(keyClass.lastDownload); | |||
await prefs.remove(keyClass.lastUpload); | |||
await prefs.remove(keyClass.targetProccess); | |||
await prefs.remove(keyClass.submitProccess); | |||
setState(() { | |||
lastUpload = ''; | |||
lastDownload = ''; | |||
timeString = ''; | |||
}); | |||
valueTab value = await DBHelper.database.getValue(keyClass.tgl_start); | |||
if(value != null)await prefs.setString(keyClass.lastDownload, DateFormat('dd-MM-yyyy HH:mm:ss').parse(value.value).toIso8601String()); | |||
else { | |||
await prefs.setString(keyClass.lastDownload, DateTime.now().toIso8601String()); | |||
} | |||
value = await DBHelper.database.getValue(keyClass.stock_id); | |||
if(value != null) await prefs.setString(keyClass.stock_id,value.value); | |||
else { | |||
await prefs.setString(keyClass.stock_id,prefs.getString(keyClass.backup_stock_id)); | |||
} | |||
await prefs.setString(keyClass.cabang_id,prefs.getString(keyClass.backup_cabang_id)); | |||
loadState(); | |||
setState(() { | |||
lastDownload = prefs.getString(keyClass.lastDownload); | |||
}); | |||
} | |||
response = result["MSG"]; | |||
} | |||
if(response != null)util.showFlushbar(context, response); | |||
} | |||
} | |||
}, | |||
), | |||
@@ -803,9 +837,9 @@ class _HomePageState extends State<HomePage> { | |||
lastDownload = DateTime.now().toIso8601String(); | |||
}); | |||
await prefs.setString(keyClass.lastDownload, lastDownload); | |||
await DBHelper.database.insertUpdateValue(new valueTab(name: 'TGL_START',value: DateFormat('dd-MM-yyyy HH:mm:ss').format(DateTime.parse(lastDownload)))); | |||
await DBHelper.database.insertUpdateValue(new valueTab(name: 'TGL_STOCK_TAKING',value: DateFormat('dd-MM-yyyy').format(DateTime.parse(lastDownload)))); | |||
await DBHelper.database.closeDb(); | |||
await DBHelper.database.insertUpdateValue(new valueTab(name: keyClass.tgl_start,value: DateFormat('dd-MM-yyyy HH:mm:ss').format(DateTime.parse(lastDownload)))); | |||
await DBHelper.database.insertUpdateValue(new valueTab(name: 'TGL_STOCK_TAKING',value: DateFormat('dd-MM-yyyy').format(DateTime.parse(lastDownload)))); | |||
util.showFlushbar(context,'Data downloaded'); | |||
loadState(); | |||
a.stop(); | |||
@@ -3,6 +3,7 @@ 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 { | |||
@@ -23,7 +24,7 @@ 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)}/user//login/'); | |||
if(result['STATUS']==1){ | |||
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()]); | |||
@@ -43,10 +44,17 @@ class _LoginPageState extends State<LoginPage> { | |||
} | |||
else{ | |||
Navigator.pop(context); | |||
util.showFlushbar(context, result['DATA'],color: Colors.red); | |||
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)){ | |||
@@ -11,7 +11,6 @@ import 'unit_details.dart'; | |||
import 'package:shared_preferences/shared_preferences.dart'; | |||
import 'package:location/location.dart'; | |||
import 'Util/Util.dart'; | |||
import 'package:flutter_logs/flutter_logs.dart'; | |||
SharedPreferences prefs; | |||
@@ -56,6 +55,7 @@ void main() async{ | |||
// logsExportDirectoryName: "MyLogs/Exported", | |||
// debugFileOperations: true, | |||
// isDebuggable: true); | |||
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]) | |||
.then((_) { | |||
runApp(new MyApp()); | |||
@@ -198,7 +198,39 @@ class _StockingState extends State<Stocking> with SingleTickerProviderStateMixin | |||
child:Stack( | |||
children: <Widget>[ | |||
Container( | |||
child: ListView.builder( | |||
alignment: Alignment.topRight, | |||
child: (unitsRef.isEmpty) | |||
? Container(padding: EdgeInsets.only(top: 10,left: 10,right: 10), | |||
child: Row( | |||
crossAxisAlignment: CrossAxisAlignment.start, | |||
mainAxisAlignment: MainAxisAlignment.spaceBetween, | |||
children: <Widget>[ | |||
Row( | |||
children: <Widget>[ | |||
Checkbox( | |||
value: completed, | |||
onChanged: (value)async{ | |||
setState(() { | |||
completed = value; | |||
}); | |||
await loadUnit(); | |||
}, | |||
), | |||
Text('Completed') | |||
], | |||
), | |||
(completed||hideAppbar)?Container():Row( | |||
mainAxisAlignment: MainAxisAlignment.end, | |||
children: <Widget>[ | |||
Text('Unit : ',style: TextStyle(color: Colors.grey,fontSize: 15),), | |||
Text('${(unitsRef.where((element) => element.flag=='TRUE').length==unitsRef.length)?'Done':'${unitsRef.length-unitsRef.where((element) => element.flag=='TRUE').length}'}',style: TextStyle(color: (unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?Colors.green:Colors.black,fontWeight: FontWeight.bold,fontSize: 16),), | |||
Text(!(unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?' of':'',style: TextStyle(color: Colors.grey,fontSize: 15),), | |||
Text(!(unitsRef.length==unitsRef.where((element) => element.flag=='TRUE').length)?' ${unitsRef.length}':'',style: TextStyle(color: Colors.black,fontSize: 16,fontWeight: FontWeight.bold,),), | |||
], | |||
), | |||
], | |||
),) | |||
:ListView.builder( | |||
padding: EdgeInsets.only(bottom: 10), | |||
itemCount: unitsRef.length, | |||
shrinkWrap: false, | |||
@@ -7,7 +7,7 @@ packages: | |||
name: archive | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "3.1.5" | |||
version: "3.2.1" | |||
args: | |||
dependency: transitive | |||
description: | |||
@@ -21,14 +21,14 @@ packages: | |||
name: async | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.8.1" | |||
version: "2.8.2" | |||
barcode_scan2: | |||
dependency: "direct main" | |||
description: | |||
name: barcode_scan2 | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "4.1.4" | |||
version: "4.2.0" | |||
boolean_selector: | |||
dependency: transitive | |||
description: | |||
@@ -42,7 +42,7 @@ packages: | |||
name: characters | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "1.1.0" | |||
version: "1.2.0" | |||
charcode: | |||
dependency: transitive | |||
description: | |||
@@ -70,7 +70,7 @@ packages: | |||
name: cross_file | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.3.1+5" | |||
version: "0.3.2" | |||
crypto: | |||
dependency: transitive | |||
description: | |||
@@ -84,7 +84,7 @@ packages: | |||
name: cupertino_icons | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.1.3" | |||
version: "1.0.4" | |||
fake_async: | |||
dependency: transitive | |||
description: | |||
@@ -138,14 +138,14 @@ packages: | |||
name: flutter_logs | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.4" | |||
version: "2.1.5" | |||
flutter_plugin_android_lifecycle: | |||
dependency: transitive | |||
description: | |||
name: flutter_plugin_android_lifecycle | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.3" | |||
version: "2.0.5" | |||
flutter_test: | |||
dependency: "direct dev" | |||
description: flutter | |||
@@ -176,35 +176,35 @@ packages: | |||
name: image | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "3.0.8" | |||
version: "3.1.3" | |||
image_picker: | |||
dependency: "direct main" | |||
description: | |||
name: image_picker | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.8.4+4" | |||
version: "0.8.4+9" | |||
image_picker_for_web: | |||
dependency: transitive | |||
description: | |||
name: image_picker_for_web | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.3" | |||
version: "2.1.6" | |||
image_picker_platform_interface: | |||
dependency: transitive | |||
description: | |||
name: image_picker_platform_interface | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.4.1" | |||
version: "2.4.4" | |||
in_app_update: | |||
dependency: "direct main" | |||
description: | |||
name: in_app_update | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.0" | |||
version: "3.0.0" | |||
intl: | |||
dependency: "direct main" | |||
description: | |||
@@ -246,7 +246,7 @@ packages: | |||
name: matcher | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.12.10" | |||
version: "0.12.11" | |||
meta: | |||
dependency: transitive | |||
description: | |||
@@ -281,14 +281,14 @@ packages: | |||
name: path_provider | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.7" | |||
version: "2.0.9" | |||
path_provider_android: | |||
dependency: transitive | |||
description: | |||
name: path_provider_android | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.9" | |||
version: "2.0.11" | |||
path_provider_ios: | |||
dependency: transitive | |||
description: | |||
@@ -302,35 +302,49 @@ packages: | |||
name: path_provider_linux | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.0" | |||
version: "2.1.5" | |||
path_provider_macos: | |||
dependency: transitive | |||
description: | |||
name: path_provider_macos | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.0.5" | |||
path_provider_platform_interface: | |||
dependency: transitive | |||
description: | |||
name: path_provider_platform_interface | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.1" | |||
version: "2.0.3" | |||
path_provider_windows: | |||
dependency: transitive | |||
description: | |||
name: path_provider_windows | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.3" | |||
version: "2.0.5" | |||
permission_handler: | |||
dependency: "direct main" | |||
description: | |||
name: permission_handler | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "8.3.0" | |||
version: "9.2.0" | |||
permission_handler_android: | |||
dependency: transitive | |||
description: | |||
name: permission_handler_android | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "9.0.2" | |||
permission_handler_apple: | |||
dependency: transitive | |||
description: | |||
name: permission_handler_apple | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "9.0.2" | |||
permission_handler_platform_interface: | |||
dependency: transitive | |||
description: | |||
@@ -338,13 +352,20 @@ packages: | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "3.7.0" | |||
permission_handler_windows: | |||
dependency: transitive | |||
description: | |||
name: permission_handler_windows | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.1.0" | |||
petitparser: | |||
dependency: transitive | |||
description: | |||
name: petitparser | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "4.3.0" | |||
version: "4.4.0" | |||
photo_view: | |||
dependency: "direct main" | |||
description: | |||
@@ -358,21 +379,21 @@ packages: | |||
name: platform | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "3.0.2" | |||
version: "3.1.0" | |||
plugin_platform_interface: | |||
dependency: transitive | |||
description: | |||
name: plugin_platform_interface | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.1.2" | |||
process: | |||
dependency: transitive | |||
description: | |||
name: process | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "4.2.3" | |||
version: "4.2.4" | |||
protobuf: | |||
dependency: transitive | |||
description: | |||
@@ -386,35 +407,35 @@ packages: | |||
name: shared_preferences | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.9" | |||
version: "2.0.13" | |||
shared_preferences_android: | |||
dependency: transitive | |||
description: | |||
name: shared_preferences_android | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.9" | |||
version: "2.0.11" | |||
shared_preferences_ios: | |||
dependency: transitive | |||
description: | |||
name: shared_preferences_ios | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.8" | |||
version: "2.1.0" | |||
shared_preferences_linux: | |||
dependency: transitive | |||
description: | |||
name: shared_preferences_linux | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.1.0" | |||
shared_preferences_macos: | |||
dependency: transitive | |||
description: | |||
name: shared_preferences_macos | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.0.3" | |||
shared_preferences_platform_interface: | |||
dependency: transitive | |||
description: | |||
@@ -428,14 +449,14 @@ packages: | |||
name: shared_preferences_web | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.0.3" | |||
shared_preferences_windows: | |||
dependency: transitive | |||
description: | |||
name: shared_preferences_windows | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "2.1.0" | |||
sky_engine: | |||
dependency: transitive | |||
description: flutter | |||
@@ -454,14 +475,14 @@ packages: | |||
name: sqflite | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.0+4" | |||
version: "2.0.2" | |||
sqflite_common: | |||
dependency: transitive | |||
description: | |||
name: sqflite_common | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.1+1" | |||
version: "2.2.0" | |||
stack_trace: | |||
dependency: transitive | |||
description: | |||
@@ -503,7 +524,7 @@ packages: | |||
name: test_api | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.4.2" | |||
version: "0.4.3" | |||
typed_data: | |||
dependency: transitive | |||
description: | |||
@@ -517,84 +538,84 @@ packages: | |||
name: url_launcher | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "6.0.17" | |||
version: "6.0.20" | |||
url_launcher_android: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_android | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "6.0.13" | |||
version: "6.0.15" | |||
url_launcher_ios: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_ios | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "6.0.13" | |||
version: "6.0.15" | |||
url_launcher_linux: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_linux | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "3.0.0" | |||
url_launcher_macos: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_macos | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "3.0.0" | |||
url_launcher_platform_interface: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_platform_interface | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.4" | |||
version: "2.0.5" | |||
url_launcher_web: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_web | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.5" | |||
version: "2.0.6" | |||
url_launcher_windows: | |||
dependency: transitive | |||
description: | |||
name: url_launcher_windows | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.0.2" | |||
version: "3.0.0" | |||
vector_math: | |||
dependency: transitive | |||
description: | |||
name: vector_math | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.1.0" | |||
version: "2.1.1" | |||
win32: | |||
dependency: transitive | |||
description: | |||
name: win32 | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "2.2.9" | |||
version: "2.4.1" | |||
xdg_directories: | |||
dependency: transitive | |||
description: | |||
name: xdg_directories | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "0.2.0" | |||
version: "0.2.0+1" | |||
xml: | |||
dependency: transitive | |||
description: | |||
name: xml | |||
url: "https://pub.dartlang.org" | |||
source: hosted | |||
version: "5.3.0" | |||
version: "5.3.1" | |||
yaml: | |||
dependency: transitive | |||
description: | |||
@@ -603,5 +624,5 @@ packages: | |||
source: hosted | |||
version: "3.1.0" | |||
sdks: | |||
dart: ">=2.14.0 <3.0.0" | |||
flutter: ">=2.5.0" | |||
dart: ">=2.15.0 <3.0.0" | |||
flutter: ">=2.8.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.4+8 | |||
version: 1.0.5+9 | |||
environment: | |||
sdk: ">=2.1.0 <3.0.0" | |||
@@ -13,23 +13,23 @@ dependencies: | |||
# The following adds the Cupertino Icons font to your application. | |||
# Use with the CupertinoIcons class for iOS style icons. | |||
cupertino_icons: | |||
image_picker: ^0.8.4+4 | |||
image_picker: ^0.8.4+9 | |||
photo_view: ^0.13.0 | |||
sqflite: ^2.0.0+4 | |||
path_provider: ^2.0.7 | |||
sqflite: ^2.0.2 | |||
path_provider: ^2.0.9 | |||
flushbar: ^1.10.4 | |||
http: ^0.13.4 | |||
intl: ^0.17.0 | |||
shared_preferences: ^2.0.9 | |||
shared_preferences: ^2.0.13 | |||
location: ^4.3.0 | |||
# path: 'local_plugin/location-3.0.2' | |||
permission_handler: ^8.3.0 | |||
permission_handler: ^9.2.0 | |||
# app_settings: | |||
# autocomplete_textfield: | |||
barcode_scan2: ^4.1.4 | |||
barcode_scan2: ^4.2.0 | |||
oauth2: ^2.0.0 | |||
in_app_update: ^2.0.0 | |||
url_launcher: ^6.0.17 | |||
in_app_update: ^3.0.0 | |||
url_launcher: ^6.0.20 | |||
package_info: ^2.0.2 | |||