From 7154d258a7edfcdc81ab286405858a2e53dc6ad5 Mon Sep 17 00:00:00 2001 From: cdawei <> Date: Wed, 4 Feb 2026 13:07:21 +1100 Subject: [PATCH 1/3] Migrate from package html to web --- lib/src/widgets/button_file_saver.dart | 32 ++++++++++++++++++++------ pubspec.yaml | 3 ++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/lib/src/widgets/button_file_saver.dart b/lib/src/widgets/button_file_saver.dart index 01b9446..038c6f6 100644 --- a/lib/src/widgets/button_file_saver.dart +++ b/lib/src/widgets/button_file_saver.dart @@ -30,12 +30,14 @@ library; import 'dart:convert'; import 'dart:io' show File; +import 'dart:js_interop'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; -import 'package:universal_html/html.dart' as html; +// import 'package:universal_html/html.dart' as html; +import 'package:web/web.dart' as web; /// JSON encoder with indentation for pretty printing. @@ -83,14 +85,30 @@ Future downloadDataForWeb( filename = '$filename.json'; } final bytes = utf8.encode(jsonContent); - final blob = html.Blob([bytes], 'application/json'); - final url = html.Url.createObjectUrlFromBlob(blob); + // final blob = html.Blob([bytes], 'application/json'); + // final url = html.Url.createObjectUrlFromBlob(blob); - html.AnchorElement(href: url) - ..setAttribute('download', filename) - ..click(); + // html.AnchorElement(href: url) + // ..setAttribute('download', filename) + // ..click(); - html.Url.revokeObjectUrl(url); + // html.Url.revokeObjectUrl(url); + + final blob = web.Blob( + [bytes.buffer.toJS].toJS, + web.BlobPropertyBag(type: 'application/json'), + ); + final url = web.URL.createObjectURL(blob); + + final anchor = web.HTMLAnchorElement() + ..href = url + ..download = filename; + + web.document.body?.append(anchor); + anchor.click(); + anchor.remove(); + + web.URL.revokeObjectURL(url); messenger.showSnackBar( SnackBar(content: Text('Data downloaded as $filename')), diff --git a/pubspec.yaml b/pubspec.yaml index 53e5fc8..04cc7c4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,9 +26,10 @@ dependencies: media_kit_libs_video: ^1.0.7 media_kit_video: ^2.0.1 path: ^1.9.1 - universal_html: ^2.3.0 + # universal_html: ^2.3.0 url_launcher: ^6.3.2 path_provider: ^2.1.5 + web: ^1.1.1 dev_dependencies: custom_lint: ^0.8.1 From 188746a3335a98ef2350f177d53709b0bc4f04f6 Mon Sep 17 00:00:00 2001 From: cdawei <> Date: Thu, 5 Feb 2026 18:14:30 +1100 Subject: [PATCH 2/3] Use universal_web to allow native build --- lib/src/widgets/button_file_saver.dart | 6 +++--- pubspec.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/src/widgets/button_file_saver.dart b/lib/src/widgets/button_file_saver.dart index 038c6f6..41ea391 100644 --- a/lib/src/widgets/button_file_saver.dart +++ b/lib/src/widgets/button_file_saver.dart @@ -30,14 +30,14 @@ library; import 'dart:convert'; import 'dart:io' show File; -import 'dart:js_interop'; import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:file_picker/file_picker.dart'; // import 'package:universal_html/html.dart' as html; -import 'package:web/web.dart' as web; +import 'package:universal_web/js_interop.dart'; +import 'package:universal_web/web.dart' as web; /// JSON encoder with indentation for pretty printing. @@ -95,7 +95,7 @@ Future downloadDataForWeb( // html.Url.revokeObjectUrl(url); final blob = web.Blob( - [bytes.buffer.toJS].toJS, + [bytes.buffer.toJS].toJS, web.BlobPropertyBag(type: 'application/json'), ); final url = web.URL.createObjectURL(blob); diff --git a/pubspec.yaml b/pubspec.yaml index 04cc7c4..392aa1f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,7 +29,7 @@ dependencies: # universal_html: ^2.3.0 url_launcher: ^6.3.2 path_provider: ^2.1.5 - web: ^1.1.1 + universal_web: ^1.1.1+1 dev_dependencies: custom_lint: ^0.8.1 From ecac397158616b24e992a1a863e0fe4c6f90e4c7 Mon Sep 17 00:00:00 2001 From: cdawei <> Date: Thu, 5 Feb 2026 18:23:45 +1100 Subject: [PATCH 3/3] Update dependency order --- pubspec.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 392aa1f..89751ff 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,10 +26,10 @@ dependencies: media_kit_libs_video: ^1.0.7 media_kit_video: ^2.0.1 path: ^1.9.1 - # universal_html: ^2.3.0 - url_launcher: ^6.3.2 path_provider: ^2.1.5 + # universal_html: ^2.3.0 universal_web: ^1.1.1+1 + url_launcher: ^6.3.2 dev_dependencies: custom_lint: ^0.8.1