Image 我如何在我的Flatter应用程序中访问特定目录中的文件
因此,我想访问设备上特定目录中的文件,但不知道如何访问 特别是,我只想让应用程序进入设备内部存储,从某些特定位置获取一些文件 在这个文件列表中,我想访问XENDER目录中的其他文档 在XENDER目录中,我现在想访问IMAGES文档中的文件 现在在这里,我只想能够在列表视图中列出我的颤振应用程序中的图像,当单击其中任何一个时,我可以将图像保存在一个文件中 像这样Image 我如何在我的Flatter应用程序中访问特定目录中的文件,image,file,flutter,dart,storage,Image,File,Flutter,Dart,Storage,因此,我想访问设备上特定目录中的文件,但不知道如何访问 特别是,我只想让应用程序进入设备内部存储,从某些特定位置获取一些文件 在这个文件列表中,我想访问XENDER目录中的其他文档 在XENDER目录中,我现在想访问IMAGES文档中的文件 现在在这里,我只想能够在列表视图中列出我的颤振应用程序中的图像,当单击其中任何一个时,我可以将图像保存在一个文件中 像这样 File file = await asset.file; 因此我可以在应用程序的其他地方使用它您应该在上查看路径提供程序插件
File file = await asset.file;
因此我可以在应用程序的其他地方使用它您应该在上查看路径提供程序插件。您要做的是读取Xender/image目录,并说将它们映射到列表或其他内容。请参阅下面我的实现。我试图以交错视图显示图像(假设图像为jpg格式):首先,将路径提供程序插件添加到pubspec.yaml
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
final Directory _photoDir = Directory('/storage/emulated/0/Xender/image');
class Photos extends StatefulWidget {
@override
PhotosState createState() {
return new PhotosState();
}
}
class PhotosState extends State {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
if(!Directory("${_photoDir.path}").existsSync()) {
return Scaffold(
appBar: AppBar(
title: Text("Xender Images"),
),
body: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: Center(
child: Text("All Xender images should appear here", style: TextStyle(
fontSize: 18.0
),),
),
),
);
}else {
var imageList = _photoDir.listSync().map((item) => item.path).where((
item) => item.endsWith(".jpg")).toList(growable: false);
if (imageList.length > 0) {
return Scaffold(
appBar: AppBar(
title: Text("Xender Images"),
),
body: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: StaggeredGridView.countBuilder(
padding: const EdgeInsets.all(8.0),
crossAxisCount: 4,
itemCount: imageList.length,
itemBuilder: (context, index) {
String imgPath = imageList[index];
return Material(
elevation: 8.0,
borderRadius: BorderRadius.all(Radius.circular(8)),
child: InkWell(
onTap: () {},
child: Hero(
tag: imgPath,
child: Image.file(
File(imgPath),
fit: BoxFit.cover,
),
),
),
);
},
staggeredTileBuilder: (i) =>
StaggeredTile.count(2, i.isEven ? 2 : 3),
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
),
),
);
} else {
return Scaffold(
appBar: AppBar(
title: Text("Xender images"),
),
body: Center(
child: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: Text("Sorry, No Images Where Found.", style: TextStyle(
fontSize: 18.0
),),
),
),
);
}
}
}
}
您应该在上查看路径提供程序插件。您要做的是读取Xender/image目录,并说将它们映射到列表或其他内容。请参阅下面我的实现。我试图以交错视图显示图像(假设图像为jpg格式):首先,将路径提供程序插件添加到pubspec.yaml
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
final Directory _photoDir = Directory('/storage/emulated/0/Xender/image');
class Photos extends StatefulWidget {
@override
PhotosState createState() {
return new PhotosState();
}
}
class PhotosState extends State {
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
if(!Directory("${_photoDir.path}").existsSync()) {
return Scaffold(
appBar: AppBar(
title: Text("Xender Images"),
),
body: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: Center(
child: Text("All Xender images should appear here", style: TextStyle(
fontSize: 18.0
),),
),
),
);
}else {
var imageList = _photoDir.listSync().map((item) => item.path).where((
item) => item.endsWith(".jpg")).toList(growable: false);
if (imageList.length > 0) {
return Scaffold(
appBar: AppBar(
title: Text("Xender Images"),
),
body: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: StaggeredGridView.countBuilder(
padding: const EdgeInsets.all(8.0),
crossAxisCount: 4,
itemCount: imageList.length,
itemBuilder: (context, index) {
String imgPath = imageList[index];
return Material(
elevation: 8.0,
borderRadius: BorderRadius.all(Radius.circular(8)),
child: InkWell(
onTap: () {},
child: Hero(
tag: imgPath,
child: Image.file(
File(imgPath),
fit: BoxFit.cover,
),
),
),
);
},
staggeredTileBuilder: (i) =>
StaggeredTile.count(2, i.isEven ? 2 : 3),
mainAxisSpacing: 8.0,
crossAxisSpacing: 8.0,
),
),
);
} else {
return Scaffold(
appBar: AppBar(
title: Text("Xender images"),
),
body: Center(
child: Container(
padding: EdgeInsets.only(bottom: 60.0),
child: Text("Sorry, No Images Where Found.", style: TextStyle(
fontSize: 18.0
),),
),
),
);
}
}
}
}
好的,谢谢,我还没有尝试,我现在会,但是我能问一下存储/模拟/0的确切含义吗?每个设备的存储都是这样安排的吗?存储/模拟/0是设备根目录,或者您称之为电话本地存储。好的,谢谢,我还没有尝试,我现在会,但是我能问一下存储/模拟/0的确切含义吗?是否每个设备的存储都是这样安排的存储/模拟/0是设备根目录或您称之为电话本地存储的目录。