当前位置: 首页 > 知识库问答 >
问题:

Flutter:如何使用path_provider将文件写入本地目录?

楮法
2023-03-14

我正在开发一个Flutter应用程序,需要将文件写入本地系统(iOS、Android和Web)。我在逻辑上遵循了读写文件的留档,并使用path_provider制作了一个小例子来测试功能:

import 'package:path_provider/path_provider.dart';

...

  void _testPathProvider() async {
      // Directory appDocDir = await getTemporaryDirectory(); // Using a different dir. not working either
      // String appDocPath = appDocDir.path;

      Directory appDocDir = await getApplicationDocumentsDirectory();
      String appDocPath = appDocDir.path;
      debugPrint('$appDocPath/my_file.txt');

      // Save in local file system
      var file = await File('$appDocPath/my_file.txt').writeAsString('hello!');
  }

这个测试函数只是通过一个按钮来调用,没有什么疯狂之处。但当我在浏览器中运行时

Error: MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)
    at Object.throw_ [as throw] (http://localhost:42561/dart_sdk.js:5067:11)
at MethodChannel._invokeMethod (http://localhost:42561/packages/flutter/src/services/restoration.dart.lib.js:1560:21)
    at _invokeMethod.next (<anonymous>)
    at http://localhost:42561/dart_sdk.js:40571:33
    at _RootZone.runUnary (http://localhost:42561/dart_sdk.js:40441:59)
    at _FutureListener.thenAwait.handleValue (http://localhost:42561/dart_sdk.js:35363:29)
    at handleValueCallback (http://localhost:42561/dart_sdk.js:35931:49)
    at Function._propagateToListeners (http://localhost:42561/dart_sdk.js:35969:17)
    at _Future.new.[_completeWithValue] (http://localhost:42561/dart_sdk.js:35817:23)
    at async._AsyncCallbackEntry.new.callback (http://localhost:42561/dart_sdk.js:35838:35)
    at Object._microtaskLoop (http://localhost:42561/dart_sdk.js:40708:13)
    at _startMicrotaskLoop (http://localhost:42561/dart_sdk.js:40714:13)
    at http://localhost:42561/dart_sdk.js:36191:9

似乎这个问题是众所周知的,已经遵循了这里和这里的建议,包括:

  • 运行flatter clean并重新获取包裹
  • 完全关闭应用程序并重新运行
  • 将颤振升级至最新稳定状态
  • 重新将path_provider添加到我的pubspec中。亚马尔

我正在使用最新版本的依赖项(path\u提供程序:^2.0.9)。

非常感谢您的帮助。

共有1个答案

范鸿
2023-03-14

以下是评论中提到的data uri方法的示例:

import 'dart:html' as html;

  final bytes = utf8.encode('hello!');
  final dataUri = 'data:text/plain;base64,${base64.encode(bytes)}';
  html.document.createElement('a') as html.AnchorElement
    ..href = dataUri
    ..download = 'my_file.txt'
    ..dispatchEvent(html.Event.eventType('MouseEvent', 'click'));

确保该文件位于dart文件中,该文件仅在html可用时导入,或者最好使用package:universal_html

 类似资料:
  • 问题内容: 我想知道如何将以下代码转换为将这些行输出到文本文件,而不是标准输出: 该属性文件是: 谢谢。 问题答案: 将ConsoleAppender更改为FileAppender。 我发现 有用。如果使用此选项,则必须为fileName添加一个属性,并且可能还要设置maxFileSize。这是一个示例(将它们放在log4j.properties文件中): 还有其他附加程序。 根据时间滚动。 不滚

  • 问题内容: 输出文件包含: 问题出在哪里?如何使用写入文本文件? 问题答案: 你必须写String … 你可以试试。 要么 要么

  • 问题内容: 我使用下面的方法来写到: 我想知道这是否是使用NIO的正确方法。我已经阅读了一个方法,该方法带有三个参数: ReadableByteChannel src 好仓 长计 在我的情况下,我只有,而没有and和,有什么方法可以使用此方法来创建文件? 此外,对于Image,还有什么更好的方法可以仅从和NIO 创建映像? 任何信息对我来说都是非常有用的。在SO中也有类似的问题,但是我找不到适合我

  • 假设我正在编写另一个相机应用程序,并希望将图像准确地写入相机所做的相同位置,并以相机所做的相同名称准确地命名它们。 我将如何实现这一点? 如何知道相机文件的位置? 如何知道当前的命名约定? 如何获得该目录的权限? 任何回答都将不胜感激。 好吧,假设它不是真正的相机替代品。假设我想写图像以外的格式,比如音频、视频或其他。

  • 输出。 我想写的输出文件与inputfile完全相似,但顺序不是问题。我怎样才能做到,请帮帮我。

  • 我决定使用slf4j而不是Java自己的日志记录。我已经成功地使用SLF4J登录到控制台。但我不知道如何将其写入日志文件。日志文件将帮助我们收集运行时可能出现的错误。 我通过这样做来实现slf4j, 私有静态最终org.slf4j.LOGGER LOGGER=org.slf4j.loggerfactory.getlogger(class1.class); PropertyConfigurator.