首页 > 解决方案 > 从 api 将数据保存到 localStorage

问题描述

我想将数据保存在本地存储上以使应用程序脱机工作。我想从api,json数据中获取数据并将它们保存到本地存储,PostList和Post是我的类

Future <PostsList> fetchPostsList(language) async {
  final response =  
    await http.get('https://sas-survey.urbanway.net/api/questions/1/${language}');

  if(response.statusCode == 200){
    // storagepost.setItem('resultPost', response.body);
    return PostsList.fromJson(json.decode(response.body));
  }else{
    // return storagepost.getItem('resultPost');
    throw Exception('Filed to load post');
  }
}
final LocalStorage storagee = new LocalStorage('result_app');
static PostsList resultsListEn = new PostsList();
    _addItemEn( String id,
                String question,
                String photo,
                List answers,
                String categoryid) {
        setState(() {
          final resulten = new Post(id: id, title: question, image: photo, answers: answers, category: categoryid);
          print(resulten.title.toString());
          resultsListEn.posts.add(resulten);
          _saveToStorageEn();
        });
      }  
      _saveToStorageEn() {
        widget.storagee.setItem('en', resultsListEn.toJsonEncodable());
      }
new FutureBuilder<PostsList>(
              future: fetchPostsList(en),
              builder: (context, snapshot){
                if(snapshot.hasData){
                  List<Post> questionsEn =snapshot.data.posts;
                  questionsEn.forEach((question){
                    _addItemEn(question.id, question.title, question.image, question.answers, question.category);
                  });
                  return Center();
                }else if(snapshot.hasError){
                  return Text("${snapshot.error}");
                }
                return CircularProgressIndicator();
              },
            ),

这是我的代码我缺少什么?

标签: dartflutter

解决方案


您可以将共享首选项用于基本数据。将 toJson 和 fromJson 方法添加到模型 PostList 和 Post 并使用 json.decode/encode 对其进行序列化并将其保存为字符串。读回来时将其转换回来并使用它。下面是我如何做到的示例。您的代码不够完整,无法进行调整。

get postValue {
  var jsonContent = sharedPreferencesInstance.getString('post-key');
  if(jsonContent != null) {
     return Post.fromJson(json.decode(jsonContent));
  }
  return null;
}


set postValue(Post post) => sharedPreferencesInstance.setString(
    'post-key', json.encode(post.toJson()));

推荐阅读