38 lines
1001 B
Dart
38 lines
1001 B
Dart
import 'dart:convert';
|
|
|
|
import 'package:localstore/localstore.dart';
|
|
|
|
abstract class RequestCache<T> {
|
|
static const int cacheNothing = 0;
|
|
static const int cacheMinute = 60;
|
|
static const int cacheHour = 60 * 60;
|
|
static const int cacheDay = 60 * 60 * 24;
|
|
|
|
int maxCacheTime;
|
|
Function(T) onUpdate;
|
|
|
|
RequestCache(this.maxCacheTime, this.onUpdate);
|
|
|
|
void start(String file, String document) async {
|
|
Map<String, dynamic>? tableData = await Localstore.instance.collection(file).doc(document).get();
|
|
if(tableData != null) {
|
|
onUpdate(onLocalData(tableData['json']));
|
|
}
|
|
|
|
if(DateTime.now().millisecondsSinceEpoch - (maxCacheTime * 1000) < (tableData?['lastupdate'] ?? 0)) {
|
|
return;
|
|
}
|
|
|
|
T newValue = await onLoad();
|
|
onUpdate(newValue);
|
|
|
|
Localstore.instance.collection(file).doc(document).set({
|
|
"json": jsonEncode(newValue),
|
|
"lastupdate": DateTime.now().millisecondsSinceEpoch
|
|
});
|
|
}
|
|
|
|
T onLocalData(String json);
|
|
Future<T> onLoad();
|
|
|
|
} |