Flutter 中的面向对象模式

问题描述 投票:0回答:1

我是 Flutter 和 Dart 的初学者,需要帮助。
我有两节课:
ManPage 扩展 StateFullWidget
WomanPage 扩展 StateFullWidget

它们有两个关联的类 _ManPageState_WomanPageState
_ManPageState 扩展 State
_WomanPageState 扩展 State

这两个类中有很多重复的代码,例如从服务器获取信息并呈现它。 ManPage 和 WomanPage 中的代码也重复。

然后我尝试让ManPage和WomanPage继承自PersonPage。
我首先创建一个 _PersonState 希望它可以包含 _ManPageState 和 _WomanPageState 的所有通用代码,但我不知道如何将它使用到 _ManPageState 和 _WomanPageState 中。

这样做的好模式是什么?

组合可以比继承更好地解决我的问题吗?


任何建议都会非常有帮助。
非常感谢 多米尼克

flutter dart oop inheritance
1个回答
0
投票

您可以使用泛型来实现这一点。您可以拥有一个扩展

StatefulWidget
的自定义小部件,并将其相应的状态类扩展
State
限制为之前定义的小部件。例如:

abstract class PersonStatefulWidget extends StatefulWidget {
  const PersonStatefulWidget({Key? key, required this.name}) : super(key: key);
  
  final String name;
}

abstract class _PersonWidgetState<T extends PersonStatefulWidget> extends State<T> {
  Widget buildSomeWidget(BuildContext context) {
    return const Placeholder();
  }
  
  void doSomethingOnTap() {
    // Do something
  }
}

class ManPage extends PersonStatefulWidget {
  const ManPage({super.key, required super.name});

  @override
  State<ManPage> createState() => _ManPageState();
}

class _ManPageState extends _PersonWidgetState<ManPage> {
  @override
  Widget build(BuildContext context) {
    return const Placeholder();
  }
}

如果你只想分享通用的方法或行为,你也可以使用mixin

© www.soinside.com 2019 - 2024. All rights reserved.