Flutter 如何将数据保存到永久存储器并检索它?

Flutter 如何将数据保存到永久存储器并检索它?,flutter,dart,Flutter,Dart,我想将数据保存在设备上,当用户从文件管理器转到所需路径时,应该可以看到该设备上的数据 现在我有两个问题: 一,- 与将图像保存在存储中(而不是缓存图像)的社交网络一样,我希望将图像保存到所需的路径存储中,并且图像应该可以像cacheNetworkImage一样访问。 那我该怎么办 因为我加载了很多图像,缓存它们不是一个好的解决方案,因为它占用了大量的RAM 二,- 此场景与前一个场景类似,但我使用一些ID将一些媒体下载到我的存储中。 但我想要一个只读ID,如果用户点击该文件,就执行它。 那个么,

我想将数据保存在设备上,当用户从文件管理器转到所需路径时,应该可以看到该设备上的数据

现在我有两个问题:

一,- 与将图像保存在存储中(而不是缓存图像)的社交网络一样,我希望将图像保存到所需的路径存储中,并且图像应该可以像cacheNetworkImage一样访问。 那我该怎么办

因为我加载了很多图像,缓存它们不是一个好的解决方案,因为它占用了大量的RAM

二,- 此场景与前一个场景类似,但我使用一些ID将一些媒体下载到我的存储中。 但我想要一个只读ID,如果用户点击该文件,就执行它。 那个么,如何访问存储路径文件中现有文件的名称呢


感谢社区。非常感谢您的帮助。

您可以在基本库和更高级库之间进行选择

在第一个选项中,您可以列出文件并通过以下方式读取:

void checkDirs() async{
  Directory tempDir = await getApplicationDocumentsDirectory();
  List<FileSystemEntity> directory = tempDir.listSync();
  directory.forEach((x) => debugPrint(x.path));
}

Future<File> readImage(String path) async{
  return File(path);
}
Container(child: FutureBuilder<File>(
  future: readImage("some_path"),
  builder: (BuildContext context,
    AsyncSnapshot<File> snapshot) {
    if (snapshot.connectionState ==
      ConnectionState.done &&
      snapshot.data != null) {
      return Image.file(
        snapshot.data,
      );
    } else if (snapshot.error != null) {
      return const Text(
        'Error Picking Image',
        textAlign: TextAlign.center,
      );
    } else {
      return const Text(
        "No photo"
      );
    }
  },
))
void checkDirs()异步{
目录tempDir=等待getApplicationDocumentsDirectory();
List directory=tempDir.listSync();
forEach((x)=>debugPrint(x.path));
}
未来读取映像(字符串路径)异步{
返回文件(路径);
}
并以这种方式呈现:

void checkDirs() async{
  Directory tempDir = await getApplicationDocumentsDirectory();
  List<FileSystemEntity> directory = tempDir.listSync();
  directory.forEach((x) => debugPrint(x.path));
}

Future<File> readImage(String path) async{
  return File(path);
}
Container(child: FutureBuilder<File>(
  future: readImage("some_path"),
  builder: (BuildContext context,
    AsyncSnapshot<File> snapshot) {
    if (snapshot.connectionState ==
      ConnectionState.done &&
      snapshot.data != null) {
      return Image.file(
        snapshot.data,
      );
    } else if (snapshot.error != null) {
      return const Text(
        'Error Picking Image',
        textAlign: TextAlign.center,
      );
    } else {
      return const Text(
        "No photo"
      );
    }
  },
))
容器(子项:FutureBuilder(
未来:readImage(“某些路径”),
生成器:(BuildContext上下文,
异步快照(快照){
如果(snapshot.connectionState==
连接状态。完成&&
snapshot.data!=null){
返回Image.file(
快照数据,
);
}else if(snapshot.error!=null){
返回常量文本(
“拾取图像时出错”,
textAlign:textAlign.center,
);
}否则{
返回常量文本(
“没有照片”
);
}
},
))

第二个在链接上有很好的记录。

将大量数据保存到移动存储不是一个好的做法,muy建议使用API或使用Azure或AWS等云服务来存储数据,然后在移动应用程序上加载所需的数据