В FireBase мы можем сделать транзакцию, как это
final dataRef = database.reference().child('path/to/data');
dataRef.runTransaction((MutableData transaction) async{
transaction.value = (transaction.value ?? 0) + 1;
return transaction;
});
Интересно, у нас может быть то же самое с BehaviorSubject; как то так
final subject = new BehaviorSubject<int>();
subject.add(1);
subject.add(2);
subject.add(3);
subject.runTransaction((int currentData) => currentData + 2);
// or
subject.add(subject.value + 2);
subject.stream.listen(print); // prints 7
subject.stream.listen(print); // prints 7