Flutter是基于Dart语言开发的,Dart没有Interface这一概念,只有抽象类,而且还不能new(即便是实现抽象类中的方法)。这就很恼火了,回调函数该怎么使用呢?
网上找了很多资料发现有一点很有帮助,那就是Dart中的每一个类都含有一个隐式的接口,所以不管什么类都能当成接口来用,这估计也就是dart放弃接口的原因了吧。 例如:
class MyClass1{
void hello(){
}
}
class MyClass2 implements MyClass1{
@override
void hello() {
// TODO: implement hello
}
}
看到没有,居然可以实现一个类呢,是不是超级反人类。值得注意的是如果你实现了一个类,那么必须实现该类所有的方法和成员属性,即便它是私有的。
有了这个基础,接口回调的问题也就迎刃而解了。这里有两种方式来实现接口回调,当然都是基于抽象类了
1.一个抽象类中只有一个方法,建议使用typedef。 例如
abstract class MyCallback{
void onCallback(String result);
}
//上面的代码可以替换为
typedef void MyCallback(result);
2.正对抽象类中有多个方法,老老实实用原始方法
//定义一个抽象类
abstract class OnStatusChangeListener{
void onStatusComplete();
void onStatusFail();
}
class Test1{
final OnStatusChangeListener _onStatusChangeListener;
//在该类的构造函数中初始化OnStatusChangeListener
Test1(this._onStatusChangeListener);
void statusFail(){
_onStatusChangeListener.onStatusFail();
}
void statusComplete(){
_onStatusChangeListener.onStatusComplete();
}
}
//在该类中实现抽象类OnStatusChangeListener,并实现它的抽象方法,也就是回调
class Test2 implements OnStatusChangeListener{
void start() {
Test1 test1 = new Test1(this);
test1.statusComplete();
test1.statusFail();
}
@override
void onStatusComplete() {
// TODO: implement onStatusComplete
print('回调函数,status complete');
}
@override
void onStatusFail() {
// TODO: implement onStatusFail
print('回调函数,status fail');
}
}
关于Flutter的回调函数就是这些啦,欢迎指正不足之处