custom_file_picker 0.0.1 copy "custom_file_picker: ^0.0.1" to clipboard
custom_file_picker: ^0.0.1 copied to clipboard

The file opener hierarchy system allows custom file hierarchies that must not match the running device file system.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:custom_file_picker/custom_file_picker.dart';

void main(List<String> args) {
  ThemeData theme = ThemeData(
    useMaterial3: true,
    colorScheme: ColorScheme.fromSeed(
      brightness: Brightness.light,
      seedColor: Colors.blue,
    ),
  );

  ThemeData darkTheme = ThemeData(
    useMaterial3: true,
    colorScheme: ColorScheme.fromSeed(
      brightness: Brightness.dark,
      seedColor: Colors.blue,
    ),
  );

  FilePicker(
    args,
    MainApp(theme: theme, darkTheme: darkTheme),
    theme: theme,
    darkTheme: darkTheme,
  );
}

class MainApp extends StatelessWidget {
  const MainApp({super.key, this.theme, this.darkTheme});

  final ThemeData? theme;
  final ThemeData? darkTheme;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      themeMode: ThemeMode.dark,
      theme: theme,
      darkTheme: darkTheme,
      debugShowCheckedModeBanner: false,
      home: const Scaffold(
        body: TestWidget(),
      ),
    );
  }
}

class TestWidget extends StatefulWidget {
  const TestWidget({super.key});

  @override
  State<TestWidget> createState() => _TestWidgetState();
}

class _TestWidgetState extends State<TestWidget> {
  final FileData file = FileData.createFolder(
    "data",
    DateTime.now(),
    [
      FileData.createFolder("images", DateTime.now(), [
        FileData.createFileFromFileName("next_img.png", DateTime.now()),
        FileData.createFileFromFileName("something.txt", DateTime.now()),
        FileData.createFolder("files", DateTime.now(), [
          FileData.createFileFromFileName("idk.xml", DateTime.now()),
          FileData.createFileFromFileName("something.png", DateTime.now()),
          FileData.createFileFromFileName("test.txt", DateTime.now()),
        ]),
      ]),
      FileData.createFileFromFileName("test.xml", DateTime.now()),
      FileData.createFileFromFileName("idk.urdf", DateTime.now()),
    ],
  );

  final FileData suggestedFile =
      FileData.createFile("newFile", "txt", DateTime.now());

  FileData removeChildrensChildren(FileData fileData) {
    for (FileData subFile in fileData.children) {
      subFile.children = [];
    }

    return fileData;
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            onPressed: () {
              FilePicker.open(file, ["xml", "png"], (String path) {
                print("selected: $path");
              });
            },
            child: const Text("Open File"),
          ),
          const SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              FilePicker.saveAs(file, suggestedFile, (String path) {
                print("selected: $path");
              });
            },
            child: const Text("Save As"),
          ),
          const Divider(height: 20, thickness: 3),
          ElevatedButton(
            onPressed: () {
              FilePicker.openAsync(
                  removeChildrensChildren(file.copy()), ["xml", "png"],
                  (String path) async {
                print("returning files for: $path");

                await Future.delayed(const Duration(seconds: 2));

                FileData? subData = file.getFileFromPath(path);
                return removeChildrensChildren(subData!.copy());
              }, (String path) {
                print("selected: $path");
              });
            },
            child: const Text("Open File Async"),
          ),
          const SizedBox(height: 20),
          ElevatedButton(
            onPressed: () {
              FilePicker.saveAsAsync(
                  removeChildrensChildren(file.copy()), suggestedFile,
                  (String path) async {
                // print("returning files for: $path");

                await Future.delayed(const Duration(seconds: 2));

                FileData? subData = file.getFileFromPath(path);
                return removeChildrensChildren(subData!.copy());
              }, (String path) {
                print("selected: $path");
              });
            },
            child: const Text("Save As Async"),
          ),
        ],
      ),
    );
  }
}
2
likes
140
points
21
downloads

Publisher

verified publisherjaykaycooperations.com

Weekly Downloads

The file opener hierarchy system allows custom file hierarchies that must not match the running device file system.

Repository (GitHub)
View/report issues

Topics

#widget

Documentation

API reference

License

MIT (license)

Dependencies

collection, desktop_multi_window, flutter, intl

More

Packages that depend on custom_file_picker