[英]Flutter: Could not resolve all artifacts for configuration ':path_provider:classpath'
[英]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.