[英]Checking the existing file in flutter using file picker?
我正在使用 flutter。我實現了 filePicker(),以選擇文件並將它們顯示在 listView 中。 我想知道我們如何檢查列表中已經存在的文件。 因此,文件選擇器無法再次添加以前存在的文件。 代碼附在下面。 如果有人幫忙,我很高興。
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
class pickFile extends StatefulWidget {
const pickFile({Key? key}) : super(key: key);
@override
State<pickFile> createState() => _pickFileState();
}
class _pickFileState extends State<pickFile> {
List<PlatformFile> files = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Add"),
actions: [
IconButton(
icon: const Icon(Icons.add),
onPressed: () async {
final result = await FilePicker.platform
.pickFiles(withReadStream: true, allowMultiple: true);
if (result == null) return;
files.add(result.files.first);
setState(() {});
},
),
],
),
body: Container(
width: 420,
height: 300,
child: show(
files: files,
),
),
);}}
您可以直接根據預期的索引列表進行刪除,
我使用的例子之一
Future<void> deleteList(idx) async { print('delete'); _classList.removeAt(idx); print(_classListSection); // images.clear(); String error = 'No Error Detected'; setState(() { _classList = _classList; _count--; // _error = error; }); }
在您的情況下,這是以下列表“文件”;
這里我們在檢查文件是否存在后將文件位置保存在item
列表中。 如果文件存在,我們會顯示snackbar
小部件。
List item = [];
List<Widget> widgets = [];
Future<void> Filepick(context) async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
//here the checking works---------------------->
var path2 = result.files.single.path;
if (!item.contains(path2)) {
item.add(path2);
File file = File(path2 ?? "");
setState(() {
widgets
.add(SizedBox(height: 100, width: 100, child: Image.file(file)));
});
} else {
// Scaffold.of(globalkey2.currentContext??context)
globalkey2.currentState
?.showSnackBar(SnackBar(content: Text("File Already Exist")));
}
} else {
// User canceled the picker
}
}
全碼
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(MaterialApp( home: sta()));
}
class sta extends StatefulWidget {
sta({Key? key}) : super(key: key);
@override
State<sta> createState() => _staState();
}
class _staState extends State<sta> {
GlobalKey<ScaffoldState> globalkey2 =
GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return Scaffold(
key: globalkey2,
appBar: AppBar(),
body: Container(
height: 750,
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Align(
alignment: Alignment.center,
child: Container(
height: 100,
width: 100,
child: OutlinedButton(
onPressed: () {
Filepick(context);
},
child: Text("Pick File"),
),
),
),
),
SizedBox(
height: MediaQuery.of(context).size.height - 200,
child: GridView.count(
mainAxisSpacing: 4,
crossAxisCount: 2,
children: [...widgets],
),
),
// ...widgets
],
),
));
}
List item = [];
List<Widget> widgets = [];
Future<void> Filepick(context) async {
FilePickerResult? result = await FilePicker.platform.pickFiles();
if (result != null) {
var path2 = result.files.single.path;
if (!item.contains(path2)) {
item.add(path2);
File file = File(path2 ?? "");
setState(() {
widgets
.add(SizedBox(height: 100, width: 100, child: Image.file(file)));
});
} else {
// Scaffold.of(globalkey2.currentContext??context)
globalkey2.currentState
?.showSnackBar(SnackBar(content: Text("File Already Exist")));
}
} else {
// User canceled the picker
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.