我需要从我的文件列表中删除我用 file_picker flutter 选择的文件
i need to delete a file from my file list that i picked them with file_picker flutter
https://pub.dev/packages/file_picker
我用这个包
这是我的代码的一部分,就像我上传的图片Ìi 试图从列表中删除一个文件
只是这个包中有 clearCachedFiles 方法
ListView.separated(
itemCount: _paths != null && _paths!.isNotEmpty ? _paths!.length : 1,
itemBuilder: (BuildContext context, int index) {
final bool isMultiPath = _paths != null && _paths!.isNotEmpty;
final String name = (isMultiPath ? _paths!.map((e) => e.name).toList()[index] : _fileName ?? '...');
final path = kIsWeb ? null : _paths!.map((e) => e.path).toList()[index].toString();
return ListTile(
leading: GestureDetector(
onTap: (){
setState(() {
_paths!.map((e) => e.path).toList().removeAt(index);
deleteFile(File(_paths!.map((e) => e.path).toList()[index].toString()));
});
if (kDebugMode) {
print('delete file ' + _paths!.map((e) => e.path).toList()[0].toString());
}
},
child: const Icon(Icons.highlight_remove_rounded,color: Colors.red,)),
trailing: Text(name),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(),
)),
and this method use for delete all files in this package
void _clearCachedFiles() async {
_resetState();
try {
bool? result = await FilePicker.platform.clearTemporaryFiles();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: result! ? Colors.green : Colors.red,
content: Text((result ? 'Temporary files removed with success.' : 'Failed to clean temporary files')),
),
);
} on PlatformException catch (e) {
_logException('Unsupported operation' + e.toString());
} catch (e) {
_logException(e.toString());
} finally {
setState(() => _isLoading = false);
}
}
好吧,对于 remove
列表中的项目,您必须调用 List.removeAt()
函数,并且还必须传递 parenthesis
中的项目索引,如下所示:
leading: GestureDetector(
onTap: (){
_paths!.removeAt(index); //call this functions to remove item from your list
setState(() {
_paths!.map((e) => e.path).toList().removeAt(index);
deleteFile(File(_paths!.map((e) => e.path).toList()[index].toString()));
});
if (kDebugMode) {
print('delete file ' + _paths!.map((e) => e.path).toList()[0].toString());
}
},
child: const Icon(Icons.highlight_remove_rounded,color: Colors.red,)),
trailing: Text(name),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(),
))
ListView.separated(
itemCount: _paths != null && _paths!.isNotEmpty ? _paths!.length : 1,
itemBuilder: (BuildContext context, int index) {
final bool isMultiPath = _paths != null && _paths!.isNotEmpty;
final String name = (isMultiPath ? _paths!.map((e) => e.name).toList()[index] : _fileName ?? '...');
final path = kIsWeb ? null : _paths!.map((e) => e.path).toList()[index].toString();
return ListTile(
leading: GestureDetector(
onTap: (){
setState(() {
_paths!.map((e) => e.path).toList().removeAt(index);
deleteFile(File(_paths!.map((e) => e.path).toList()[index].toString()));
});
if (kDebugMode) {
print('delete file ' + _paths!.map((e) => e.path).toList()[0].toString());
}
},
child: const Icon(Icons.highlight_remove_rounded,color: Colors.red,)),
trailing: Text(name),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(),
)),
and this method use for delete all files in this package
void _clearCachedFiles() async {
_resetState();
try {
bool? result = await FilePicker.platform.clearTemporaryFiles();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
backgroundColor: result! ? Colors.green : Colors.red,
content: Text((result ? 'Temporary files removed with success.' : 'Failed to clean temporary files')),
),
);
} on PlatformException catch (e) {
_logException('Unsupported operation' + e.toString());
} catch (e) {
_logException(e.toString());
} finally {
setState(() => _isLoading = false);
}
}
好吧,对于 remove
列表中的项目,您必须调用 List.removeAt()
函数,并且还必须传递 parenthesis
中的项目索引,如下所示:
leading: GestureDetector(
onTap: (){
_paths!.removeAt(index); //call this functions to remove item from your list
setState(() {
_paths!.map((e) => e.path).toList().removeAt(index);
deleteFile(File(_paths!.map((e) => e.path).toList()[index].toString()));
});
if (kDebugMode) {
print('delete file ' + _paths!.map((e) => e.path).toList()[0].toString());
}
},
child: const Icon(Icons.highlight_remove_rounded,color: Colors.red,)),
trailing: Text(name),
);
},
separatorBuilder: (BuildContext context, int index) => const Divider(),
))