Flutter中是否有一种方法或软件包可以直接从直接URL将文件下载到Android和iOS的下载文件夹中,例如:https://******/image. jpg,无需任何用户开销,只需单击并下载即可。
yfjy0ee71#
是使用以下软件包来完全实现它:
dio: ^4.0.0 path_provider: ^2.0.2 permission_handler: ^8.0.0+2
然后使用以下代码:定义变量:
late String _localPath; late bool _permissionReady; late TargetPlatform? platform;
获取initState()中的设备平台
initState()
@override void initState() { super.initState(); if (Platform.isAndroid) { platform = TargetPlatform.android; } else { platform = TargetPlatform.iOS; } }
用于检查和请求设备权限:
Future<bool> _checkPermission() async { if (platform == TargetPlatform.android) { final status = await Permission.storage.status; if (status != PermissionStatus.granted) { final result = await Permission.storage.request(); if (result == PermissionStatus.granted) { return true; } } else { return true; } } else { return true; } return false; }
准备查找本地路径:
Future<void> _prepareSaveDir() async { _localPath = (await _findLocalPath())!; print(_localPath); final savedDir = Directory(_localPath); bool hasExisted = await savedDir.exists(); if (!hasExisted) { savedDir.create(); } } Future<String?> _findLocalPath() async { if (platform == TargetPlatform.android) { return "/sdcard/download/"; } else { var directory = await getApplicationDocumentsDirectory(); return directory.path + Platform.pathSeparator + 'Download'; } }
最后下载文件:
InkWell( onTap: () async { _permissionReady = await _checkPermission(); if (_permissionReady) { await _prepareSaveDir(); print("Downloading"); try { await Dio().download("https://******/image.jpg", _localPath + "/" + "filename.jpg"); print("Download Completed."); } catch (e) { print("Download Failed.\n\n" + e.toString()); } } }, child: Container( decoration: BoxDecoration( shape: BoxShape.circle, color: Colors.grey.withOpacity(0.5)), padding: EdgeInsets.all(8), child: Icon(Icons.download, color: Colors.black), ));
确保您已在AndroidManifest.xml中添加了所需的权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果iOS文件中未显示您的应用程序目录,则在Info.plist中添加以下行
Info.plist
<key>UISupportsDocumentBrowser</key> <true/>
flvlnr442#
您可以使用Dio软件包下载任何文件。一个强大的Http客户端,支持拦截器,全局配置,表单数据,请求取消,文件下载,超时等。
import 'package:dio/dio.dart'; var dio = Dio(); response = await dio.download('https://******/image.jpg');
2条答案
按热度按时间yfjy0ee71#
是使用以下软件包来完全实现它:
然后使用以下代码:
定义变量:
获取
initState()
中的设备平台用于检查和请求设备权限:
准备查找本地路径:
最后下载文件:
确保您已在
AndroidManifest.xml
中添加了所需的权限:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果iOS文件中未显示您的应用程序目录,则在
Info.plist
中添加以下行flvlnr442#
您可以使用Dio软件包下载任何文件。
一个强大的Http客户端,支持拦截器,全局配置,表单数据,请求取消,文件下载,超时等。