Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate filesharing_logic and files_usecases to null safety. #733

Merged
merged 3 commits into from
Aug 17, 2023
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ abstract class LocalFile {
dynamic getFile();
dynamic getData();

String getPath();
String? getPath();

String getName();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ class LocalFileData extends LocalFile {
final Uint8List fileData;
final String fileName;
final int sizeBytes;
final MimeType mimeType;
final String path;
final MimeType? mimeType;
final String? path;

LocalFileData._({
required this.fileData,
Expand All @@ -27,12 +27,12 @@ class LocalFileData extends LocalFile {
});

factory LocalFileData.fromData(
Uint8List data, String path, String name, String type) {
Uint8List data, String? path, String name, String? type) {
return LocalFileData._(
fileData: data,
sizeBytes: data.lengthInBytes,
path: path,
mimeType: MimeType(type),
mimeType: type == null ? null : MimeType(type),
fileName: name,
);
}
Expand All @@ -48,12 +48,12 @@ class LocalFileData extends LocalFile {
}

@override
String getPath() {
String? getPath() {
return path;
}

@override
MimeType getType() {
MimeType? getType() {
return mimeType;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@
import 'package:files_basics/local_file.dart';

abstract class ImageCompressor {
Future<LocalFile> compressImage(LocalFile file);
Future<LocalFile?> compressImage(LocalFile file);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import '../image_compressor.dart';

class FlutterNativeImageCompressor extends ImageCompressor {
@override
Future<LocalFile> compressImage(LocalFile file) async {
Future<LocalFile?> compressImage(LocalFile file) async {
if (PlatformCheck.isMacOS) {
// Currently, the image compressor does not work on macOS.
//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ import 'implementation/stub_file_downloader.dart'
if (dart.library.js) 'implementation/web_file_downloader.dart'
as implementation;

FileDownloader getFileDownloader() {
FileDownloader? getFileDownloader() {
return implementation.getFileDownloader();
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,38 +22,34 @@ class MobileFileDownloader extends FileDownloader {
Future<LocalFile> downloadFileFromURL(
String url, String filename, String id) async {
File fileWithID = await DefaultCacheManager().getSingleFile(url);
if (fileWithID != null) {
final filePath =
'${path.dirname(fileWithID.path)}/$id.${FileUtils.getExtension(filename)}';

// Da unsere Dateien die ID als Namen haben, müssen diese umbenannt werden.
// Deswegen muss erst geprüft werden, ob der Pfad, welcher vom [DefaulCacheManger]
// zurückgegeben wurde, existiert. Existiert dieser Pfad, wurde die Datei gerade
// heruntergeladen und muss noch umbenannt werden. Die ID wird dann durch den
// richtigen Namen ersetzt. Wird dann beim nächsten Mal die Datei aufgerufen,
// befindet sich bei dem Path, welchen der [DefaultCacheManger] zurückgegeben hat,
// keine Datei. Das liegt daran, weil wir vorher die Datei mit dem richtigen Namen
// benannt haben. Wir müssen dann auch an diesem Ort suchen, also nach dem [filePath].
fileWithID = await fileWithID.exists()
? await fileWithID.rename(filePath)
: File(filePath);

if (PlatformCheck.isMacOS) {
filename = filename.replaceAll(RegExp(r"""[();:"` <>&']"""), '');

// Falls der Dateiname vor der Extention leer ist, soll ein _ hinzufügen werden.
if (filename.lastIndexOf('.') == 0) {
filename = '_$filename';
}
final filePath =
'${path.dirname(fileWithID.path)}/$id.${FileUtils.getExtension(filename)}';

// Da unsere Dateien die ID als Namen haben, müssen diese umbenannt werden.
// Deswegen muss erst geprüft werden, ob der Pfad, welcher vom [DefaulCacheManger]
// zurückgegeben wurde, existiert. Existiert dieser Pfad, wurde die Datei gerade
// heruntergeladen und muss noch umbenannt werden. Die ID wird dann durch den
// richtigen Namen ersetzt. Wird dann beim nächsten Mal die Datei aufgerufen,
// befindet sich bei dem Path, welchen der [DefaultCacheManger] zurückgegeben hat,
// keine Datei. Das liegt daran, weil wir vorher die Datei mit dem richtigen Namen
// benannt haben. Wir müssen dann auch an diesem Ort suchen, also nach dem [filePath].
fileWithID = await fileWithID.exists()
? await fileWithID.rename(filePath)
: File(filePath);

if (PlatformCheck.isMacOS) {
filename = filename.replaceAll(RegExp(r"""[();:"` <>&']"""), '');

// Falls der Dateiname vor der Extention leer ist, soll ein _ hinzufügen werden.
if (filename.lastIndexOf('.') == 0) {
filename = '_$filename';
}
}

final fileWithNamePath = '${path.dirname(fileWithID.path)}/$filename';
final fileWithName = await fileWithID.copy(fileWithNamePath);
final fileWithNamePath = '${path.dirname(fileWithID.path)}/$filename';
final fileWithName = await fileWithID.copy(fileWithNamePath);

return LocalFileIo.fromFile(fileWithName);
} else {
return null;
}
return LocalFileIo.fromFile(fileWithName);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@

import '../file_downloader.dart';

FileDownloader getFileDownloader() {
FileDownloader? getFileDownloader() {
return null;
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,22 @@ import 'implementation/stub_file_picker.dart'
as implementation;

class FilePicker {
final FilePickerImplementation _implementation;
final FilePickerImplementation? _implementation;

FilePicker._(this._implementation);

factory FilePicker() {
return FilePicker._(implementation.getFilePickerImplementation());
}

Future<LocalFile> pickFile() => _implementation.pickFile();
Future<LocalFile> pickFileImage() => _implementation.pickFileImage();
Future<LocalFile> pickFileVideo() => _implementation.pickFileVideo();
Future<List<LocalFile>> pickMultiFile() => _implementation.pickMultiFile();
Future<List<LocalFile>> pickMultiFileImage() =>
_implementation.pickMultiFileImage();
Future<List<LocalFile>> pickMultiFileVideo() =>
_implementation.pickMultiFileVideo();
Future<LocalFile> pickImageGallery() => _implementation.pickImageGallery();
Future<LocalFile> pickImageCamera() => _implementation.pickImageCamera();
Future<LocalFile?> pickFile() => _implementation!.pickFile();
Future<LocalFile?> pickFileImage() => _implementation!.pickFileImage();
Future<LocalFile?> pickFileVideo() => _implementation!.pickFileVideo();
Future<List<LocalFile>?> pickMultiFile() => _implementation!.pickMultiFile();
Future<List<LocalFile>?> pickMultiFileImage() =>
_implementation!.pickMultiFileImage();
Future<List<LocalFile>?> pickMultiFileVideo() =>
_implementation!.pickMultiFileVideo();
Future<LocalFile?> pickImageGallery() => _implementation!.pickImageGallery();
Future<LocalFile?> pickImageCamera() => _implementation!.pickImageCamera();
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
import 'package:files_basics/local_file.dart';

abstract class FilePickerImplementation {
Future<LocalFile> pickFile();
Future<LocalFile> pickFileImage();
Future<LocalFile> pickFileVideo();
Future<List<LocalFile>> pickMultiFile();
Future<List<LocalFile>> pickMultiFileImage();
Future<List<LocalFile>> pickMultiFileVideo();
Future<LocalFile> pickImageGallery();
Future<LocalFile> pickImageCamera();
Future<LocalFile?> pickFile();
Future<LocalFile?> pickFileImage();
Future<LocalFile?> pickFileVideo();
Future<List<LocalFile>?> pickMultiFile();
Future<List<LocalFile>?> pickMultiFileImage();
Future<List<LocalFile>?> pickMultiFileVideo();
Future<LocalFile?> pickImageGallery();
Future<LocalFile?> pickImageCamera();
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@ import '../file_picker_implementation.dart';

class FilePickerDesktop extends FilePickerImplementation {
@override
Future<LocalFile> pickFile() async {
Future<LocalFile?> pickFile() async {
return selectSingleFile();
}

@override
Future<LocalFile> pickFileImage() async {
Future<LocalFile?> pickFileImage() async {
return selectSingleFile();
}

@override
Future<LocalFile> pickFileVideo() async {
Future<LocalFile?> pickFileVideo() async {
return selectSingleFile();
}

Expand All @@ -46,32 +46,32 @@ class FilePickerDesktop extends FilePickerImplementation {
}

@override
Future<LocalFile> pickImageCamera() async {
Future<LocalFile?> pickImageCamera() async {
return selectSingleFile();
}

@override
Future<LocalFile> pickImageGallery() async {
Future<LocalFile?> pickImageGallery() async {
return selectSingleFile();
}
}

Future<List<LocalFile>> selectMultipleFiles() async {
final fileChooserResult =
await file_picker.FilePicker.platform.pickFiles(allowMultiple: true);
(await file_picker.FilePicker.platform.pickFiles(allowMultiple: true))!;
if (fileChooserResult.count == 0) return [];
log('fileChooserResult.paths: ${fileChooserResult.paths}');
final files =
fileChooserResult.paths.map((path) => LocalFileIo.fromFile(File(path)));
fileChooserResult.paths.map((path) => LocalFileIo.fromFile(File(path!)));
return files.toList();
}

Future<LocalFile> selectSingleFile() async {
Future<LocalFile?> selectSingleFile() async {
final fileChooserResult =
await file_picker.FilePicker.platform.pickFiles(allowMultiple: false);
(await file_picker.FilePicker.platform.pickFiles(allowMultiple: false))!;
if (fileChooserResult.count == 0) return null;
final files =
fileChooserResult.paths.map((path) => LocalFileIo.fromFile(File(path)));
fileChooserResult.paths.map((path) => LocalFileIo.fromFile(File(path!)));
return files.toList()[0];
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,43 +14,44 @@ import '../file_picker_implementation.dart';

class FilePickerHtml extends FilePickerImplementation {
@override
Future<LocalFile> pickFile() => _pickSingle();
Future<LocalFile?> pickFile() => _pickSingle();

@override
Future<LocalFile> pickFileImage() => _pickSingle();
Future<LocalFile?> pickFileImage() => _pickSingle();

@override
Future<LocalFile> pickFileVideo() => _pickSingle();
Future<LocalFile?> pickFileVideo() => _pickSingle();
@override
Future<List<LocalFile>> pickMultiFile() => _pickMulti();
Future<List<LocalFile>?> pickMultiFile() => _pickMulti();

@override
Future<List<LocalFile>> pickMultiFileImage() => _pickMulti();
Future<List<LocalFile>?> pickMultiFileImage() => _pickMulti();
@override
Future<List<LocalFile>> pickMultiFileVideo() => _pickMulti();
Future<List<LocalFile>?> pickMultiFileVideo() => _pickMulti();

@override
Future<LocalFile> pickImageCamera() => _pickSingle();
Future<LocalFile?> pickImageCamera() => _pickSingle();
@override
Future<LocalFile> pickImageGallery() => _pickSingle();
Future<LocalFile?> pickImageGallery() => _pickSingle();

Future<LocalFile> _pickSingle() async {
final res = await web.FilePicker.platform.pickFiles(allowMultiple: false);
Future<LocalFile?> _pickSingle() async {
final res =
(await web.FilePicker.platform.pickFiles(allowMultiple: false))!;
if (res.files.isNotEmpty) {
final file = res.files.single;

return LocalFileData.fromData(
file.bytes, file.path, file.name, file.extension);
file.bytes!, file.path!, file.name, file.extension!);
}
return null;
}

Future<List<LocalFile>> _pickMulti() async {
final res = await web.FilePicker.platform.pickFiles(allowMultiple: true);
Future<List<LocalFile>?> _pickMulti() async {
final res = (await web.FilePicker.platform.pickFiles(allowMultiple: true))!;
if (res.files.isNotEmpty) {
return res.files
.map((file) => LocalFileData.fromData(
file.bytes, null, file.name, file.extension))
file.bytes!, null, file.name, file.extension!))
.toList();
}
return null;
Expand Down
Loading