首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从流中获取当前值

从流中获取当前值
EN

Stack Overflow用户
提问于 2019-04-18 22:01:02
回答 1查看 7K关注 0票数 7

有一个(使用RxDart的) StreamBuilder,它显示一些日期。单击InkWell小部件后,我需要在旧日期的基础上计算一个新日期。下面的代码简单地解释了算法,但当我运行它时,什么也没有发生,执行在带下划线的行后停止,即我永远看不到lastCalcDate的值。

GUI:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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 (解决方法):

代码语言:javascript
复制
class Bloc {
  final _dateSubject = BehaviourSubject<DateTime>(); 
  Observable<DateTime> get getDate => _dateSubject.stream;
  DateTime _date;
  void setDateWorkaround(DateTime date) {
    _date = date;
    _dateSubject.add(date);
  }
}

你能找个人给我提个建议吗?我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 03:02:58

single将无法工作,因为它将返回流中的下一项,但是,必须首先添加该项。这意味着single将只等待下一项,在您的情况下,它将不会发生。

由于您已经在使用rxdartBehaviorSubject,因此可以轻松地访问当前元素,如下所示:

代码语言:javascript
复制
class Bloc {
  final _dateSubject = BehaviourSubject<DateTime>(); 
  Observable<DateTime> get getDate => _dateSubject.stream;
  Function(DateTime) get setDate => _dateSubject.add;

  DateTime get currentDate => _dateSubject.value;
}

在本例中,我使用了BehaviorSubject.value,这实际上是该类的全部内容。

现在,您可以在您的点击处理程序中使用currentDate

代码语言:javascript
复制
void tapHandler() async {
  var lastCalcDate = bloc.currentDate;
  print(lastCalcDate);
  var newCalcDate = lastCalcDate.add(Duration(days:1));
  bloc.setDate(newCalcDate)
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55747684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档