我很困惑什么时候必须对变量使用final。
根据 StackOverflow 上的文档和答案,
如果你创建一个带有非final字段的StatefulWidget子类,将会导致DartAnalysis警告
但我上了这门课,一切都进展顺利
class Order extends StatefulWidget {
int hello = 1;
@override
_OrderState createState() => _OrderState();
}
class _OrderState extends State<Order> {
pizza _pizzaOrder = new pizza();
void setSize(String value) {
setState(() {
_pizzaOrder.size = value;
print(++widget.hello);
});
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个简单的应用程序,并且从未在程序中的任何地方使用过final或const。那么我必须在任何地方使用“final”/“const”吗?还是只是为了优化?什么时候应该使用“final”?
我认为这与 OOP 原则SOLID更相关,特别是开/闭原则。
当您构建小部件时,某些情况下您需要构造函数的一些参数才能定义类的属性。如果您不使用final您的属性,那么它可以被其他类(包括状态)修改。
在你的情况下:
print(++widget.hello);
Run Code Online (Sandbox Code Playgroud)
它可以工作,但可能会导致意外行为,想象一下许多类访问该属性并修改它,您不希望这样吗?
我发现了另一个原因StatefulWidget
StatefulWidget 实例本身是不可变的,并且将其可变状态存储在由 createState 方法创建的单独 State 对象中,或者存储在该 State 订阅的对象中,例如 Stream 或 ChangeNotifier 对象,这些对象的引用存储在 StatefulWidget 上的 Final 字段中本身。
| 归档时间: |
|
| 查看次数: |
13909 次 |
| 最近记录: |