有什么办法可以同步获取Documents Directory?

时间:2020-01-01 21:04:32

标签: flutter dart

在显示第一个屏幕之前,我需要加载一个小的设置文件。

我目前正在使用PathProvider插件,但是其中的所有功能都是异步的。

有什么办法可以同步找到应用程序文档目录,然后在其上使用dart:io同步功能?而不是显示一个无穷小数秒的占位符。

编辑:考虑到前两个答案,可能我的解释确实很糟糕。答案表明我仍然使用async代码。问题是,我需要runApp()之前的目录,并且我不希望我的void main()async,因为这肯定会破坏任何启动动画。

据我所知,PathProvider API是async,仅是因为它利用了MethodChannel,即async,但是PathProvider在其背后的功能却几乎是同步的。

我要问的是-在Android或IOS上是否有一种方法可以以同步代码的方式了解ApplicationDocumentsDirectory?也许根本不使用平台特定的代码?

2 个答案:

答案 0 :(得分:0)

除了进行测试外,对于所有其他功能,您始终应该首选异步IO功能,因为在等待IO操作完成时,同步IO会阻止事件循环完成其他异步代码。您只需await打通电话,就能有效实现同步行为。

请参阅RawSynchronousSocket的文档,该文档具有以下警告(适用于在dart:io中标记为同步的所有IO调用):

下面的操作将阻止调用线程等待网络的响应。在等待这些操作完成时,线程无法处理其他事件。 RawSynchronousSocket不适合服务器等需要高性能或异步I / O的应用程序。

答案 1 :(得分:0)

您可以将FutureBuilder用于相同的目的,而不必担心执行。

它将允许您在后台执行过程,并允许您显示初始屏幕UI,直到指定的过程完成并且数据可以使用为止。

注意:默认情况下,任何需要访问设备的本机方法通道的插件或代码都将为async,因为对方法通道本身的访问应为async