7

需要知道我是否可以在不使用第三方库的情况下从 Stream 中获取最后一个值。

我尝试的第一种方法是,当我可以将值发送到“changeEmail”中的流时,我可以将 newValue 存储在我的 BLoC 中的某个变量中。这是对的吗?

我尝试的第二种方法是添加一个侦听器,它也将完成与上述相同的工作,我需要将 newValue 存储在某个变量中。

我有蒸汽控制器:

final _emailController = StreamController<String>.broadcast();

有 gitters:

Stream<String> get email => _emailController.stream; // getting data from stream

get changeEmail => _emailController.sink.add; // sending data to stream

4

2 回答 2

0

你不能直接这样做。要从流中获取最后一个值,您需要先完成流或缓存添加到流中的每个最后一个值。

//close the stream and get last value:
streamController1 = new StreamController();
streamController1.add("val1");
streamController1.add("val2");
streamController1.add("val3");
streamController1.close();
streamController1.stream.last.then((value) => print(value)); //output: val3

//caching the added values:
streamController1 = new StreamController.broadcast();
String lastValue;
streamController1.stream.listen((value) {
  lastValue = value;
});
streamController1.add("val1");
streamController1.add("val2");
streamController1.add("val3");
Future.delayed(Duration(milliseconds: 500), ()=> print(lastValue)); //output: val3
于 2021-09-21T11:55:36.137 回答
-2

你的片段大多是正确的。但是,您需要提供电子邮件_emailController.sink.add

final _emailController = StreamController<String>();

// Stream that will be called on the UI screen
Stream<String> get email => _emailController.stream;

fetchEmail() async {
  String email = // email that will be provided to your Stream
  _emailController.sink.add(email);
}

dispose() {
  _emailController.close();
}

这是我之前创建的一个示例,它在不使用 rxdart 的情况下实现了 BLoC。

于 2021-05-28T13:45:33.353 回答