Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 是否可以传递带参数的函数,然后在Dart中调用它?_Flutter_Dart - Fatal编程技术网

Flutter 是否可以传递带参数的函数,然后在Dart中调用它?

Flutter 是否可以传递带参数的函数,然后在Dart中调用它?,flutter,dart,Flutter,Dart,为了重用,我试图将返回类型为流的函数传递给使用者。我之所以要这样做,是因为我想关闭我处理完后传递给它的类上的流 如果我直接发送一个流,我不喜欢在“子”对象中关闭它,我可能会在创建它的类上调用close()后持有一个引用并使用它 // Declare some functions that return a Stream<Foo> Stream<Foo> stream1() => GenerateStream(); Stream<Foo> stream2(

为了重用,我试图将返回类型为
流的函数传递给使用者。我之所以要这样做,是因为我想关闭我处理完后传递给它的类上的流

如果我直接发送一个
,我不喜欢在“子”对象中关闭它,我可能会在创建它的类上调用
close()
后持有一个引用并使用它

// Declare some functions that return a Stream<Foo>
Stream<Foo> stream1() => GenerateStream();
Stream<Foo> stream2(String a) => GenerateStreamWith1Argument(a);
Stream<Foo> stream3(String a, int b) => GenerateStreamWith2Argument(a, b);

// Constructor
MyStreamConsumer(Stream<Foo> Function(...) f){ // Something like ... operator in Dart?
    Stream<Foo> stream = f.call(); // Now I can dispose Stream on this object since was created here.
}

// Instantiation
MyStreamConsumer(stream1());
MyStreamConsumer(stream2('SomeString'));
MyStreamConsumer(stream3('SomeString', 1));
//声明一些返回流的函数
stream1()=>GenerateStream();
stream2(字符串a)=>GenerateStreamWith1参数(a);
stream3(字符串a,int b)=>GenerateStreamWith2参数(a,b);
//建造师
MyStreamConsumer(流函数(…)f){//类似于Dart中的…运算符?
Stream Stream=f.call();//现在我可以处理这个对象上的流,因为它是在这里创建的。
}
//实例化
MyStreamConsumer(stream1());
MyStreamConsumer(stream2('SomeString'));
MyStreamConsumer(stream3('SomeString',1));
这有可能实现吗?还是有其他办法来解决这个问题

编辑(为什么我不想直接传递流):

Stream=stream1();
MyStreamConsumer(流);//我可能已经使用并处理了流,这会造成某种未定义的行为。
stream.listen()//这里我可能在听一个封闭的流。

您是要传递一个可以传递参数的函数,还是要传递一个传递了特定参数的函数?@Abion47如果示例有错误(因为stream1()返回一个流,但我不知道正确的表示法,或者如果可能的话)。我的想法是传递一个函数,稍后可以使用我在Instance注释中指定的参数调用该函数。如果使用特定参数调用函数,假设它是纯函数,则始终会返回相同的对象。那么,为什么要传递函数而不仅仅是传递流本身呢?@Abion47我做了一次编辑,试图解释为什么。然后你需要的是一个工厂对象。使用要传递的参数初始化工厂,然后可以随时使用这些参数重新创建流。
Stream<Foo> stream = stream1();
MyStreamConsumer(stream); // I might have used and disposed the stream which makes kinda undefined behavior.
stream.listen() // Here I am probably listening a closed stream.