You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mohemm-flutter-app/lib/classes/file_process.dart

62 lines
1.8 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:open_filex/open_filex.dart';
import 'package:path_provider/path_provider.dart';
import 'package:http/http.dart' as http;
class FileProcess {
static bool isFolderCreated = false;
static Directory? directory;
static Future checkDocumentFolder() async {
try {
if (!isFolderCreated) {
directory = await getApplicationDocumentsDirectory();
await directory!.exists().then((value) {
if (value) directory!.create();
isFolderCreated = true;
});
}
} catch (e) {
print(e.toString());
}
}
static void openFile(String fileName, {bool isFullPath = false}) {
String dir = directory!.path + "/$fileName.pdf";
OpenFilex.open(isFullPath ? fileName : dir);
}
static Future<File> downloadFile(String base64Content, String fileName) async {
Uint8List bytes = base64.decode(base64Content);
await checkDocumentFolder();
String dir = directory!.path + "/" + fileName + ".pdf";
File file = File(dir);
if (!file.existsSync()) file.create();
await file.writeAsBytes(bytes);
return file;
}
static Future<String> downloadFileFromUrl(String url,String fileName) async {
await checkDocumentFolder();
String filePath = '${directory!.path}/$fileName';
if (await File(filePath).exists()) {
await Future.delayed(const Duration(seconds: 1));
return filePath;
} else {
var response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
var bytes = response.bodyBytes;
File file = File(filePath);
await file.writeAsBytes(bytes);
return filePath;
} else {
throw Exception('Failed to download file');
}
}
}
}