Skip to content

Commit 6b443b5

Browse files
committed
fix executeUpdate
1 parent b2d7ff4 commit 6b443b5

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

lib/src/impl/real_storage.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -330,19 +330,28 @@ class RealRxStorage<Key extends Object, Options,
330330
// Get streams (implements [RxStorage])
331331
//
332332

333+
@experimental
333334
@nonVirtual
334335
@override
335336
Future<void> executeUpdate<T extends Object>(
336-
Key key, Decoder<T?> decoder, Encoder<T?> encoder,
337-
[Options? options]) {
337+
Key key,
338+
Decoder<T?> decoder,
339+
Transformer<T?> transformer,
340+
Encoder<T?> encoder, [
341+
Options? options,
342+
]) {
338343
assert(_debugAssertNotDisposed());
339344

340345
return _enqueueWritingTask<void>(
341346
key,
342347
() async {
348+
// Read
343349
final value =
344350
await _useStorage((s) => s.read<T>(key, decoder, options));
345-
await _writeWithoutSynchronization(key, value, encoder, options);
351+
// Modify
352+
final transformed = transformer(value);
353+
// Write
354+
await _writeWithoutSynchronization(key, transformed, encoder, options);
346355
},
347356
);
348357
}

lib/src/interface/rx_storage.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
import 'dart:async';
22

3+
import 'package:meta/meta.dart';
4+
35
import '../../rx_storage.dart';
46
import '../impl/real_storage.dart';
57
import '../logger/logger.dart';
68
import 'storage.dart';
79

10+
/// Transform a value to another value with same type.
11+
typedef Transformer<T> = T Function(T);
12+
813
/// Get [Stream]s by key from persistent storage.
914
abstract class RxStorage<Key extends Object, Options>
1015
implements Storage<Key, Options> {
@@ -22,11 +27,15 @@ abstract class RxStorage<Key extends Object, Options>
2227

2328
/// `Read–modify–write`.
2429
///
25-
/// Read value by [key], then decode with [decoder], then encode with [encoder]
26-
/// and finally save computed value to persistent storage.
30+
/// Read value by [key], then decode with [decoder],
31+
/// then transform by [transformer],
32+
/// then encode with [encoder]
33+
/// and finally save decoded value to persistent storage.
34+
@experimental
2735
Future<void> executeUpdate<T extends Object>(
2836
Key key,
2937
Decoder<T?> decoder,
38+
Transformer<T?> transformer,
3039
Encoder<T?> encoder, [
3140
Options? options,
3241
]);

test/storage/streams_test.dart

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ void main() {
374374
await rxStorage.executeUpdate<String>(
375375
'String',
376376
(s) => s as String?, // read
377-
(s) => 'Transformed $s', // write
377+
(s) => 'Transformed $s', // modify,
378+
(s) => s, // write
378379
);
379380
expect(
380381
await rxStorage.getString('String'),
@@ -388,10 +389,10 @@ void main() {
388389
await rxStorage.executeUpdate<User>(
389390
'User',
390391
jsonStringToUser, // read
391-
(user) => user == null
392-
? null
393-
: userToJsonString(
394-
user.withName('Transformed ${user.name}')), // write
392+
(user) =>
393+
user != null ? user.withName('Transformed ${user.name}') : null,
394+
// modify
395+
userToJsonString, // write
395396
);
396397
expect(
397398
await rxStorage.readUser(),
@@ -405,18 +406,19 @@ void main() {
405406
rxStorage.executeUpdate<String>(
406407
'String',
407408
(s) => s as String?, // read
408-
(s) => 'Transformed $s', // write
409+
(s) => 'Transformed $s', // modify,
410+
(s) => s, // write
409411
),
410412
throwsException,
411413
);
412414
expect(
413415
rxStorage.executeUpdate<User>(
414416
'User',
415417
jsonStringToUser, // read
416-
(user) => user == null
417-
? null
418-
: userToJsonString(
419-
user.withName('Transformed ${user.name}')), // write
418+
(user) =>
419+
user != null ? user.withName('Transformed ${user.name}') : null,
420+
// modify
421+
userToJsonString, // write
420422
),
421423
throwsException,
422424
);

0 commit comments

Comments
 (0)