1

我正在使用 Riverpod StreamProvider。

我想知道两件事:

1 - 我从 youtube 视频中了解到有关流提供程序的信息,以及视频中的人编写的代码如下:

  final streamProvider = StreamProvider.autoDispose<int>((ref) {

  return Stream.periodic(Duration(seconds: 1), (number) {
    if (number < 5)
      return number + 1;
    else {
      return 5;
    }
  });
});

问题是:根据我的理解,使用流方法需要我使用“async*”,那么为什么这里不需要呢?

2 - 我如何确保一旦流的数值等于 5,流提供程序将关闭并停止更新 UI?

太感谢了!

4

1 回答 1

1

您参考以下示例。

 final example = StreamProvider.autoDispose((ref) {
      final streamController = StreamController<int>();
    
 for(int i=0; i<=5 ; i++){
    // read stream values like this might help 
    streamController.stream.last.then((value) => {if(value==5) 
    {streamController.close()}});
    if(!streamController.isClosed) {
      streamController.add(i);
    }
  }
      ref.onDispose(() {
        // Closes the StreamController when the state of this provider is destroyed.
        streamController.close();
      });
    
      return streamController.stream;
    });

有关更多信息,请参阅文档https://riverpod.dev/docs/concepts/providers

于 2020-12-10T07:00:34.713 回答