【问题标题】:Can't call onData inside listener无法在侦听器内调用 onData
【发布时间】:2019-07-11 13:54:01
【问题描述】:

我的应用程序非常小:

main() async
 {
  Stream stream = Stream.fromIterable([1,2,3,4]);

  stream.listen(
    (d) { print(d); },
    onDone: () { print("all done"); }
  );
 }

我不明白为什么我不能像onDone 一样打电话给onData,比如:

onData: (d) { print(d); }

Docs

【问题讨论】:

    标签: dart


    【解决方案1】:

    listenonData 参数是位置参数onDone 参数是命名参数。所有参数都是一个或另一个,它决定了您如何为该参数传递参数。

    要为命名参数传递参数,您必须使用名称,因此您编写onDone: () { ... }

    要为位置参数传递参数,您只需写入值。您不能使用该名称。

    所以,要同时调用listen,你可以这样写:

    stream.listen(
        (data) { handleData(...); },
        onDone: () { handleDone(...); }
    );
    

    它传递一个位置参数和一个名为 onDone 的命名参数。

    【讨论】:

    • 谢谢!但是我可以这样做吗:stream.listen.then((d) { print(d) } );
    • 没有。我不确定您要尝试做什么,但该代码肯定不起作用。 listen 是一个方法,需要调用才能使用。它没有then 方法。
    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2015-02-19
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多