Skip to content

Instantly share code, notes, and snippets.

View VB10's full-sized avatar
🏠
Working from home

Veli Bacik VB10

🏠
Working from home
View GitHub Profile
@override
Future<ItemModel?> takeItemWithCache(int? id) async {
if (_directory == null) {
final appDirectory = await createDirectory();
_directory ??= await Directory('${appDirectory.path}/$_localPath').create();
}
final items = await _directory!.list().toSet();
final _item = items.firstWhereOrNull((element) => element.path.contains('$id'));
if (_item != null) {
@override
Future<void> clearAllDatasWithExpiry() async {
final directory = await createDirectory();
final itemDirectory = await Directory('${directory.path}/$_localPath').create();
final items = await itemDirectory.list().toSet();
await Future.forEach<FileSystemEntity>(items, (element) async {
final file = File(element.path);
final jsonBody = json.decode(await file.readAsString());
final feedItem = ItemModel.fromJson(jsonBody);
@override
Future<void> cacheIt() async {
final file = await createDirectoryWithPath();
item.itemValues = encrypData.crypteFile(item.itemValues ?? '');
await file.writeAsString(jsonEncode(item));
}
class ItemModelCache extends ItemCache {
late final EncrypData encrypData;
Directory? _directory;
ItemModelCache(ItemModel item) : super(item) {
encrypData = EncrypData();
}
factory ItemModelCache.dummy() {
return ItemModelCache(ItemModel.dummy());
abstract class ItemCache {
final String _localPath = 'vb10';
final ItemModel item;
ItemCache(this.item);
Future<void> cacheIt();
Future<Directory> createDirectory();
Future<File> createDirectoryWithPath();
Future<ItemModel?> takeItemWithCache(int id);
Future<Uint8List?> fetchData() async {
final data = await homeService.downloadFile(model.document ?? '');
return data;
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: buildFloatingActionButtonDownlaod(),
appBar: AppBar(title: Text(model.title ?? '')),
@override
void initState() {
super.initState();
homeService = HomeService(EncryptNetworkManager().manager);
_fetchAndShow();
}
Future<void> _fetchAndShow() async {
_changeLoading();
items = await homeService.fetchItem();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: buildGridViewBody(),
);
}
GridView buildGridViewBody() {
return GridView.builder(
test('Cache Model & Encryption', () async {
final model = ItemModel(id: 1345);
final crypto = EncrypData();
final directory = await getApplicationDocumentsDirectory();
await Directory('${directory.path}').create();
await Directory('${directory.path}/vb2').create();
final path = '${directory.path}/vb2/${model.title}.json';
final file = File(path);
final modelValuesWithCrypto = crypto.crypteFile(model.toString());
await file.writeAsString(modelValuesWithCrypto);
class EncrypData implements IEncrypData {
late final Key key;
late final IV iv;
final String _privateKey = 'privateKey';
final String _privateINV = 'privateINV';
EncrypData() {
key = Key.fromUtf8(dotenv.env[_privateKey] ?? '');
iv = IV.fromUtf8(utf8.decode((dotenv.env[_privateINV] ?? '').codeUnits));