Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter &引用;加上;颤振中的关键词_Flutter_Dart - Fatal编程技术网

Flutter &引用;加上;颤振中的关键词

Flutter &引用;加上;颤振中的关键词,flutter,dart,Flutter,Dart,我在读一门课,比如: class SplashScreenState extends State<SplashScreen> with SingleTickerProviderStateMixin { ... ... } 类状态扩展状态 使用SingleTickerProviderStateMixin{ ... ... } 我只是想知道,在这个上下文中,关键字的指的是什么,为什么我们要使用它?我从中得到了答案 我会把它分解 我正在寻找的概念称为Mixins 那么什么是

我在读一门课,比如:

class SplashScreenState extends State<SplashScreen>
    with SingleTickerProviderStateMixin {
 ...
 ...
}
类状态扩展状态
使用SingleTickerProviderStateMixin{
...
...
}
我只是想知道,在这个上下文中,关键字的指的是什么,为什么我们要使用它?

我从中得到了答案

我会把它分解

我正在寻找的概念称为Mixins

那么什么是混合物

混入是在多个类层次结构中重用类代码的一种方式,换句话说,当我们需要一个功能而无法在一个超类中实现它时,或者这样做没有意义时

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

我们有下面的图表

因为黄色方块指的是行走的能力 蓝色广场。。。。。。如上图所述

这里我们有一个叫做动物的超类,它有三个子类(哺乳动物、鸟类和鱼类)

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

因此,使用

让我们定义walker类

class Walker {
  void walk() {
    print("I'm walking");
  }
}
为了解决上述问题,我们使用了mixin

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.
}

main(列出参数){
猫=猫();
鸽子鸽子=鸽子();
//猫会走路。
猫走();
//鸽子能走能飞。
鸽子。行走();
鸽子。飞();
//正常的猫不能飞。
//cat.fly();//取消对此的注释不会编译。
}