Flutter如何使用接口回调函数

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的回调函数就是这些啦,欢迎指正不足之处

发布了21 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/u013894711/article/details/91792805