Flutter文件管理插件simple_file_manager的使用

Flutter文件管理插件simple_file_manager的使用

Logo

Simple File Manager

一个简单的文件管理器,可以以简单的方式预览文件夹和文件,并下载文件。

特性

  • 列出文件夹和文件
  • 预览文件
  • 上传新文件
  • 创建新文件夹
  • 下载文件
  • 复制文件URL
  • 图片文件缩放

Demo

使用/示例

以下是使用 simple_file_manager 插件的基本示例:

import 'dart:convert';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:http_parser/http_parser.dart';
import 'package:simple_file_manager/simple_file_manager.dart';
import 'package:http/http.dart' as http;

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 这个小部件是你的应用的根。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Simple File Manager',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Simple File Manager'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    init();

    super.initState();
  }

  init() async {
    _myData = await getFilesData(null);
    setState(() {});
  }

  List<FileModel>? _myData;

  /// 获取文件数据
  Future<List<FileModel>?> getFilesData(String? parentId) async {
    var response = await http.get(
        Uri.parse(
          'yourBaseUrl.api/file/tree?parentId=${parentId ?? ''}&amp;skip=0'
          '&amp;count=0'),
       );
    Map<String, dynamic> json = jsonDecode(response.body);
    return List<FileModel>.from(json['data'].map((e) => FileModel.fromJson(e)));
  }

  Future<String> uploadFile(
      String? folderId, Uint8List? pickedFile, String? pickedFileName) async {
    var request = http.MultipartRequest(
        "POST",
        Uri.parse('yourBaseUrl.api/storage/folder/file/admin'));
       request.files.add(http.MultipartFile.fromBytes(
      'file',
      pickedFile!,
      filename: pickedFileName,
      contentType: MediaType("image", pickedFileName!.split('.').last),
    ));
    request.fields['name'] = pickedFileName;
    request.headers["Content-Type"] = "image/jpg";
    request.fields['path'] = 'img';
    request.fields['type'] = 'File';
    if (folderId != null) request.fields['parentId'] = folderId;

    var response = await request.send();
    var data = await response.stream.toBytes();
    String dataString = utf8.decode(data);
    var r = json.decode(dataString);
    return r['data']['thumbnailUrl'];
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.white,
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: _myData != null
          ? SimpleFileManager(
        filesList: _myData!,
              uploadButtonText: 'Upload',
              onUpload: (String? parentId, pickedFiles, pickedFileNames) async {
                if (pickedFiles != null) {
                  List<String> urlList = [];
                  for (int x = 0; x < pickedFiles.length; x++) {
                    urlList.add(await uploadFile(
                        parentId, pickedFiles[x], pickedFileNames?[x]));
                  }
                } else {
                  return null;
                }
              },
              // onCreateFolderClicked: (String? parentID,String? folderName) {
              // },
              onBack: (String? value) async {
                return await getFilesData(value);
              },
              onFolderClicked: (value) async {
                return await getFilesData(value!.id);
              },
              // placeholderFromAssets: 'assets/images/placeholder.png',
            )
          : null,
    );
  }
}

更多关于Flutter文件管理插件simple_file_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter文件管理插件simple_file_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


simple_file_manager 是一个用于 Flutter 的文件管理插件,它可以帮助你在应用中浏览、创建、删除、复制、移动和重命名文件和文件夹。以下是如何使用 simple_file_manager 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 simple_file_manager 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  simple_file_manager: ^0.0.1 # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 simple_file_manager 插件:

import 'package:simple_file_manager/simple_file_manager.dart';

3. 使用插件

3.1 初始化文件管理器

你可以通过 SimpleFileManager 类来管理文件。首先,你需要初始化文件管理器:

final fileManager = SimpleFileManager();

3.2 获取文件列表

你可以使用 getFiles 方法来获取指定目录下的文件列表:

List<FileSystemEntity> files = await fileManager.getFiles('/path/to/directory');

3.3 创建文件夹

你可以使用 createDirectory 方法来创建一个新文件夹:

await fileManager.createDirectory('/path/to/new_directory');

3.4 删除文件或文件夹

你可以使用 delete 方法来删除文件或文件夹:

await fileManager.delete('/path/to/file_or_directory');

3.5 复制文件或文件夹

你可以使用 copy 方法来复制文件或文件夹:

await fileManager.copy('/path/to/source', '/path/to/destination');

3.6 移动文件或文件夹

你可以使用 move 方法来移动文件或文件夹:

await fileManager.move('/path/to/source', '/path/to/destination');

3.7 重命名文件或文件夹

你可以使用 rename 方法来重命名文件或文件夹:

await fileManager.rename('/path/to/old_name', '/path/to/new_name');

4. 示例代码

以下是一个简单的示例,展示如何使用 simple_file_manager 插件来列出指定目录下的文件:

import 'package:flutter/material.dart';
import 'package:simple_file_manager/simple_file_manager.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: FileManagerExample(),
    );
  }
}

class FileManagerExample extends StatefulWidget {
  [@override](/user/override)
  _FileManagerExampleState createState() => _FileManagerExampleState();
}

class _FileManagerExampleState extends State<FileManagerExample> {
  List<FileSystemEntity> files = [];

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadFiles();
  }

  Future<void> _loadFiles() async {
    final fileManager = SimpleFileManager();
    final directory = '/storage/emulated/0/Download'; // 替换为你想浏览的目录
    List<FileSystemEntity> fileList = await fileManager.getFiles(directory);
    setState(() {
      files = fileList;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('File Manager Example'),
      ),
      body: ListView.builder(
        itemCount: files.length,
        itemBuilder: (context, index) {
          return ListTile(
            title: Text(files[index].path.split('/').last),
            subtitle: Text(files[index].path),
          );
        },
      ),
    );
  }
}
回到顶部