Flutter中的“ with”关键字

时间:2019-07-28 18:36:07

标签: flutter dart

我正在读类似的课程:

class SplashScreenState extends State<SplashScreen>
    with SingleTickerProviderStateMixin {
 ...
 ...
}

我只是想知道 with 关键字在这种情况下指的是什么,为什么我们要使用它?

1 个答案:

答案 0 :(得分:0)

我从here得到了答案。

我会分解

我一直在寻找的概念称为 Mixins

那么,mixin是什么?

Mixins是在多个类层次结构中重用类代码的一种方式,换句话说,当我们需要某种功能并且不能在超类之一中实现它时,或者这样做没有任何意义< / strong>

如果有点难以理解,让我们看下面的示例

我们有下图

Classes

黄色正方形代表行走的能力 和蓝色方块......如上图所述

我们这里有一个名为Animal的超类,它具有三个子类(哺乳动物,鸟类和鱼类)

有些动物有共同的行为:猫和鸽子都可以走路,但猫不能飞。 这些行为与该分类正交,因此我们无法在超类中实现这些行为。 如果一个类可以有多个超类,那很容易,我们可以创建其他三个类:Walker,Swimmer,Flyer。之后,我们只需要从Walker类继承Dove和Cat。但是在Dart中,每个类(对象除外)都只有一个超类。 除了可以继承Walker类之外,我们可以实现它,就好像它是一个接口一样,但是我们必须在多个类中实现该行为,所以这不是一个好的解决方案。

因此使用

让我们定义助行器类

class Walker {
  void walk() {
    print("I'm walking");
  }
}

为了解决上述问题,我们使用了mixins

class Cat extends Mammal with Walker {}

class Dove extends Bird with Walker, Flyer {}

现在我们打电话给

main(List<String> arguments) {
  Cat cat = Cat();
  Dove dove = Dove();

  // A cat can walk.
  cat.walk();

  // A dove can walk and fly.
  dove.walk();
  dove.fly();

  // A normal cat cannot fly.
  // cat.fly(); // Uncommenting this does not compile.
}