如何在Dart中返回这种疯狂的类型?

时间:2020-06-18 00:27:11

标签: dart mongo-dart dart-mock

我正在尝试模拟mongo_dart中的.find函数,它正在请求一个我无法解决的返回函数。它有一个类型,然后是另一个类型,然后是名称。什么/如何表达此返回类型。

这显然是合法代码:

Stream<Map<String, dynamic>> Function([selector]) _test(Invocation realInvocation) {
}

class selector {
}

返回Stream<Map<String, dynamic>>会引发错误-它表示需要一个 Stream<Map<String, dynamic>> Function([selector])

帮助!我从未见过类似的东西,而Google并没有太大帮助。


编辑,由于下面Irn的评论,解决方案最终是此代码。查看他们的答案和我为澄清而发表的评论

Stream<Map<String, dynamic>> Function([dynamic]) _test(Invocation realInvocation) {
  return ([selector]) {
    return Stream.value({"response":true});
  };
}

1 个答案:

答案 0 :(得分:2)

返回类型为Stream<Map<String, dynamic>> Function([selector])。 这就是 function 的类型。具有该类型的函数声明可以是:

Stream<Map<String, dynamic>> createMaps([selector s]) async* {
  ... do something ...
    yield map;
  ... do more ...
}

[selector]部分意味着该函数必须接受一个类型为selector的可选位置参数(应该使用大写的 以明确表示它是一种类型) 。 Stream<Map<String, dynamic>>表示该函数返回流。

因此,由于_test返回了这样的函数,因此您可以将test编写为:

Stream<Map<String, dynamic>> Function([selector]) _test(Invocation realInvocation) {
  return createMaps; // But should probably use realInvocation for something.
}

(这会使_test的类型为:

Stream<Map<String, dynamic>> Function([selector]) Function(Invocation)

这是一个满口!)