【问题标题】:Polymorphism in Dart/FlutterDart/Flutter 中的多态性
【发布时间】:2020-06-09 13:14:07
【问题描述】:

我有许多类都扩展StatefulWidget。我希望每个类都提供它自己版本的方法bool foo(),这样我就可以遍历这些类的对象集合,并在每个对象上调用foo()。在 Dart/Flutter 中最好/正确的方法是什么?混合?该集合的类型是什么?

【问题讨论】:

  • 你能提供更多的上下文吗?很少需要直接访问小部件的数据。通常,您在创建期间设置其数据,小部件可能会更新某些状态对象或使用回调。
  • @Eiko 上述每个类都代表一个需要验证的页面。有一个永久可见的导航栏,始终位于页面小部件下方。当用户按下导航栏中的按钮时,进入下一页需要以 foo() 返回 true 为条件。所以我想要一个List<Page> pages,并在按下导航栏按钮时在当前选择的页面上调用 foo()。那么问题是:Page 类型是什么样的?我目前所知道的是它必须派生StatefulWidget。而foo需要访问成员变量。

标签: flutter dart


【解决方案1】:

所描述的功能可以通过 Dart 中的Interfaces 来实现

class Widget {

}

abstract class MyCustomWidget extends Widget {
  String foo( String argName);
}

class Widget1 implements MyCustomWidget {
  String foo( String argName) {
    return argName;
  }
}

class Widget2 implements MyCustomWidget {
  String foo( String argName) {
    return '$argName$argName';
  }
}

void main() {
  Widget1 w = new Widget1();
  Widget2 w2 = new Widget2();
  var widgets = [w, w2];
  for (int i = 0; i < widgets.length; i++) {
    print(widgets[i].foo('hello ${i + 1}'));
  }
}

也就是说,flutter 推荐组合而不是继承。 见:Flutter StatefulWidget - State class inheritance?

【讨论】:

    猜你喜欢
    • 2020-07-06
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2023-01-31
    • 2021-08-29
    相关资源
    最近更新 更多