Impl saveFile for web

This commit is contained in:
2023-09-09 13:13:16 +08:00
parent d0521d3774
commit 4ec4d61656
4 changed files with 40 additions and 0 deletions

View File

@@ -1,7 +1,9 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:logging/logging.dart';
import '../utils.dart';
import 'save_file.dart';
final Logger _log = Logger("platformPath");
@@ -31,6 +33,9 @@ class Path {
Future<void> saveFile(
String filenameWithoutExtension, String mimeType, Uint8List bytes,
{String dir = ""}) async {
if (kIsWeb) {
return saveFileWeb(bytes, mimeType, filenameWithoutExtension);
}
return _safChannel.invokeMethod(
"saveFile", [filenameWithoutExtension, dir, mimeType, bytes]);
}

View File

@@ -0,0 +1 @@
export 'save_file_none.dart' if (dart.library.html) 'save_file_web.dart';

View File

@@ -0,0 +1,6 @@
import 'dart:typed_data';
void saveFileWeb(
Uint8List data, String mimeType, String filenameWithoutExtension) {
throw UnimplementedError();
}

View File

@@ -0,0 +1,28 @@
// ignore: avoid_web_libraries_in_flutter
import 'dart:html';
import 'dart:typed_data';
void saveFileWeb(
Uint8List data, String mimeType, String filenameWithoutExtension) {
final blob = Blob([data], mimeType);
final url = Url.createObjectUrlFromBlob(blob);
final a = document.createElement("a") as AnchorElement;
a.href = url;
var ext = "";
switch (mimeType) {
case "image/jpeg":
ext = ".jpg";
break;
case "image/png":
ext = ".png";
break;
case "image/gif":
ext = ".gif";
break;
default:
break;
}
a.download = "$filenameWithoutExtension$ext";
a.click();
Url.revokeObjectUrl(url);
}