函数和类之间有很大的区别。
让我从头开始解释它。(仅当务之急)
- 编程历史,我们都知道从简单的基本命令开始(例如-:Assembly)。 
- Next结构化编程附带了流程控件(例如-:if,switch,while,for等),该范例使程序员可以有效地控制程序流程,并且可以最大程度地减少循环的代码行数。 
- 接下来是过程编程,它将指令分为过程(功能)。这给程序员带来了两个主要好处。 - 1.将语句(操作)分组为单独的块。 - 2.可以重复使用这些功能块(功能) 
但是最重要的是,范式并没有提供管理应用程序的解决方案。过程编程也只能用于小型应用程序。那不能用于开发大型Web应用程序(例如,银行,谷歌,YouTube,Facebook,stackoverflow等),无法创建android sdk,flutter sdk等框架……
因此,工程师需要做更多的研究来以适当的方式管理程序。
因此对象是任何应用程序的基础。
类(运行时对象)将与这些变量(数据)相关的数据和函数分组。因此对象由数据及其相关操作组成。
[这里我不会解释oop]
👉👉👉好吧,让我们来了解一下flutter框架。👈👈👈
-Dart同时支持过程和oop,但是,Flutter框架完全通过使用classes(oop)构建。(因为大型可管理框架无法使用过程创建)
在这里,我将列出使用它们而不是使用类来制作小部件的功能的原因的列表。👇👇👇
1-大多数情况下,构建方法(子窗口小部件)调用同步和异步函数的数量。
例如: 
因此build方法需要保留在单独的类窗口小部件中(因为build()方法调用的所有其他方法都可以保留在一个类中)
2-使用窗口小部件类,您可以创建另一个类的编号,而无需一次又一次地编写相同的代码(** Use Of Inheritance **(扩展))。
并且还可以使用继承(扩展)和多态性(覆盖)来创建自己的自定义类。(在下面的示例中,我将通过扩展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-函数不能为其参数添加条件,但是可以使用类窗口小部件的构造函数。
下面的代码示例below(此功能在框架小部件中大量使用)
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-您可以使用同一类(类/对象的实例)创建任意数量的独立窗口小部件,但是函数无法创建独立窗口小部件(实例),但是可以重复使用。
[每个实例都有自己的实例变量,并且完全独立于其他小部件(对象),但是函数的局部变量取决于每个函数调用*(这意味着,当您更改局部变量的值时,它会影响变量的所有其他部分使用此功能的应用程序)]
与函数相比,类具有很多优点。(仅少数用例)
🤯我的最终想法
因此,请勿将函数用作应用程序的构建块,而仅将它们用于进行操作。否则,当您的应用程序具有可伸缩性时,它将导致许多难以解决的问题。
- 使用功能完成一小部分任务
- 使用类作为应用程序的构建块(管理应用程序)
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
您无法通过使用的语句(行)的数量来衡量程序的质量
📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍📍 📍📍📍📍📍📍📍
谢谢阅读