Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 30 additions & 30 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ packages:
path: ".."
relative: true
source: path
version: "0.4.0"
version: "0.4.1"
async:
dependency: transitive
description:
Expand All @@ -28,26 +28,26 @@ packages:
dependency: transitive
description:
name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev"
source: hosted
version: "1.3.0"
version: "1.4.0"
clock:
dependency: transitive
description:
name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev"
source: hosted
version: "1.19.0"
version: "1.19.1"
crypto:
dependency: transitive
description:
Expand Down Expand Up @@ -84,10 +84,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.1"
version: "1.3.3"
ffi:
dependency: transitive
description:
Expand Down Expand Up @@ -163,26 +163,26 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de"
url: "https://pub.dev"
source: hosted
version: "10.0.7"
version: "11.0.2"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1"
url: "https://pub.dev"
source: hosted
version: "3.0.8"
version: "3.0.10"
leak_tracker_testing:
dependency: transitive
description:
name: leak_tracker_testing
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1"
url: "https://pub.dev"
source: hosted
version: "3.0.1"
version: "3.0.2"
lints:
dependency: transitive
description:
Expand All @@ -195,10 +195,10 @@ packages:
dependency: transitive
description:
name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev"
source: hosted
version: "0.12.16+1"
version: "0.12.17"
material_color_utilities:
dependency: transitive
description:
Expand All @@ -211,10 +211,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.15.0"
version: "1.17.0"
package_info_plus:
dependency: transitive
description:
Expand All @@ -235,10 +235,10 @@ packages:
dependency: transitive
description:
name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev"
source: hosted
version: "1.9.0"
version: "1.9.1"
path_provider:
dependency: transitive
description:
Expand Down Expand Up @@ -376,18 +376,18 @@ packages:
dependency: transitive
description:
name: stack_trace
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev"
source: hosted
version: "1.12.0"
version: "1.12.1"
stream_channel:
dependency: transitive
description:
name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev"
source: hosted
version: "2.1.2"
version: "2.1.4"
string_scanner:
dependency: transitive
description:
Expand All @@ -408,10 +408,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
version: "0.7.3"
version: "0.7.7"
typed_data:
dependency: transitive
description:
Expand All @@ -432,10 +432,10 @@ packages:
dependency: transitive
description:
name: vector_math
sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
url: "https://pub.dev"
source: hosted
version: "2.1.4"
version: "2.2.0"
vm_service:
dependency: transitive
description:
Expand Down Expand Up @@ -477,5 +477,5 @@ packages:
source: hosted
version: "1.0.4"
sdks:
dart: ">=3.5.0 <4.0.0"
dart: ">=3.8.0-0 <4.0.0"
flutter: ">=3.24.0"
2 changes: 1 addition & 1 deletion lib/aptabase_flutter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ class Aptabase {
"props": props,
});

final key = "aptabase_${time.millisecondsSinceEpoch}_$eventName";
final key = "${time.millisecondsSinceEpoch}_$eventName";

await _storage.addEvent(key, body);
}
Expand Down
43 changes: 32 additions & 11 deletions lib/storage_manager_shared_prefs.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,35 +2,56 @@ import "package:aptabase_flutter/storage_manager.dart";
import "package:shared_preferences/shared_preferences.dart";

class StorageManagerSharedPrefs extends StorageManager {
static const _keyPrefix = "aptabase_";

final _events = <String, String>{};
late final SharedPreferences _prefs;

@override
Future<void> init() async {
final sharedPrefs = await SharedPreferences.getInstance();
final keys = sharedPrefs.getKeys();
_prefs = await SharedPreferences.getInstance();
final keys = _prefs.getKeys();
for (final key in keys) {
final value = sharedPrefs.getString(key);
if (value != null) _events[key] = value;
if (key.startsWith(_keyPrefix)) {
final value = _prefs.getString(key);
if (value != null) {
final unprefixedKey = key.substring(_keyPrefix.length);
_events[unprefixedKey] = value;
}
}
}

return super.init();
}

@override
Future<void> addEvent(String key, String event) async {
_events[key] = event;

final sharedPrefs = await SharedPreferences.getInstance();
await sharedPrefs.setString(key, event);
try {
final success = await _prefs.setString("$_keyPrefix$key", event);

if (success) {
_events[key] = event;
}
} catch (e) {
// If persistence fails, don't add to in-memory cache to maintain consistency
rethrow;
}
}

@override
Future<void> deleteEvents(Set<String> keys) async {
// Remove from in-memory cache first since events were already sent
_events.removeWhere((k, _) => keys.contains(k));

final sharedPrefs = await SharedPreferences.getInstance();
for (final key in keys) {
await sharedPrefs.remove(key);
try {
for (final key in keys) {
await _prefs.remove("$_keyPrefix$key");
}
} catch (e) {
// Events were already sent successfully and removed from memory.
// Disk cleanup failure is not critical - orphaned keys will be cleaned
// up on next init if they still exist.
// Silently catch to avoid disrupting the event sending flow.
}
}

Expand Down