【发布时间】:2021-01-03 09:00:56
【问题描述】:
这是 Flutter.dev 提供的 SharedPreferences 示例的一小部分,我有问题:
完整的示例代码在这里:https://flutter.dev/docs/cookbook/persistence/key-value
int _counter = 0;
@override
void initState() {
super.initState();
_loadCounter();
}
//Loading counter value on start
_loadCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); // <-------------- 1
setState(() {
_counter = (prefs.getInt('counter') ?? 0);
});
}
//Incrementing counter after click
_incrementCounter() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); // <-------------- 1
setState(() {
_counter = (prefs.getInt('counter') ?? 0) + 1; // <------------------------------ 2
prefs.setInt('counter', _counter); // <------------------------------------------ 3
});
}
我对这个例子有 3 个问题:
-
将
prefs变量设为全局不是更好吗?它会增加内存使用量,但不会提高性能吗?如果不是全局的,每次我们点击按钮(增加计数器)时,它必须声明变量并分配它,因为它是异步的,我认为它会进一步降低性能。 -
每次我们点击按钮,函数
_incrementCounter被调用,它从文件中检索_counter的值,为什么?_counter变量是全局变量,我认为不需要prefs.getInt('counter')并且该行应该只是_counter++; -
将这一行从
setState函数中移出不是更好吗?因为来自 Flutter 开发文档:
通常建议 setState 方法仅用于包装对状态的实际更改,而不是任何可能与更改相关联的计算。 https://api.flutter.dev/flutter/widgets/State/setState.html
我是 Flutter 学习新手,我需要问这个问题,以便更好地理解一切。
【问题讨论】: