Flutter + Android-从后台隔离写入文件以在UI中读取?

问题描述

我正在开发一个需要在后台处理一些数据并尝试将其与后端云API同步的应用程序。我还将发布适用于iOS的应用程序,但现在严格来说这是一个Android问题/观察-

我的应用程序使用background_fetch启动后台处理程序,该处理程序在我的数据源上循环进行更改。找到一个后,它将创建一个HTTP POST请求并将该数据发送到我们的云API。当该操作失败时(例如,没有网络或后端返回错误的响应)-我想将该数据放入队列中,然后稍后重试。为此,我按以下方式实现Sembast:

Future<Map<String,dynamic>> cacheData(
      Map<String,dynamic> data,bool synced) async {
    var collection = intMapStoreFactory.store(_dataCacheName);
    var cacheItem = {
      'timestamp': DateTime.Now().toIso8601String(),'data': data,'synced': synced,};

    var index = cacheItem.hashCode;

    var result = await collection.record(index).put(await _db,cacheItem);
    return result;
  }

在上面的代码中,我将哈希(int)解析为文档的ID,并使用有关是否已缓存真值的数据插入数据(在这种情况下,始终为false,并带有时间戳)。据我所知,插入正在按我的意图进行。

我的队列处理器在不同的隔离上运行-在UI中运行(如果正在运行),或者在通过 background_fetch 生成后台任务的循环中运行。在弄明白这些问题之前,我什至没有过滤数据:

Future<List<Map<String,dynamic>>> getCachedData({
    bool includeSynced,}) async {
    var collection = intMapStoreFactory.store(_dataCacheName);
    
    var cacheItems = await collection.find(await _db);

    var sorted = cacheItems
        .map((item) => {
              'id': item.key,'timestamp': DateTime.parse(item['timestamp']),'synced': item['synced'],'data': item['data'],})
        .toList();
    sorted.sort((a,b) {
      DateTime ta = a['timestamp'];
      DateTime tb = b['timestamp'];
      return tb.compareto(ta);
    });

    return sorted;
  }

从以上两个代码中,我希望在插入sembast集合时,也可以在选择它们时看到这些相同的项目,但是我发现情况并非如此...我已经在隔离之间使用其他可共享资源(shared_preferences,文件等)来体验这一点。

这样的资源是否存在我不知道的东西,或者我做错了什么?我可以使用一种解决方案来解决我的问题吗?我与Sembast无关。我喜欢它是为了易于使用。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)