使用 RiverPod 控制流订阅

问题描述

我试图用 RiverPod 创建一个 streamBuilder。主要是我喜欢控制流,比如实现暂停、恢复、取消......,这样我就可以从应用程序的任何地方控制流。

模型类在这里

class Counter {
  int i = 0;
  late StreamSubscription subscription;
  StreamController<int> controller = StreamController<int>();
 
  Counter() {
    subscription = _setUp().listen((event) {
      print(event);
    });
  }
 
  resume() {
    subscription.resume();
  }
 
  Stream<int> _setUp() {
    Timer.periodic(Duration(seconds: 1),(timer) {
      controller.add(i++);
    });
 
    return controller.stream;
  }
}

然后我为 RiverPod 创建了一个

final myStream = StreamProvider.autodispose<Counter>((ref) async* {
  final counter = Counter();
 
  ref.ondispose(() => counter.controller.sink.close());
 
  await for (final value in counter.controller.stream) {
    if (value == 10) counter.controller.sink.close();
 
    yield counter;
  }
});

和小部件在这里

 Column(
        children: [
          Consumer(
            builder: (context,watch,child) {
              final counter = watch(myStream);
 
              return counter.when(
                data: (data) {
                  return Text("data: ${data.toString()}");
                },loading: () => const CircularProgressIndicator(),error: (error,stackTrace) => Text("Err ${error.toString()}"),);
            },child: Text("Controll"),),///pause
          RaisedButton(
            onpressed: pause,child: Text("Pause"),],

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)