如何解决Flutter.dev SharedPreferences问题
这是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 Dev Docs:
通常,建议仅将setState方法用于包装对状态的实际更改,而不是用于与更改相关联的任何计算。 https://api.flutter.dev/flutter/widgets/State/setState.html
我是Flutter的新手学习者,我需要问这个问题,以便我能更好地理解一切。
解决方法
flutter文档面向刚开始编程的人。他们无法为您提供许多您需要考虑的不同事物。 flutter文档的初学者通常不会展示出flutter和编程方面的最佳实践。您的三个答案是正确的。
-
是的,最好将其声明为全局变量,但只声明给使用它的类。例如,最好在顶部声明
SharedPreferences _prefs
并在_prefs = await SharedPreferences.getInstance() inside _loadCounter()
之前声明。
请注意,_关键字会将变量标记为私有。 -
您在这里是正确的。不必要,您可以将其替换为
_counter++
-
最好将其移至
setState()
下方,以便无需等待prefs.setInt('counter',_counter);
完成操作即可重建屏幕。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。