0

我有来自 get API 的响应,响应是一个对象数组。在响应对象中,有一个具有在线图像字符串的图像属性。我正在从 API 获取数据,然后将其插入 SQLite 数据库,以便在离线时拥有该数据。我不想在本地文件夹中存储或下载图像文件,因为数据量约为 2k。如果我在资产文件夹中存储这么多图像,我的应用程序将非常大。离线时如何从数据库中获取图像?我应该将图像字符串转换为 BASE64 字符串并使用 Image.memory 吗?这是这样做的方法吗?以下是我从 API 得到的响应。

{
"name": "Kamal",
"image": "https://drive.google.com/file/d/1y1yYO0X8warJliizAo5ghKRP6cFdYvb9/view?usp=sharing",
"age": 25,
"phoneNo": 156789798
}

更新:启动我的应用程序时,我想从数据库中获取图像字符串并加载缓存或任何本地目录以供离线使用。我使用了 CachedNetworkImageProvidercached_network_image包。它给了我以下错误

Exception: Could not instantiate image codec.

下面给出了我从 API 保存在 sqlite 中的图像字符串

"image": "https://drive.google.com/file/d/1y1yYO0X8warJliizAo5ghKRP6cFdYvb9/view?usp=sharing",
4

1 回答 1

0

我遇到了同样的问题,并提出了一个解决方案,其概念是获取图像 url 并将 url 保存在本地数据库中,然后当您第一次获取图像时,您可以将其保存在根路径中目录。这个系统有一个配置。所以从下次应用程序需要获取图像时,它会首先查看它的离线目录,然后如果找不到图像则在线。这里是代码。

import 'package:path/path.dart' as p;   
    class ImageCashUtil {
      ImageCashUtil() {
        init();
      }
      init() async {
        WidgetsFlutterBinding.ensureInitialized();
        _appDocsDir = await getApplicationDocumentsDirectory();
        return _appDocsDir;
      }
    
      File fileFromDocsDir(String filename) {
        String pathName = p.join(_appDocsDir.path, filename);
        return File(pathName);
      }
    }
    
         Image(
                image: NetworkToFileImage(
                  url: imageUrl,
                  file: imageCashUtil.fileFromDocsDir(id),
                  debug: true,
                ),
                fit: BoxFit.cover,
              )

       
于 2020-07-18T12:57:34.087 回答