Skip to content
This repository was archived by the owner on May 7, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 12 additions & 21 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,43 +1,34 @@
import 'dart:async';
import 'dart:io';

import 'package:filex/filex.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:permission/permission.dart';

class _FileExplorerState extends State<FileExplorer> {
var _ready = false;
FilexController controller;
FilexController? controller;

String _dirPath;
String _dirPath = '';
final _onReady = Completer<void>();

Future<void> getDir() async {
//dir = await getApplicationDocumentsDirectory();
final dir = await getExternalStorageDirectory();
switch (Platform.isAndroid) {
case true:
_dirPath = dir.path
.replaceFirst("Android/data/com.example.filex_example/files", "");
break;
default:
_dirPath = dir.path;
}

final dir = await getApplicationDocumentsDirectory();
_dirPath = dir.path;
print("Storage dir: $_dirPath");
_onReady.complete();
}

@override
void initState() {
getDir();
if (_onReady.isCompleted) {
controller = FilexController(path: _dirPath);
setState(() {
_ready = true;
});
}
super.initState();
Permission.requestPermissions([PermissionName.Storage])
.then((_) => _onReady.future.then((_) {
controller = FilexController(path: _dirPath);
setState(() => _ready = true);
}));
}

@override
Expand All @@ -48,13 +39,13 @@ class _FileExplorerState extends State<FileExplorer> {
actions: <Widget>[
IconButton(
icon: const Icon(Icons.add),
onPressed: () => controller.addDirectory(context),
onPressed: () => controller!.addDirectory(context),
)
],
),
body: _ready
? Filex(
controller: controller,
controller: controller!,
actions: <PredefinedAction>[PredefinedAction.delete],
)
: const Center(child: CircularProgressIndicator()),
Expand Down
9 changes: 4 additions & 5 deletions example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1

environment:
sdk: ">=2.7.0 <3.0.0"
sdk: ">=2.12.2 <3.0.0"

dependencies:
flutter:
sdk: flutter
filex:
path: ../
path_provider: ^1.6.24
permission: ^0.1.7
flutter:
sdk: flutter
path_provider: ^2.0.2

dev_dependencies:
flutter_test:
Expand Down
80 changes: 40 additions & 40 deletions lib/src/bloc.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart' as rx;

Expand All @@ -11,40 +10,40 @@ import "models/filesystem.dart";
/// The main controller
class FilexController {
/// Provide a path
FilexController({@required this.path}) {
FilexController({required this.path}) {
_bloc = _FilexBloc(path: path, itemController: _itemStream);
directory = Directory(path);
assert(
directory.existsSync(), "Directory ${directory.path} does not exist");
directory!.existsSync(), "Directory ${directory!.path} does not exist");
}

/// Current directory
Directory directory;
Directory? directory;

/// The current path to use
final String path;

_FilexBloc _bloc;
_FilexBloc? _bloc;
final _itemStream = rx.ReplaySubject<List<DirectoryItem>>();

/// Setter for show only dirs setting
set showOnlyDirectories(bool v) => _bloc.showOnlyDirectories = v;
set showOnlyDirectories(bool v) => _bloc!.showOnlyDirectories = v;

/// Setter for show hidden files setting
set showHiddenFiles(bool v) => _bloc.showHiddenFiles = v;
set showHiddenFiles(bool v) => _bloc!.showHiddenFiles = v;

/// Stream of directory items
Stream<List<DirectoryItem>> get changefeed => _itemStream.stream;

/// Delete a file or directory
Future<void> delete(DirectoryItem item) async => _bloc.deleteItem(item);
Future<void> delete(DirectoryItem item) async => _bloc!.deleteItem(item);

/// Create a directory
Future<void> createDirectory(String name) async =>
_bloc.createDir(directory, name);
_bloc!.createDir(directory!, name);

/// List a directory content
Future<void> ls() async => _bloc.lsDir(directory);
Future<void> ls() async => _bloc!.lsDir(directory!);

/// Dispose the controller when finished using
void dispose() {
Expand All @@ -58,45 +57,46 @@ class FilexController {
builder: (BuildContext context) {
final _addDirController = TextEditingController();
return AlertDialog(
title: const Text("Create a directory"),
actions: <Widget>[
FlatButton(
child: const Text("Cancel"),
onPressed: () {
Navigator.of(context).pop();
},
),
FlatButton(
child: const Text("Create"),
onPressed: () {
createDirectory(_addDirController.text);
Navigator.of(context).pop();
},
),
],
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
TextField(
controller: _addDirController,
autofocus: true,
autocorrect: false,
),
],
),
));
title: const Text("Create a directory"),
actions: <Widget>[
TextButton(
child: const Text("Cancel"),
onPressed: () {
Navigator.of(context).pop();
},
),
TextButton(
child: const Text("Create"),
onPressed: () {
createDirectory(_addDirController.text);
Navigator.of(context).pop();
},
),
],
content: SingleChildScrollView(
child: ListBody(
children: <Widget>[
TextField(
controller: _addDirController,
autofocus: true,
autocorrect: false,
),
],
),
),
);
},
);
}
}

class _FilexBloc {
_FilexBloc({@required this.path, @required this.itemController});
_FilexBloc({required this.path, required this.itemController});

final String path;
final StreamController<List<DirectoryItem>> itemController;
bool showOnlyDirectories;
bool showHiddenFiles;
bool showOnlyDirectories = false;
bool showHiddenFiles = false;

Future<void> deleteItem(DirectoryItem item) async {
try {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/commands.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ Future<void> mkdir(Directory currentDir, String name) async {

/// List items in directory
ListedDirectory getListedDirectory(Directory dir,
{bool showHiddenFiles, bool showOnlyDirectories}) {
{bool showHiddenFiles = false, bool showOnlyDirectories = false}) {
//print("LIST DIR ${dir.path}");
final contents = dir.listSync()..sort((a, b) => a.path.compareTo(b.path));
final dirs = <Directory>[];
Expand Down
Loading