簡體   English   中英

Flutter path_provider 在 Android 上出現錯誤,而在 iOS 上完美運行

[英]Flutter path_provider error on Android, while on iOS works perfectly

我在我的 Flutter 應用程序中使用 [ flutter_pdfview ][1] package,以便展示從 Internet 下載的 PDF 文件。 我使用path_provider package 下載文件並將其存儲在設備中。

在 iOS 上運行應用程序時,這兩個包都工作得很好,但是當我在 Android(在 VSCode 中的 Android 模擬器內)運行它時,似乎path_provider無法加載文件。

在控制台中,我收到此錯誤消息:

[onError, {error: java.io.FileNotFoundException: No content provider: thisIsMyFilePath}]

我正在下載並保存這樣的文件:

Future<File> getFileFromUrl(String url, {name}) async {
    var fileName;

    if (name != null) {
      fileName = name;
    }

    try {
      var data = await http.get(url);
      var bytes = data.bodyBytes;
      var dir = await getApplicationDocumentsDirectory();
      File file = File("${dir.path}/" + fileName + ".pdf");
      print(dir.path);
      File urlFile = await file.writeAsBytes(bytes);
      return urlFile;
    } catch (e) {
      throw Exception("Error opening url file");
    }
}

任何人都知道這里只有 Android 的錯誤是什么? 也許我需要在清單中添加一些我不知道的東西?

非常感謝:[1]: https://pub.dev/packages/flutter_pdfview

編輯:Alberto Miola 回答

var data = await http.get(url);
      var bytes = data.bodyBytes;
      var dir = await getApplicationDocumentsDirectory();
      final name = p.join(dir.path, fileName + ".pdf");//From Alberto Miola's answer
      File file = File(name);
      print(dir.path);
      File urlFile = await file.writeAsBytes(bytes);
      return urlFile;
    } catch (e) {
      throw Exception("Error opening url file");

使用文件系統時,安全的跨平台解決方案涉及使用path_provider (正如您所做的那樣)和path

import 'package:path/path.dart' as p;

導入后,您可以使用 join 安全地“鏈接”路徑,這樣您的代碼將變為:

final name = p.join(dir.path, filename + ".pdf");
final file = File(name);

基本上join決定如何在底層操作系統上正確創建文件的路徑,您應該依賴它而不是手動編寫斜杠。 此外,請確保您具有對清單文件的寫入和讀取權限。

我發現了這個錯誤。 問題是文件名是用非英文字母寫的。 似乎 package 在 Android 上讀取僅限英文字符。 我已將其更改為 static 字符串,它似乎工作正常

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM