Существует StreamBuilder (использующий RxDart), который отображает некоторую дату. После нажатия на виджет InkWell мне нужно рассчитать новую дату на основе старой. Приведенный ниже код просто объясняет алгоритм, но когда я его запускаю, ничего не происходит и выполнение останавливается после подчеркнутой строки, т.е. я никогда не вижу значение lastCalcDate.
Графический интерфейс:
child: StreamBuilder(
stream: bloc.getDate,
builder: (context,snapshot) {
return InkWell(
onTap: () => tapHandler
);
}),
void tapHandler() async {
var lastCalcDate = await bloc.getDate.single;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
print(lastCalcDate);
var newCalcDate = lastCalcDate.add(Duration(days:1));
bloc.setDate(newCalcDate)
}
BLoC:
class Bloc {
// BehaviourSubject is usedto be sure that last sent date will be accessible in `tapHandler`.
final _dateSubject = BehaviourSubject<DateTime>();
Observable<DateTime> get getDate => _dateSubject.stream;
Function(DateTime) get setDate => _dateSubject.add;
}
Чтобы реализовать то, что мне нужно, я создал обходной путь, но он мне не нравится, потому что я заполняю, что могу делать то же самое, используя наблюдаемые.
BLoC (обходной путь):
class Bloc {
final _dateSubject = BehaviourSubject<DateTime>();
Observable<DateTime> get getDate => _dateSubject.stream;
DateTime _date;
void setDateWorkaround(DateTime date) {
_date = date;
_dateSubject.add(date);
}
}
Не могли бы вы дать мне совет. Что я сделал не так?