Flutter.dev SharedPreferences questions



以下是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个问题:

  1. prefs变量设为全局变量不是更好吗?它会增加内存使用量,但不会提高性能吗?如果不是全局的,每次我们点击按钮(增加计数器(时,它都必须声明变量并分配它,因为它是异步的,我认为它会进一步降低性能。

  2. 每次我们点击按钮,就会调用函数_incrementCounter,它会从文件中检索_counter的值,为什么?_counter变量是全局的,我认为不需要prefs.getInt('counter'),这行应该只是_counter++

  3. 把这一行从setState函数中移出不是更好吗?因为来自Flutter开发文档:

通常,建议setState方法仅用于包装状态的实际更改,而不是任何可能与更改相关的计算。https://api.flutter.dev/flutter/widgets/State/setState.html

我是长笛初学者,我需要问这个问题,这样我才能更好地理解每件事。

flutter文档面向刚开始编程的人。他们不会用许多你必须考虑的不同事情来压倒你。flutter文档的初学者部分通常不会显示flutter和编程的最佳实践。你的三个答案是正确的。

  1. 是的,最好将其声明为全局变量,但只能声明给使用它的类。例如,最好在顶部声明SharedPreferences _prefs,并声明_prefs = await SharedPreferences.getInstance() inside _loadCounter()
    请注意,_关键字会将变量标记为private。

  2. 你在这里是正确的。这是不必要的,你可以用_counter++代替它

  3. 最好将其移动到setState()以下,这样您的屏幕将在不等待prefs.setInt('counter', _counter);完成的情况下重建。

相关内容

  • 没有找到相关文章

最新更新