From 22c3fe36ed8e2d494c64b4b32a37980e878a5190 Mon Sep 17 00:00:00 2001 From: kuyazee Date: Mon, 11 Aug 2025 16:33:55 +0800 Subject: [PATCH 1/2] Flutter Web, wasm support fix --- lib/excel.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/excel.dart b/lib/excel.dart index 170157e..236fa60 100644 --- a/lib/excel.dart +++ b/lib/excel.dart @@ -8,6 +8,7 @@ import 'package:equatable/equatable.dart'; import 'package:xml/xml.dart'; import 'src/web_helper/client_save_excel.dart' if (dart.library.html) 'src/web_helper/web_save_excel_browser.dart' + if (dart.library.js_interop) 'src/web_helper/web_save_excel_browser.dart' as helper; /// main directory From 0e13e83e1242ab20767bc910d47848bbd256acac Mon Sep 17 00:00:00 2001 From: kuyazee Date: Mon, 11 Aug 2025 18:20:24 +0800 Subject: [PATCH 2/2] fix(Flutter Web): Wasm support fix --- lib/excel.dart | 2 +- .../wasm_web_save_excel_browser.dart | 37 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 lib/src/web_helper/wasm_web_save_excel_browser.dart diff --git a/lib/excel.dart b/lib/excel.dart index 236fa60..537ecdf 100644 --- a/lib/excel.dart +++ b/lib/excel.dart @@ -7,8 +7,8 @@ import 'package:collection/collection.dart'; import 'package:equatable/equatable.dart'; import 'package:xml/xml.dart'; import 'src/web_helper/client_save_excel.dart' + if (dart.library.js_interop) 'src/web_helper/wasm_web_save_excel_browser.dart' if (dart.library.html) 'src/web_helper/web_save_excel_browser.dart' - if (dart.library.js_interop) 'src/web_helper/web_save_excel_browser.dart' as helper; /// main directory diff --git a/lib/src/web_helper/wasm_web_save_excel_browser.dart b/lib/src/web_helper/wasm_web_save_excel_browser.dart new file mode 100644 index 0000000..7abe4ef --- /dev/null +++ b/lib/src/web_helper/wasm_web_save_excel_browser.dart @@ -0,0 +1,37 @@ +import 'dart:js_interop'; +import 'dart:typed_data'; + +import 'package:web/web.dart'; + +class SavingHelper { + static List? saveFile(List? val, String fileName) { + if (val == null) { + return null; + } + + // Create Uint8List + final uint8List = Uint8List.fromList(val); + + // Convert to JS object properly + final jsData = uint8List.toJS; + + // Create blob + final blob = Blob( + [jsData].toJS, + BlobPropertyBag( + type: + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')); + + final url = URL.createObjectURL(blob); + final anchor = HTMLAnchorElement() + ..href = url + ..download = fileName; + + document.body?.append(anchor); + anchor.click(); + anchor.remove(); + URL.revokeObjectURL(url); + + return val; + } +}