[英]How to get Downloads path in Flutter?
I am using the below code to get the path to Downloads folder:我正在使用以下代码获取下载文件夹的路径:
final output = await getExternalStorageDirectory();
RegExp pathToDownloads = new RegExp(r'.+0\/');
final outputPath = '${pathToDownloads.stringMatch(output.path).toString()}Downloads';
The above code generates this string: /storage/emulated/0/Downloads
上面的代码生成这个字符串: /storage/emulated/0/Downloads
But console says "No such file or directory".但是控制台说“没有这样的文件或目录”。 I created this path string because some answers on stack overflow mention that the above is the location of the downloads folder but it isn't.我创建了这个路径字符串,因为堆栈溢出的一些答案提到上面是下载文件夹的位置,但它不是。 So what is the path to downloads folder on android and how to get access to it?那么 android 上的下载文件夹的路径是什么以及如何访问它?
You can copy paste run full code below您可以在下面复制粘贴运行完整代码
The following example code write a text file to Downloads
folder以下示例代码将文本文件写入Downloads
文件夹
Step 1: You can add WRITE_EXTERNAL_STORAGE
to AndroidManifest.xml
第 1 步:您可以将WRITE_EXTERNAL_STORAGE
添加到AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Step 2: Use package ext_storage
https://pub.dev/packages/ext_storage and Request permission with https://pub.dev/packages/permission_handler 4.4.0第 2 步:使用 package ext_storage
https://pub.dev/packages/ext_storage并使用 Z5E056C500A1C4B6A7110B540D807BADE_handler 请求权限4.dev.dev.08/permission_handler://4.
dependencies:
flutter:
sdk: flutter
ext_storage: any
permission_handler: 4.4.0
Step 4: Request permission第 4 步:请求许可
void requestPermission() {
PermissionHandler().requestPermissions([PermissionGroup.storage]);
}
Step 5: get Downloads
folder with ExtStorage.getExternalStoragePublicDirectory
第 5 步:使用ExtStorage.getExternalStoragePublicDirectory
获取Downloads
文件夹
String path = await ExtStorage.getExternalStoragePublicDirectory(
ExtStorage.DIRECTORY_DOWNLOADS);
working demo工作演示
full code完整代码
import 'package:flutter/material.dart';
import 'package:ext_storage/ext_storage.dart';
import 'dart:io';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() async {
String path = await ExtStorage.getExternalStoragePublicDirectory(
ExtStorage.DIRECTORY_DOWNLOADS);
print(path);
File file = await File('$path/counter.txt');
file.writeAsString('this is test');
setState(() {
_counter++;
});
}
void requestPermission() {
PermissionHandler().requestPermissions([PermissionGroup.storage]);
}
@override
void initState() {
requestPermission();
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: Icon(Icons.add),
),
);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.