flutter - Flutter 中的 "with"关键字

标签 flutter dart

我正在读这样一个类:

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

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

最佳答案

我从here得到了答案.

我会分解

我一直在寻找的概念叫做Mixins

那么什么是混合?

Mixins 是一种在多个类层次结构中重用一个类的代码的方法,换句话说,当我们需要一个功能但我们不能在一个父类(super class)中实现它时,或者这样做没有意义

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

我们有下图

Classes

因为黄色方 block 是指行走的能力 而蓝色方 block ……如上图所述

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

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

所以这里要使用with

让我们定义步行者类

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

关于flutter - Flutter 中的 "with"关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57243896/

相关文章:

带有 WebView 的 Flutter 应用程序中的 Firebase 身份验证

dart - 如何在 Dart 的大字符串中转义许多 $ 符号?

android - Flutter DropDownSearch 值在将焦点更改为其他小部件时重置

dart - Google Dart : How does . where() 函数有效吗?

flutter - 关闭Flutter应用程序后如何保存数据?

Flutter:如何从货币代码中获取货币符号

flutter - 将两个 Streams 合并为一个 StreamProvider

dart - 如何在 Dart 中使用 char 类型? (打印字母表)

flutter - 按下后退按钮时,将indexStack设置为0

http - 在点击 API 请求时抛出 302 状态代码如何解决这个问题