【发布时间】:2020-04-12 15:49:27
【问题描述】:
我正在尝试在颤振应用程序中下载一些文件。下载文件后,我希望能够向用户显示下载的文件及其修改日期、大小等信息。现在我正在检索这样的文件列表:
import 'dart:io' as io;
import 'package:flutter/material.dart';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
class Downloads extends StatefulWidget {
@override
_DownloadsState createState() => _DownloadsState();
}
class _DownloadsState extends State<Downloads> {
String directory;
List file = new List();
@override
void initState() {
super.initState();
_listofFiles();
}
void _listofFiles() async {
directory = (await getExternalStorageDirectory()).path;
setState(() {
file = io.Directory("$directory/").listSync();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Downloads"),
),
body: GridView.builder(
padding: EdgeInsets.all(10),
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
childAspectRatio: 0.9),
itemCount: file.length,
itemBuilder: (context, i) {
print(file[i]);
return GestureDetector(
onTap: () {
OpenFile.open(file[i].toString());
},
child: Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(4),
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.grey, blurRadius: 2, spreadRadius: 2),
]),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Icon(
Icons.insert_drive_file,
size: 50,
color: Colors.blue,
),
SizedBox(height: 10),
Text(file[i].toString())
],
),
),
);
}),
);
}
}
但我只能从上面的代码中获取文件路径,而不是文件名和文件扩展名或文件大小。我如何检索这些信息?
【问题讨论】:
-
当你有一个路径时,你可以创建一个 File 对象。 api.dart.dev/stable/2.7.2/dart-io/File-class.html 它有一个长度属性。使用一些正则表达式或 string.split,您可以自己找出名称和扩展名。
-
虽然它确实有效,但它也有一些缺陷。就像它返回路径一样[文件:'/storage/emulated/0/Android/data/com.example.test_app/files/picture.jpg']。所以它不完全是路径。而且我没有得到大小和修改日期等信息。
-
这对我来说似乎是一条路。您正在调用 File 对象上的字符串。您必须调用
.path或.absolute才能将路径作为字符串。也许一般的 dart 教程可以帮助你在深入了解 Flutter 之前理解这些概念。看看:dart.dev/tutorials/server/cmdline -
是的,我能够弄清楚。目录返回 FileSystemEntity ,它不是 File 对象。一旦我做了“是文件”检查,我就能够从返回的字符串中检索路径。谢谢。
-
我尝试运行您的示例代码,但只得到this。看来您已经解决了错误。如果您能提供解决方案并接受它作为答案,那就太好了。