dart - 为什么等待飞镖中的path_provider?
问题描述
为什么 path_provider 中的目录方法会像这样等待?他们不是通过互联网呼叫网络。
Directory tempDir = await getTemporaryDirectory();
String tempPath = tempDir.path;
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
编辑:我认为我不够具体。我从方法签名中了解到它返回一个未来。我更多地问为什么它是未来,为什么这些方法是异步的。
是不是因为它们有点像 unix 文件系统的写入/读取,即阻塞?
解决方案
因为底层代码是异步的,并且返回一个Future
. 要获取从 a 返回的值,Future
您必须使用await
或.then()
。
path_provider
用于MethodChannel
调用本机代码,MethodChannel.invokeMethod()
函数是异步的。具体来说,本机代码(平台通道)的接口通过发送消息并等待响应来工作。它异步执行此操作,因此在等待您的请求在本机端完成时不会锁定您的应用程序。
Flutter 特定平台的 API 支持不依赖于代码生成,而是依赖于灵活的消息传递方式:
应用程序的 Flutter 部分通过平台通道向其主机、应用程序的 iOS 或 Android 部分发送消息。
主机监听平台频道,接收消息。然后,它使用本地编程语言调用任意数量的特定于平台的 API,并将响应发送回客户端,即应用程序的 Flutter 部分。
期货和异步代码不仅仅用于网络/互联网相关的工作。
推荐阅读
- javascript - 如何使 ReactJS onClick 函数更改文本区域的值?
- python - 创建用于将非字母数字字符转换为破折号的 Python 类
- c# - 循环为列表中的每个对象添加一个json
- reactjs - 在 React 中使用 Jest 和 Enzyme 进行测试时遇到错误
- android - 我们可以使用多个按钮从内部存储中选择文件并使用相同的按钮上传到数据库吗
- .net - 如何将 Docker 容器的相对路径重新映射到外部环境中的绝对路径?
- python - 将嵌套 python 列表简化为结构化树的最佳方法(同时保留顺序)
- spring-boot - 在 Axios 中向 Spring Boot Server 发送 RequestParam
- flutter - Dart 生成器:为什么我得到类型“LibraryDirectiveImpl”不是“Statement”类型的子类型
- javascript - 如何使用 REST API 作为托管应用程序从客户端上传和获取 SharePoint 文档库中的项目?