Skip to content

Commit 5f5d339

Browse files
committed
Migrate to file_selector, related to #558
1 parent 56fc29f commit 5f5d339

31 files changed

Lines changed: 148 additions & 212 deletions

app/lib/actions/export.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:butterfly/api/save_data.dart';
1+
import 'package:butterfly/api/save.dart';
22
import 'package:butterfly/bloc/document_bloc.dart';
33
import 'package:butterfly_api/butterfly_api.dart';
44
import 'package:flutter/material.dart';

app/lib/api/open.dart

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import 'dart:async';
2-
import 'dart:io';
32

3+
import 'package:butterfly/visualizer/asset.dart';
44
import 'package:butterfly_api/butterfly_api.dart';
5-
import 'package:file_picker/file_picker.dart';
5+
import 'package:file_selector/file_selector.dart' as fs;
66
import 'package:flutter/foundation.dart';
77
import 'package:flutter/material.dart';
88
import 'package:go_router/go_router.dart';
@@ -18,21 +18,19 @@ Future<bool> openHelp(List<String> pageLocation, [String? fragment]) {
1818
mode: LaunchMode.externalApplication);
1919
}
2020

21-
Future<(Uint8List?, String?)> openSupported(
22-
[List<String>? fileExtension]) async {
23-
final isMobile = !kIsWeb && (Platform.isAndroid || Platform.isIOS);
24-
final files = await FilePicker.platform.pickFiles(
25-
type: isMobile ? FileType.any : FileType.custom,
26-
allowedExtensions: isMobile
27-
? null
28-
: (fileExtension ??
29-
AssetFileType.values.expand((e) => e.getFileExtensions()).toList()),
30-
allowMultiple: false,
31-
withData: true,
21+
Future<(Uint8List?, String?)> importFile(BuildContext context,
22+
[List<AssetFileType>? types]) async {
23+
final result = await fs.openFile(
24+
acceptedTypeGroups: (types ?? AssetFileType.values)
25+
.map((e) => fs.XTypeGroup(
26+
label: e.getLocalizedName(context),
27+
extensions: e.getFileExtensions(),
28+
mimeTypes: [e.getMime()],
29+
))
30+
.toList(),
3231
);
33-
if (files?.files.isEmpty ?? true) return (null, null);
34-
var e = files!.files.first;
35-
return (e.bytes, e.extension);
32+
final data = await result?.readAsBytes();
33+
return (data, result?.name.split('.').lastOrNull);
3634
}
3735

3836
Future<void> openFile(
Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
import 'package:butterfly/api/save_data_stub.dart'
2-
if (dart.library.io) 'package:butterfly/api/save_data_io.dart'
3-
if (dart.library.js) 'package:butterfly/api/save_data_html.dart'
4-
as save_data;
1+
import 'package:file_selector/file_selector.dart' as fs;
52
import 'package:flutter/material.dart';
63
import 'package:flutter/services.dart';
74
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -11,8 +8,21 @@ Future<void> exportFile(
118
List<int> bytes,
129
String fileExtension,
1310
String mimeType,
14-
) async =>
15-
save_data.exportFile(context, bytes, fileExtension, mimeType);
11+
) async {
12+
final result = await fs.getSaveLocation(
13+
acceptedTypeGroups: [
14+
fs.XTypeGroup(
15+
label: AppLocalizations.of(context).export,
16+
extensions: [fileExtension],
17+
mimeTypes: [mimeType],
18+
),
19+
],
20+
);
21+
if (result == null) return;
22+
final file = fs.XFile.fromData(Uint8List.fromList(bytes),
23+
mimeType: mimeType, name: 'output.$fileExtension');
24+
await file.saveTo(result.path);
25+
}
1626

1727
Future<void> exportSvg(BuildContext context, String data) =>
1828
exportFile(context, data.codeUnits, 'svg', 'image/svg');

app/lib/api/save_data_html.dart

Lines changed: 0 additions & 20 deletions
This file was deleted.

app/lib/api/save_data_io.dart

Lines changed: 0 additions & 60 deletions
This file was deleted.

app/lib/api/save_data_stub.dart

Lines changed: 0 additions & 10 deletions
This file was deleted.

app/lib/dialogs/background/dialog.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import 'dart:io';
21
import 'dart:ui' as ui;
32

43
import 'package:butterfly/api/open.dart';
54
import 'package:butterfly/bloc/document_bloc.dart';
65
import 'package:butterfly/dialogs/texture.dart';
76
import 'package:butterfly/visualizer/preset.dart';
87
import 'package:butterfly_api/butterfly_api.dart';
9-
import 'package:file_picker/file_picker.dart';
10-
import 'package:flutter/foundation.dart';
118
import 'package:flutter/material.dart';
129
import 'package:flutter_bloc/flutter_bloc.dart';
1310
import 'package:flutter_gen/gen_l10n/app_localizations.dart';

app/lib/dialogs/background/general.dart

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,13 @@ class _GeneralBackgroundPropertiesView extends StatelessWidget {
4949
onTap: () async {
5050
final state = context.read<DocumentBloc>().state;
5151
if (state is! DocumentLoaded) return;
52-
final files = await FilePicker.platform.pickFiles(
53-
type: FileType.image, allowMultiple: false, withData: true);
54-
if (files?.files.isEmpty ?? true) return;
55-
final e = files!.files.first;
56-
var content = e.bytes ?? Uint8List(0);
57-
if (!kIsWeb) {
58-
content = await File(e.path ?? '').readAsBytes();
59-
}
60-
final dataPath = Uri.dataFromBytes(content).toString();
61-
final codec = await ui.instantiateImageCodec(content);
52+
final (result, _) = await importFile(
53+
context,
54+
[AssetFileType.image],
55+
);
56+
if (result == null) return;
57+
final dataPath = Uri.dataFromBytes(result).toString();
58+
final codec = await ui.instantiateImageCodec(result);
6259
final frame = await codec.getNextFrame();
6360
final image = frame.image;
6461
final width = image.width.toDouble(),

app/lib/dialogs/collaboration/dialog.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:butterfly/api/save_data.dart';
1+
import 'package:butterfly/api/save.dart';
22
import 'package:butterfly/bloc/document_bloc.dart';
33
import 'package:butterfly/cubits/current_index.dart';
44
import 'package:butterfly/services/network.dart';

app/lib/dialogs/export/image.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'dart:ui' as ui;
22

3-
import 'package:butterfly/api/save_data.dart';
3+
import 'package:butterfly/api/save.dart';
44
import 'package:butterfly/bloc/document_bloc.dart';
55
import 'package:butterfly_api/butterfly_api.dart';
66
import 'package:flutter/foundation.dart';

0 commit comments

Comments
 (0)