Skip to content
This repository has been archived by the owner on Feb 20, 2023. It is now read-only.

Commit

Permalink
About. SD storage fix
Browse files Browse the repository at this point in the history
  • Loading branch information
JideGuru committed Feb 1, 2020
1 parent 193aef1 commit d616e99
Show file tree
Hide file tree
Showing 15 changed files with 252 additions and 137 deletions.
2 changes: 1 addition & 1 deletion README.md
Expand Up @@ -15,7 +15,7 @@ A simple File Explorer made with Flutter(A lil inspiration from Google files😅

## ✨ Features
- [x] Recent Files.
- [x] Search Files. []()
- [x] Search Files.
- [x] Sort Files (Still Rusty).
- [x] Show/Hide Hidden files.
- [ ] Copy/Move/Paste Files.
Expand Down
Expand Up @@ -3,6 +3,7 @@ package dev.jideguru.filex
import android.os.Build
import android.os.Environment
import android.os.StatFs
import android.util.Log
import androidx.annotation.NonNull
import androidx.annotation.RequiresApi
import io.flutter.embedding.android.FlutterActivity
Expand Down Expand Up @@ -41,20 +42,21 @@ class MainActivity: FlutterActivity() {
fun getStorageFreeSpace(): Long{
val path = Environment.getDataDirectory()
val stat = StatFs(path.path)
Log.i("Internal", path.path)
return stat.availableBytes
}

@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
fun getExternalStorageTotalSpace(): Long{
val dirs: Array<File> = getExternalFilesDirs(context, null)
val stat = StatFs(dirs[1].path)
return stat.availableBytes
val stat = StatFs(dirs[1].path.split("Android")[0])
return stat.totalBytes
}

@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
fun getExternalStorageFreeSpace(): Long{
val dirs: Array<File> = getExternalFilesDirs(context, null)
val stat = StatFs(dirs[1].path)
val stat = StatFs(dirs[1].path.split("Android")[0])
return stat.availableBytes
}
}
3 changes: 2 additions & 1 deletion lib/main.dart
Expand Up @@ -5,6 +5,7 @@ import 'package:filex/providers/browse_provider.dart';
import 'package:filex/providers/category_provider.dart';
import 'package:filex/screens/ios_error.dart';
import 'package:filex/screens/main_screen.dart';
import 'package:filex/screens/splash.dart';
import 'package:filex/util/consts.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
Expand Down Expand Up @@ -34,7 +35,7 @@ class MyApp extends StatelessWidget {
title: Constants.appName,
theme: appProvider.theme,
darkTheme: Constants.darkTheme,
home: Platform.isIOS?IosError():MainScreen(),
home: Platform.isIOS?IosError():Splash(),
);
},
);
Expand Down
14 changes: 0 additions & 14 deletions lib/providers/app_provider.dart
Expand Up @@ -3,13 +3,11 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:shared_preferences/shared_preferences.dart';

class AppProvider extends ChangeNotifier{
AppProvider(){
checkTheme();
checkPermission();
}


Expand All @@ -34,7 +32,6 @@ class AppProvider extends ChangeNotifier{
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: c == "dark" ? Constants.darkPrimary : Constants.lightPrimary,
systemNavigationBarColor: c == "dark" ? Constants.darkPrimary : Constants.lightPrimary,
statusBarIconBrightness: c == "dark" ? Brightness.light:Brightness.dark,
));
});
Expand Down Expand Up @@ -63,17 +60,6 @@ class AppProvider extends ChangeNotifier{
return t;
}

checkPermission() async{
PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);

if(permission != PermissionStatus.granted){
PermissionHandler().requestPermissions([PermissionGroup.storage]).then((v){

});
}else{

}
}

void showToast(value) {
Fluttertoast.showToast(
Expand Down
5 changes: 2 additions & 3 deletions lib/providers/browse_provider.dart
Expand Up @@ -7,9 +7,6 @@ import 'package:fluttertoast/fluttertoast.dart';
import 'package:path_provider/path_provider.dart';

class BrowseProvider extends ChangeNotifier{
BrowseProvider(){
checkSpace();
}
List<FileSystemEntity> availableStorage = List();
List<FileSystemEntity> recentFiles = List();

Expand All @@ -23,6 +20,8 @@ class BrowseProvider extends ChangeNotifier{

checkSpace() async{
setLoading(true);
recentFiles.clear();
availableStorage.clear();
List<FileSystemEntity> l = await getExternalStorageDirectories();
availableStorage.addAll(l);
notifyListeners();
Expand Down
26 changes: 16 additions & 10 deletions lib/providers/category_provider.dart
Expand Up @@ -3,6 +3,7 @@ import 'dart:io';
import 'package:filex/util/file_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:mime_type/mime_type.dart';
import 'package:path/path.dart';
import 'package:shared_preferences/shared_preferences.dart';

class CategoryProvider extends ChangeNotifier{
Expand Down Expand Up @@ -31,13 +32,18 @@ class CategoryProvider extends ChangeNotifier{
downloadTabs.add("All");
List<Directory> storages = await FileUtils.getStorageList();
storages.forEach((dir){
List<FileSystemEntity> files = Directory(dir.path+"Download").listSync();
files.forEach((file){
downloads.add(file);
downloadTabs.add(file.path.split("/")[file.path.split("/").length-2]);
downloadTabs = downloadTabs.toSet().toList();
notifyListeners();
});
if(Directory(dir.path+"Download").existsSync()){
List<FileSystemEntity> files = Directory(dir.path+"Download").listSync();
print(files);
files.forEach((file){
if(FileSystemEntity.isFileSync(file.path)){
downloads.add(file);
downloadTabs.add(file.path.split("/")[file.path.split("/").length-2]);
downloadTabs = downloadTabs.toSet().toList();
notifyListeners();
}
});
}
});
setLoading(false);
}
Expand Down Expand Up @@ -71,11 +77,11 @@ class CategoryProvider extends ChangeNotifier{
List<FileSystemEntity> files = await FileUtils.getAllFiles(showHidden: showHidden);
files.forEach((file){
String mimeType = mime(file.path);
if(type == "text" && extension(file.path) == ".pdf"){
audio.add(file);
}
if(mimeType != null){
if(mimeType.split("/")[0] == type){
if(type == "text" && mimeType.contains("pdf")){
audio.add(file);
}
audio.add(file);
audioTabs.add("${file.path.split("/")[file.path.split("/").length-2]}");
audioTabs = audioTabs.toSet().toList();
Expand Down
23 changes: 23 additions & 0 deletions lib/screens/about.dart
@@ -0,0 +1,23 @@
import 'package:flutter/material.dart';

class About extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"About",
),
),

body: ListView(
padding: EdgeInsets.symmetric(horizontal: 20),
children: <Widget>[
Text(
"Simple file explorer made with Flutter by JideGuru😁",
)
],
),
);
}
}
4 changes: 3 additions & 1 deletion lib/screens/browse.dart
Expand Up @@ -99,7 +99,9 @@ class Browse extends StatelessWidget {
path: path,
),
),
);
).then((v){
Provider.of<BrowseProvider>(context, listen: false).checkSpace();
});
},
contentPadding: EdgeInsets.only(right: 20),
leading: Container(
Expand Down
1 change: 1 addition & 0 deletions lib/screens/folder.dart
@@ -1,5 +1,6 @@
import 'dart:io';

import 'package:filex/providers/browse_provider.dart';
import 'package:filex/providers/category_provider.dart';
import 'package:filex/util/file_utils.dart';
import 'package:filex/widgets/custom_alert.dart';
Expand Down
18 changes: 9 additions & 9 deletions lib/screens/main_screen.dart
Expand Up @@ -86,23 +86,23 @@ class _MainScreenState extends State<MainScreen> {
void initState() {
super.initState();
_pageController = PageController(initialPage: 0);
Timer(Duration(seconds: 2),(){
// FileUtils.getRecentFiles(showHidden: true).then((l){
// print(l);
// l.forEach((f){
// File fi = File(f.path);
// print("${pathlib.basename(fi.path)} ${fi.lastAccessedSync()}");
// });
// });
Timer(Duration(milliseconds: 1),(){
SystemChrome.setEnabledSystemUIOverlays(SystemUiOverlay.values);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Theme.of(context).primaryColor,
systemNavigationBarColor: Theme.of(context).primaryColor,
systemNavigationBarColor: Colors.black,
statusBarIconBrightness: Theme.of(context).primaryColor == Constants.darkTheme.primaryColor
? Brightness.light
: Brightness.dark,
));
});
// FileUtils.getRecentFiles(showHidden: true).then((l){
// print(l);
// l.forEach((f){
// File fi = File(f.path);
// print("${pathlib.basename(fi.path)} ${fi.lastAccessedSync()}");
// });
// });
}

@override
Expand Down
14 changes: 12 additions & 2 deletions lib/screens/settings.dart
Expand Up @@ -3,9 +3,11 @@ import 'dart:io';
import 'package:device_info/device_info.dart';
import 'package:filex/providers/app_provider.dart';
import 'package:filex/providers/category_provider.dart';
import 'package:filex/screens/about.dart';
import 'package:filex/util/consts.dart';
import 'package:flutter/material.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:page_transition/page_transition.dart';
import 'package:provider/provider.dart';

class Settings extends StatefulWidget {
Expand Down Expand Up @@ -72,7 +74,7 @@ class _SettingsState extends State<Settings> {
title: Text(
"Dark mode",
),
value: Provider.of<AppProvider>(context).theme != Constants.lightTheme
value: Provider.of<AppProvider>(context).theme == Constants.lightTheme
? false
: true,
onChanged: (v){
Expand Down Expand Up @@ -112,7 +114,15 @@ class _SettingsState extends State<Settings> {

ListTile(
contentPadding: EdgeInsets.all(0),
onTap: (){},
onTap: (){
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: About(),
),
);
},
leading: Icon(
Feather.info,
),
Expand Down
93 changes: 93 additions & 0 deletions lib/screens/splash.dart
@@ -0,0 +1,93 @@
import 'dart:async';

import 'package:filex/providers/browse_provider.dart';
import 'package:filex/screens/main_screen.dart';
import 'package:filex/util/consts.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_icons/flutter_icons.dart';
import 'package:page_transition/page_transition.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:provider/provider.dart';

class Splash extends StatefulWidget {
@override
_SplashState createState() => _SplashState();
}

class _SplashState extends State<Splash> {
startTimeout() {
return Timer(Duration(seconds: 2), handleTimeout);
}


void handleTimeout() {
changeScreen();
}

changeScreen() async {
PermissionStatus permission = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
if(permission != PermissionStatus.granted){
PermissionHandler().requestPermissions([PermissionGroup.storage]).then((v){

}).then((v) async{
PermissionStatus permission1 = await PermissionHandler().checkPermissionStatus(PermissionGroup.storage);
if(permission1 == PermissionStatus.granted){
Navigator.pushReplacement(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: MainScreen(),
),
);
Provider.of<BrowseProvider>(context, listen: false).checkSpace();
}
});
}else{
Navigator.pushReplacement(
context,
PageTransition(
type: PageTransitionType.rightToLeft,
child: MainScreen(),
),
);
Provider.of<BrowseProvider>(context, listen: false).checkSpace();
}
}

@override
void initState() {
super.initState();
SystemChrome.setEnabledSystemUIOverlays([]);
startTimeout();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
// mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Feather.folder,
color: Theme.of(context).accentColor,
size: 70,
),
SizedBox(height: 20,),
Text(
"${Constants.appName}",
style: TextStyle(
color: Theme.of(context).accentColor,
fontSize: 25,
fontWeight: FontWeight.bold,
),
),
],
),
),
);
}
}

0 comments on commit d616e99

Please sign in to comment.