如何排除部分代码在flutter中被热重载

fkaflof6  于 2023-04-13  发布在  Flutter
关注(0)|答案(1)|浏览(118)

我使用的是flutter dropbox client,它需要一些初始化代码,在每个应用程序会话中只运行一次,否则会导致整个应用程序崩溃。
有没有什么方法可以防止在热重启时调用部分代码?我试着在main() func之前设置全局变量,然后检查flag是否被设置-但在热重启时它也被重置了。

xmq68pz9

xmq68pz91#

当执行hot restart时,它会重置包括全局变量在内的所有内容。但它不会重置本地存储在设备内部的数据。您可以使用shared_preferences package来重置。
共享首选项将数据存储到仅可由您的应用使用的特定于平台的位置。
当你的init运行时,你可以将一个值存储到你的共享首选项中:

SharedPreferences prefs = await SharedPreferences.getInstance();
 await prefs.setBool('example', true);
 //this will store the bool value 'true' into a key labelled as 'example'

因此,在运行init之前,您可以首先检查它是否存在。

SharedPreferences prefs = await SharedPreferences.getInstance();
final bool example = prefs.getBool('example') ?? false;

@override
void initState() {
super.initState();
   if (!example) async {
     SharedPreferences prefs = await SharedPreferences.getInstance();
     await prefs.setBool('example', true);
    }
}

现在,如果你想重置这些数据,你可以通过添加以下代码或在你的应用中创建一个临时按钮来执行:

SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.remove('example'); // deletes 'example' value from shared prefs platform
or
await prefs.clear(); //deletes all values saved in shared prefs platform.

相关问题