簡體   English   中英

使用文件選擇器檢查 flutter 中的現有文件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM