问题描述
我试图用 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 (将#修改为@)