Открыть боковую панель
Aurora OS
Flutter
Flutter Community Plugins
file_manager
Коммиты
e517c7de
Коммит
e517c7de
создал
Июн 28, 2021
по автору
4-alok
Просмотр файлов
added SortBy.type in SortBy
владелец
32b98a70
Изменения
3
Скрыть пробелы
Построчно
Рядом
example/lib/main.dart
Просмотр файла @
e517c7de
...
...
@@ -48,7 +48,6 @@ class HomePage extends StatelessWidget {
body:
Container
(
margin:
EdgeInsets
.
all
(
10
),
child:
FileManager
(
sort:
SortBy
.
date
,
controller:
controller
,
tileBuilder:
(
context
,
entity
)
{
return
Card
(
...
...
lib/controller/file_manager_controller.dart
Просмотр файла @
e517c7de
...
...
@@ -5,7 +5,15 @@ import 'package:flutter/material.dart';
class
FileManagerController
extends
ChangeNotifier
{
String
_path
=
""
;
int
_currentStorage
=
0
;
SortBy
short
=
SortBy
.
name
;
SortBy
_short
=
SortBy
.
name
;
// TODO: [Documentation]
SortBy
get
getSortedBy
=
>
_short
;
// TODO: [Documentation]
set
setSortedBy
(
SortBy
sortType
)
{
_short
=
sortType
;
notifyListeners
();
}
/// Get current directory path.
Directory
get
getCurrentDirectory
=
>
Directory
(
_path
);
...
...
lib/file_manager.dart
Просмотр файла @
e517c7de
...
...
@@ -8,30 +8,19 @@ import 'package:path_provider/path_provider.dart';
import
'package:file_manager/helper/helper.dart'
;
export
'package:file_manager/helper/helper.dart'
;
typedef
TileBuilder
=
Widget
Function
(
typedef
_
TileBuilder
=
Widget
Function
(
BuildContext
context
,
FileSystemEntity
entity
,
);
class
_PathStat
{
final
String
path
;
final
FileStat
fileStat
;
final
DateTime
fileStat
;
_PathStat
(
this
.
path
,
this
.
fileStat
);
}
List
<
_PathStat
>
_pathStat
=
[];
bool
isFile
(
FileSystemEntity
entity
)
{
return
(
entity
is
File
);
}
bool
isDirectory
(
FileSystemEntity
entity
)
{
return
(
entity
is
Directory
);
}
Future
<
List
<
FileSystemEntity
>>
_sortEntitysList
(
String
path
,
SortBy
sortType
)
async
{
_pathStat
.
clear
();
final
List
<
FileSystemEntity
>
list
=
await
Directory
(
path
)
.
list
()
.
toList
();
if
(
sortType
==
SortBy
.
name
)
{
final
dirs
=
list
.
where
((
element
)
=
>
element
is
Directory
)
.
toList
();
...
...
@@ -40,17 +29,36 @@ Future<List<FileSystemEntity>> _sortEntitysList(
files
.
sort
((
a
,
b
)
=
>
a
.
path
.
toLowerCase
()
.
compareTo
(
b
.
path
.
toLowerCase
()));
return
[..
.
dirs
,
..
.
files
];
}
else
if
(
sortType
==
SortBy
.
date
)
{
List
<
_PathStat
>
_pathStat
=
[];
for
(
FileSystemEntity
e
in
list
)
{
_pathStat
.
add
(
_PathStat
(
e
.
path
,
(
await
e
.
stat
())));
_pathStat
.
add
(
_PathStat
(
e
.
path
,
(
await
e
.
stat
())
.
modified
));
}
list
.
sort
((
a
,
b
)
=
>
_pathStat
.
indexWhere
((
element
)
=
>
element
.
path
==
a
.
path
)
.
compareTo
(
_pathStat
.
indexWhere
((
element
)
=
>
element
.
path
==
b
.
path
)));
return
list
;
}
else
if
(
sortType
==
SortBy
.
type
)
{
final
dirs
=
list
.
where
((
element
)
=
>
element
is
Directory
)
.
toList
();
dirs
.
sort
((
a
,
b
)
=
>
a
.
path
.
toLowerCase
()
.
compareTo
(
b
.
path
.
toLowerCase
()));
final
files
=
list
.
where
((
element
)
=
>
element
is
File
)
.
toList
();
files
.
sort
((
a
,
b
)
=
>
a
.
path
.
toLowerCase
()
.
split
(
'.'
)
.
last
.
compareTo
(
b
.
path
.
toLowerCase
()
.
split
(
'.'
)
.
last
));
return
[..
.
dirs
,
..
.
files
];
}
return
[];
}
bool
isFile
(
FileSystemEntity
entity
)
{
return
(
entity
is
File
);
}
bool
isDirectory
(
FileSystemEntity
entity
)
{
return
(
entity
is
Directory
);
}
/// Get the basename of Directory or File.
/// ie: controller.dirName(dir);
String
basename
(
dynamic
entity
,
[
bool
showFileExtension
=
true
])
{
...
...
@@ -87,8 +95,7 @@ class FileManager extends StatefulWidget {
final
ScrollPhysics
?
physics
;
final
bool
shrinkWrap
;
final
FileManagerController
controller
;
final
SortBy
sort
;
final
TileBuilder
tileBuilder
;
final
_TileBuilder
tileBuilder
;
/// Hide the hidden file and folder.
final
bool
hideHiddenEntity
;
...
...
@@ -97,7 +104,6 @@ class FileManager extends StatefulWidget {
this
.
loadingScreen
,
this
.
physics
,
this
.
shrinkWrap
=
false
,
this
.
sort
=
SortBy
.
name
,
required
this
.
controller
,
required
this
.
tileBuilder
,
this
.
hideHiddenEntity
=
true
,
...
...
@@ -109,12 +115,15 @@ class FileManager extends StatefulWidget {
class
_FileManagerState
extends
State
<
FileManager
>
{
final
ValueNotifier
<
String
>
path
=
ValueNotifier
<
String
>(
""
);
final
ValueNotifier
<
SortBy
>
sort
=
ValueNotifier
<
SortBy
>(
SortBy
.
name
);
@override
void
initState
()
{
super
.
initState
();
widget
.
controller
.
addListener
(()
=
>
path
.
value
=
widget
.
controller
.
getCurrentPath
);
widget
.
controller
.
addListener
(()
{
path
.
value
=
widget
.
controller
.
getCurrentPath
;
sort
.
value
=
widget
.
controller
.
getSortedBy
;
});
}
@override
...
...
@@ -124,12 +133,9 @@ class _FileManagerState extends State<FileManager> {
builder:
(
context
,
snapshot
)
{
if
(
snapshot
.
hasData
)
{
widget
.
controller
.
setCurrentPath
=
snapshot
.
data
!
[
0
]
.
path
;
// path.value = snapshot.data![0].path;
return
body
(
context
);
}
else
if
(
snapshot
.
hasError
)
{
// print(snapshot.error);
throw
Exception
(
snapshot
.
error
.
toString
());
// return errorPage(snapshot.error.toString());
}
else
{
return
loadingScreenWidget
();
}
...
...
@@ -141,47 +147,44 @@ class _FileManagerState extends State<FileManager> {
return
ValueListenableBuilder
<
String
>(
valueListenable:
path
,
builder:
(
context
,
pathSnapshot
,
_
)
{
return
FutureBuilder
<
List
<
FileSystemEntity
>>(
// future: Directory(pathSnapshot).list(recursive: false).toList(),
future:
_sortEntitysList
(
pathSnapshot
,
widget
.
sort
),
builder:
(
context
,
snapshot
)
{
if
(
snapshot
.
hasData
)
{
List
<
FileSystemEntity
>
entitys
=
snapshot
.
data
!
;
if
(
widget
.
hideHiddenEntity
)
{
entitys
=
entitys
.
where
((
element
)
{
if
(
basename
(
element
)
==
""
||
basename
(
element
)
.
startsWith
(
'.'
))
{
return
false
;
return
ValueListenableBuilder
<
SortBy
>(
valueListenable:
sort
,
builder:
(
context
,
snapshot
,
_
)
{
return
FutureBuilder
<
List
<
FileSystemEntity
>>(
future:
_sortEntitysList
(
pathSnapshot
,
sort
.
value
),
builder:
(
context
,
snapshot
)
{
if
(
snapshot
.
hasData
)
{
List
<
FileSystemEntity
>
entitys
=
snapshot
.
data
!
;
if
(
widget
.
hideHiddenEntity
)
{
entitys
=
entitys
.
where
((
element
)
{
if
(
basename
(
element
)
==
""
||
basename
(
element
)
.
startsWith
(
'.'
))
{
return
false
;
}
else
{
return
true
;
}
})
.
toList
();
}
return
ListView
.
builder
(
physics:
widget
.
physics
,
shrinkWrap:
widget
.
shrinkWrap
,
itemCount:
entitys
.
length
,
itemBuilder:
(
context
,
index
)
{
return
widget
.
tileBuilder
(
context
,
entitys
[
index
]);
},
);
// TODO: [Documentation]
}
else
if
(
snapshot
.
hasError
)
{
print
(
snapshot
.
error
);
return
errorPage
(
snapshot
.
error
.
toString
());
}
else
{
return
true
;
return
loadingScreenWidget
()
;
}
})
.
toList
();
}
return
ListView
.
builder
(
physics:
widget
.
physics
,
shrinkWrap:
widget
.
shrinkWrap
,
itemCount:
entitys
.
length
,
itemBuilder:
(
context
,
index
)
{
return
widget
.
tileBuilder
(
context
,
entitys
[
index
]);
},
);
}
else
if
(
snapshot
.
hasError
)
{
print
(
snapshot
.
error
);
return
errorPage
(
snapshot
.
error
.
toString
());
}
else
{
return
loadingScreenWidget
();
}
});
});
},
);
}
// Widget tileWidget(BuildContext context, FileSystemEntity entity) {
// return widget.tileBuilder(context, entity);
// }
Container
errorPage
(
String
error
)
{
return
Container
(
color:
Colors
.
red
,
...
...
Редактирование
Предварительный просмотр
Поддерживает Markdown
0%
Попробовать снова
или
прикрепить новый файл
.
Отмена
You are about to add
0
people
to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Отмена
Пожалуйста,
зарегистрируйтесь
или
войдите
чтобы прокомментировать