Flutter 带返回值的Dart引用回调
我必须在Dart中的回调上返回一个值。现在,当我们使用直接回调时,这样做很简单,但我有另一种情况,我必须使用引用回调。这可能很愚蠢,但我必须这样做 方法1(不工作):Flutter 带返回值的Dart引用回调,flutter,dart,Flutter,Dart,我必须在Dart中的回调上返回一个值。现在,当我们使用直接回调时,这样做很简单,但我有另一种情况,我必须使用引用回调。这可能很愚蠢,但我必须这样做 方法1(不工作): import 'dart:async'; main() { TestClass().method2(() => "Returend String"); } class TestClass { String Function() getStringCallback; TestClass() { met
import 'dart:async';
main() {
TestClass().method2(() => "Returend String");
}
class TestClass {
String Function() getStringCallback;
TestClass() {
method1();
}
void method1() {
TestClass2(getStringCallback);
}
void method2(String Function() callbackString) {
this.getStringCallback = callbackString;
}
}
class TestClass2 {
String Function() getStringCallback;
TestClass2(this.getStringCallback) {
Timer(Duration(seconds: 3), () {
print(getStringCallback.call());
});
}
}
import 'dart:async';
main() {
TestClass().method2("Returend String");
}
class TestClass {
String getStringCallback;
TestClass() {
method1();
}
void method1() {
TestClass2(()=>getStringCallback);
}
void method2(String callbackString) {
this.getStringCallback = callbackString;
}
}
class TestClass2 {
String Function() getStringCallback;
TestClass2(this.getStringCallback) {
Timer(Duration(seconds: 3), () {
print(getStringCallback.call());
});
}
}
上述代码导致错误,因为getStringCallback
为空
TestClass2正在通过method1
实例化,因此可以在那里执行此操作。是否可以通过方法2
执行此操作
目前,我正在这样做
方法2(按预期工作):
import 'dart:async';
main() {
TestClass().method2(() => "Returend String");
}
class TestClass {
String Function() getStringCallback;
TestClass() {
method1();
}
void method1() {
TestClass2(getStringCallback);
}
void method2(String Function() callbackString) {
this.getStringCallback = callbackString;
}
}
class TestClass2 {
String Function() getStringCallback;
TestClass2(this.getStringCallback) {
Timer(Duration(seconds: 3), () {
print(getStringCallback.call());
});
}
}
import 'dart:async';
main() {
TestClass().method2("Returend String");
}
class TestClass {
String getStringCallback;
TestClass() {
method1();
}
void method1() {
TestClass2(()=>getStringCallback);
}
void method2(String callbackString) {
this.getStringCallback = callbackString;
}
}
class TestClass2 {
String Function() getStringCallback;
TestClass2(this.getStringCallback) {
Timer(Duration(seconds: 3), () {
print(getStringCallback.call());
});
}
}
我想用方法1来做。可能吗?您可以使用一个函数包装回调,该函数可以在分配新回调时更改其行为。替换TestClass2(getStringCallback)代码>带有
TestClass2(()=>getStringCallback())
方法1不起作用,因为在method2
之前调用了method1
遵循main上的逻辑:
调用TestClass()
时,它调用类的构造函数,在TestClass的构造函数中调用method1
。调用构造后,调用method2
,因此在您的逻辑中:
main(){
TestClass().method2(()=>“Returend字符串”);
//这里您调用construct,构造函数调用method1
}
main(){
TestClass().method2(()=>“Returend字符串”);
//这里您在调用method1之后调用method2
}
我希望你能理解我的英语