Flutter 在任何类之外声明变量:为什么可能

Flutter 在任何类之外声明变量:为什么可能,flutter,dart,Flutter,Dart,我有一个文件fancy_button.dart用于定制颤振小部件FancyButton,类似于: class FancyButton扩展StatefulWidget{ // ... } 类FancyButtonState扩展了状态{ // ... } //任何类别以外的声明: Map_buttonColors={}; 最终随机=随机(); int next(int min,int max)=>min+\u random.nextInt(max-min); // ... 这个应用程序运行得很好。

我有一个文件
fancy_button.dart
用于定制颤振小部件
FancyButton
,类似于:

class FancyButton扩展StatefulWidget{
// ...
}
类FancyButtonState扩展了状态{
// ...
}
//任何类别以外的声明:
Map_buttonColors={};
最终随机=随机();
int next(int min,int max)=>min+\u random.nextInt(max-min);
// ...

这个应用程序运行得很好。注意,我在任何类之外声明并使用了一些变量。现在我的问题是:这怎么可能?Dart中的所有内容不应该像Java一样都在一个类中吗?

不,Dart支持在全局空间中定义的变量和函数。您可以通过在任何类之外声明的
main()
方法看到这一点


此外,全局变量(和静态类变量)是惰性计算的,因此在尝试使用它们时首先定义值。因此,即使有一堆全局变量没有使用,运行时也不会变慢。

在接触Dart之前,您是否来自Java

基本上,Dart不像Java那样是单类单文件。是的,它确实支持面向对象编程(以一种不同的方式)。构造函数的行为是不同的。没有
公共
私有
受保护的
关键字。请参考官方文件


无论如何,您不需要复杂的
公共静态void main()
。真正的入口点是
main()
。除非您定义了该函数,否则您将无法在命令行中运行文件。

“但程序基本上是从上到下运行的。”这是不正确的。程序以
main()
方法开始,全局变量按使用顺序定义。感谢您的更正。与python脚本不匹配(在回答此问题时)。按照您的说法,使用全局变量听起来确实是件好事吗?@Aegletes我有Java背景,所以我不太喜欢使用全局变量。这种延迟加载行为对于类中的静态变量也是有效的,这也是我大部分时间所做的。是的,我可以想象这会让java开发人员平静下来,但是很高兴知道,谢谢