LocalStorage在我们关闭flutter应用程序后不保存数据

wqsoz72f  于 2023-04-13  发布在  Flutter
关注(0)|答案(3)|浏览(292)

我是Flutter的新手,正在开发需要在LocalStorage中存储一些数据的应用程序,我成功地将数据存储到LocalStorage并从LocalStorage中检索数据,但当我关闭应用程序并重新打开时,它会刷新整个数据,当我们试图访问相同的数据时,它给出Null。我在这里附上我的示例代码,我是如何做的。它工作正常的唯一问题是它在重新启动应用程序后不持久化数据。

void saveData() async{

    final LocalStorage storage = new LocalStorage('brick-game');

    await storage.setItem('data', _data);  

}

@override
  Widget build(BuildContext context){

        final LocalStorage storage = new LocalStorage('brick-game');

        final data  = storage.getItem('data');

};

请让我知道我做错了什么或我错过了什么。你的帮助将不胜感激。谢谢

odopli94

odopli941#

由于某些原因,您必须等待本地存储为ready(虽然这应该是自动完成的)。因此,在调用getItem()之前,您需要await storage.ready;,如下所示:

Future<DataType> _getData() async {
  final LocalStorage storage = new LocalStorage('brick-game');
  await storage.ready;
  return await storage.getItem('data');
}

然后在你的build方法中,你可以使用一个FutureBuilder<T>()来构建你的UI。

@override
Widget build(BuildContext context) {
  return FutureBuilder<DataType>(
    future: _getData,
    builder: (BuildContext context) {
      if (snapshot.hasData) // we read data from storage
      else if (snapshot.hasError) // an error occured
      else // we are still loading
    },
  );
}
klsxnrf1

klsxnrf12#

本地存储有一个ready方法,这意味着需要一段时间才能访问存储
你的保存方法是async和你设置项目与await关键字,但当你再次启动应用程序你得到的项目没有await关键字
尝试创建获取项目的方法

getItems() async {
   final LocalStorage storage = new LocalStorage('brick-game');

   final data  = await storage.getItem('data');
   print(data);
}


@override
  Widget build(BuildContext context){

     getItems().then((_){
        print(data);
     });

};
fcwjkofz

fcwjkofz3#

如果你为它创建了一个抽象,你需要在main函数中初始化它,比如
System. out. println();
通过这种方式,我们确信存储器可用。

相关问题