gpt4 book ai didi

flutter - 如何在Streambuilder中控制流(启动,暂停,恢复)

转载 作者:行者123 更新时间:2023-12-03 03:04:45 27 4
gpt4 key购买 nike

我想三行共享一个流,并且每一行都可以暂停和继续。

现在,我只可以使用StreamControllerStreamBuilder将一个流共享到三行,但是我不知道如何暂停和继续。

enter image description here

https://github.com/WingCH/Fluuter-Exercise

...
class StreamDemoState extends State<StreamDemo> {
StreamController _streamController;
Stream<int> timerStream;

@override
void initState() {
super.initState();

//Timer
Duration interval = Duration(seconds: 1);
timerStream = Stream.periodic(interval, (data) {
return data;
});

_streamController = StreamController.broadcast();
_streamController.addStream(timerStream);
}
Widget build(BuildContext context) {
...
Padding(
padding: EdgeInsets.all(10),
child: StreamBuilder<Object>(
stream: _streamController.stream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Column(
children: <Widget>[
Text(
snapshot.data.toString(),
style: TextStyle(
color: Colors.blueGrey,
fontWeight: FontWeight.bold,
fontSize: 80),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
OutlineButton(
onPressed: () {
//listen / resume
},
child: Text('listen'),
),
Padding(
padding:
const EdgeInsets.symmetric(horizontal: 20.0),
child: OutlineButton(
onPressed: () {
//Pause
},
child: Text('Paused'),
),
),
OutlineButton(
onPressed: null,
child: Text('--'),
),
],
)
],
);
} else {
return Text('no Date');
}
}),
),
...
}

最佳答案

我面临着同样的问题,这就是我想出的:
除了在StreamController上调用addStream之外,您还可以在timerStream上使用侦听器一一添加事件。 listen返回一个StreamSubscription,您可以使用SubscriberSubsription.pause暂停intStream。
_streamController.addStream(timerStream);替换为以下内容(我自己尚未运行此命令,因此可能会有一些错别字):

var _timerSubscription = timerStream.listen((event) => _streamController.add(event));
现在您可以分别用以下内容替换 //resume//pause:
//resume
_timerSubscription.resume();
//pause
_timerSubcription.pause();
请注意,通过多次调用 pause()暂停的流将需要相等数量的 resume()调用才能取消暂停-如果这是不受欢迎的行为,则您将要禁用暂停按钮(或者简单地在onPressed中跳过对pause()的调用,如果流已暂停)。
另外,当它们不再使用时,别忘了取消StreamSubscription并关闭StreamController!

关于flutter - 如何在Streambuilder中控制流(启动,暂停,恢复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59597138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com