在 flutter 中将参数绑定到函数的选项

Options to bind arguments to a function in flutter

提问人:Gowtham 提问时间:9/12/2023 更新时间:9/12/2023 访问量:48

问:

我想用方法绑定一个参数。我的应用程序中有一个名为 Method1 的方法,我想将 Method2 作为参数传递给 Method1。我想将额外的参数绑定到 Method2,同时将 Method2 传递给 Method1。Method2 的类型为 void Function(ListObject>)。

在 TypeScript 中,有一个选项可以将额外的参数绑定到函数。

function log(...args) {
console.log(this, ...args);
}
const boundLog = log.bind("this value", 1, 2);
const boundLog2 = boundLog.bind("new this value", 3, 4);
boundLog2(5, 6);
 
 Output => // "this value", 1, 2, 3, 4, 5, 6

这是我尝试过的一些代码。

Method1(
text,
Method2,
);

void Method2(List<Object> arg){ 

// My logics here....

}

void Method1(String newText, void Function(List<Object>) newMethod)
Flutter 函数 Dart 方法

评论


答:

0赞 Vladyslav Ulianytskyi 9/12/2023 #1

您可以尝试:

void method2(List<Object> args) {
  print('method2');
  args.forEach((element) {
    print(element);
  });
}

void method1(String newText, void Function(List<Object>) newMethod) {
  print('method1 $newText');
  newMethod(['arg1', 'arg2']);
}

void main() {
  method1(
    'do some stuff',
    method2,
  );
}

void method1(
       String newText, 
       void Function(List<Object>) newMethod, 
     ) {
       print('method1 $newText');
       newMethod.call([newText]);
     }

void main() {
  method1('do some stuff',
   (args) {
    method2(args);
   },
  );
}

评论

0赞 Gowtham 9/13/2023
您好@Vladyslav,感谢您的回复。就我而言,该解决方案不起作用。我想将一个附加参数绑定到 Method2 而不是 List<Object>并在 Method2 中使用它。我无法更改 Method1 中的任何内容,因为它来自第三方包,一旦从服务器获得响应,就会调用 Method2。
0赞 Vladyslav Ulianytskyi 9/13/2023
如果无法更改 Method1 中的任何内容,则无法更改 Method1 接受为参数的 Method2 中的签名。但是您可以尝试使用扩展来包装 Method1
0赞 Gowtham 9/15/2023
嗨,弗拉迪斯拉夫,您打算将哪些扩展包装到 Method1?你能举一些例子吗?
0赞 Vladyslav Ulianytskyi 9/15/2023
这只是寻找合适 directionhttps://dart.dev/language/extension-methods 的一种选择