1 - 大多数时候构建方法(子小部件)调用同步和异步函数的数量。
前任:
所以 build 方法需要保留在单独的类小部件中(因为 build() 方法调用的所有其他方法都可以保留在一个类中)
2 - 使用小部件类,您可以创建许多其他类,而无需一次又一次地编写相同的代码(** Use Of Inheritance** (extends))。
并且还使用继承(扩展)和多态性(覆盖),您可以创建自己的自定义类。(在下面的示例中,我将通过扩展 MaterialPageRoute 自定义(覆盖)动画(因为我想自定义它的默认转换)。
class MyCustomRoute<T> extends MaterialPageRoute<T> {
MyCustomRoute({ WidgetBuilder builder, RouteSettings settings })
: super(builder: builder, settings: settings);
@override //Customize transition
Widget buildTransitions(BuildContext context,
Animation<double> animation,
Animation<double> secondaryAnimation,
Widget child) {
if (settings.isInitialRoute)
return child;
// Fades between routes. (If you don't want any animation,
// just return child.)
return new FadeTransition(opacity: animation, child: child);
}
}
3 - 函数不能为其参数添加条件,但使用类小部件的构造函数可以做到这一点。
下面的代码示例(框架小部件大量使用此功能)
const Scaffold({
Key key,
this.bottomNavigationBar,
this.bottomSheet,
this.backgroundColor,
this.resizeToAvoidBottomPadding,
this.resizeToAvoidBottomInset,
this.primary = true,
this.drawerDragStartBehavior = DragStartBehavior.start,
this.extendBody = false,
this.extendBodyBehindAppBar = false,
this.drawerScrimColor,
this.drawerEdgeDragWidth,
}) : assert(primary != null),
assert(extendBody != null),
assert(extendBodyBehindAppBar != null),
assert(drawerDragStartBehavior != null),
super(key: key);
4 - 函数不能使用 const 并且 Class 小部件可以使用 const 作为其构造函数。(影响主线程的性能)
5 - 您可以使用同一个类(类/对象的实例)创建任意数量的独立小部件,但函数不能创建独立的小部件(实例),但重用可以。
[每个实例都有自己的实例变量,并且完全独立于其他小部件(对象),但是函数的局部变量取决于每个函数调用*(这意味着,当您更改局部变量的值时,它会影响所有其他部分使用此功能的应用程序)]
类比函数有很多优点..(以上只是几个用例)
我最后的想法
因此,不要将函数用作应用程序的构建块,仅将它们用于执行操作。否则,当您的应用程序变得可扩展时,它会导致许多无法更改的问题。
- 使用函数来完成一小部分任务
- 使用类作为应用程序的构建块(管理应用程序)