gpt4 book ai didi

asynchronous - Flutter,功能需要等到数据可用

转载 作者:IT王子 更新时间:2023-10-29 06:40:20 26 4
gpt4 key购买 nike

我是 Flutter 编程的新手。我试图理解异步函数调用,但偏离了轨道。

我想以安全的方式将数据存储在我的设备上。所以,写入数据时,数据会被加密,读取数据时,数据会被解密。应用程序不知道设备上的数据已加密。
我制作了一个使用 SharedPreferences 库的存储类。
读取函数的第二个功能是应用程序将等待数据可用。

我是这样写的

  static String getString(String key)  {
SharedPreferences prefs = await SharedPreferences.getInstance();

return _decrypt(prefs.getString(key));
}

现在编译器提示说 await 语句不是预期的。

当我将函数更改为返回 Future 的异步函数时,它起作用了。然而,我的等待问题向上移动到调用 getString 函数的地方。
目标:函数应返回解密后的字符串,主线程需要等待直到数据可用。

从 OP 的答案中添加,应该是编辑:

抱歉不够具体。我的页面正在加载它自己的线程。在线程中,我想从商店中获取值(value)。线程无法继续,因为下一条语句取决于存储中的数据。

例如我需要商店的用户名和密码才能登录。用户名和密码分开存储。

当然我可以嵌套“then”语句,但我认为为了源代码的可读性,最好等到从存储中读取值。

最佳答案

您永远不应该阻塞主线程,因为它会阻塞应用程序操作。您的初始化可能需要很长时间,系统可以在必要时终止您的应用。

要解决你的问题,最好不要阻塞主线程,可以通过创建一个加载屏幕,等待数据加载完成,并显示最终的应用程序屏幕来完成。

代码原型(prototype)如下:

class HomePage extends StatefulWidget {
@override
HomePageState createState() => HomePageState();
}

class HomePageState extends State<HomePage> {
String data;

@override
void initState() {
super.initState();

loadData().then((data) {
setState(() {
this.data = data;
});
});
}

Future loadData() async {
data = 'xxx'; // load your data from SharedPreferences
return data;
}

@override
Widget build(BuildContext context) {
if (data == null) {
loadData();
return LoadingScreen();
} else {
return MainScreen();
}
}
}

关于asynchronous - Flutter,功能需要等到数据可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54170972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com