Dart 中的松散耦合

Loose coupling in Dart

我试图在我的一个 Flutter 项目中实现松散耦合。它无法找到该方法。 在一个简单的 Dart 代码中复制了相同的内容,我该如何解决这个问题,有什么方法可以在 Dart 中实现松耦合吗?

abstract class A{}

class B extends A{
  void help(){
    print("help");
  }
}

class C {
  A b;
  C({required this.b});
  void test(){
     b.help();
  }
 
  
}

void main() {
 var c = C(b:B());
  c.test();
  
}

b.help() 处给出错误,该方法确实存在。

确切错误

The method 'help' isn't defined for the type 'A'.

b 已知属于 A 类型,A 接口不提供 help 方法。

我不太清楚你对“松散耦合”的定义是什么(最好描述你要解决的具体问题),但是如果你想 help在类型 A 上可调用,那么您必须将它添加到 A 接口。

您也可以通过运行时检查将 b 显式向下转换为 B

class C {
  A b;
  C({required this.b});
  void test() {
    // Shadow `this.b` with a local variable so that the local
    // variable can be automatically type-promoted.
    final b = this.b;
    if (b is B) {
      b.help();
    }
  }
}

或者如果你想要鸭子类型,你可以将 b 声明(或强制转换)为 dynamic:

class C {
  dynamic b;
  C({required this.b});
  void test() {
    try {
      b.help();
    } on NoSuchMethodError {}
  }
}

虽然我认为最后一种形式是糟糕的风格。