我正在开发一个Flutter应用程序,我正在实现Hive数据库缓存数据。我已经添加了两个hive
and hive_flutter
包。我从API获取数据并将其存储到Hive以更新数据,当我使用连接到互联网的应用程序时,它工作正常,但当我尝试在离线时阅读时,它不起作用。下面是我调用来获取数据的API方法的代码:
static Future<List<UserPost>> getPosts() async {
//I call my API in try block, if its successful, I update the data in hive
List<UserPost> posts = [];
Hive.openBox(Constants.APIDATA_BOX);
try {
var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts'),);
if (response.statusCode == 200) {
//Clear hive box from old data
Hive.box(Constants.APIDATA_BOX).clear();
Hive.box(Constants.APIDATA_BOX).put(Constants.API_DATA,jsonDecode(response.body));
}
} catch (e) {
print('You are not connected to internet');
}
//I am getting data here from hive database and it works fine while connected to internet
var listMaps =await Hive.box(Constants.APIDATA_BOX).get(Constants.API_DATA, defaultValue: []);
posts = listMaps.map<UserPost>((map) {
//Here flow stucked whenever working offline,
//Data is also available but here conversion cause error, I have tried many way but fails.
return UserPost.fromMap(map);
}).toList();
return posts;
}
我不知道为什么我得到错误,我已经尝试了许多转换方式在这里,但所有的作品,而在线。任何帮助都将受到高度赞赏。
1条答案
按热度按时间yqkkidmi1#
我想我已经理解了这个错误,但是你应该更好地解释你遇到的是哪种类型的错误。无论如何,请注意Hive上的操作,这些操作通常是异步的,例如
Hive.openBox(Constants.APIDATA_BOX);
。所以当你有互联网连接时,你必须等待响应,Hive有时间打开盒子,否则它会抛出错误,所以,考虑到未来,你应该这样做:
请注意,普通框中的
await Hive.put()
并不是严格必需的,如文档中所述