From 4fef9001c7479f986cac3abe6f1c25ab2490fb05 Mon Sep 17 00:00:00 2001 From: AmirHossein Mohammadazadeh Date: Mon, 3 Jun 2024 11:17:40 +0200 Subject: [PATCH] migrating dart:html to package:web (#507) --- example/pubspec.lock | 12 ++++++++++-- lib/fluttertoast_web.dart | 31 +++++++++++++++++-------------- pubspec.lock | 10 +++++++++- pubspec.yaml | 1 + 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 07d0d577..ae5b5bb7 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -78,7 +78,7 @@ packages: path: ".." relative: true source: path - version: "8.2.3" + version: "8.2.5" leak_tracker: dependency: transitive description: @@ -204,6 +204,14 @@ packages: url: "https://pub.dev" source: hosted version: "13.0.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" sdks: - dart: ">=3.2.0-0 <4.0.0" + dart: ">=3.3.0 <4.0.0" flutter: ">=1.10.0" diff --git a/lib/fluttertoast_web.dart b/lib/fluttertoast_web.dart index 69914fae..9ebaeb2b 100644 --- a/lib/fluttertoast_web.dart +++ b/lib/fluttertoast_web.dart @@ -1,5 +1,5 @@ import 'dart:async'; -import 'dart:html' as html; +import 'package:web/web.dart' as web; import 'dart:ui_web' as ui; import 'package:flutter/services.dart'; import 'package:flutter_web_plugins/flutter_web_plugins.dart'; @@ -69,27 +69,29 @@ class FluttertoastWebPlugin { /// [injectCssAndJSLibraries] which add the JS and CSS files into DOM Future injectCssAndJSLibraries() async { final List> loading = >[]; - final List tags = []; + final List tags = []; final cssUrl = ui.assetManager.getAssetUrl( 'packages/fluttertoast/assets/toastify.css', ); - final html.LinkElement css = html.LinkElement() + final web.HTMLLinkElement css = web.HTMLLinkElement() ..id = 'toast-css' - ..attributes = {"rel": "stylesheet"} + ..setAttribute("rel", "stylesheet") ..href = cssUrl; tags.add(css); - + final jsUrl = ui.assetManager.getAssetUrl( 'packages/fluttertoast/assets/toastify.js', ); - final html.ScriptElement script = html.ScriptElement() + final web.HTMLScriptElement script = web.HTMLScriptElement() ..async = true // ..defer = true ..src = jsUrl; loading.add(script.onLoad.first); tags.add(script); - html.querySelector('head')!.children.addAll(tags); + for (final web.HTMLElement tag in tags) { + web.document.querySelector('head')!.append(tag); + } await Future.wait(loading); } @@ -105,7 +107,7 @@ class FluttertoastWebPlugin { bool showClose = false, int? textColor}) { String m = msg.replaceAll("'", "\\'").replaceAll("\n", "
"); - html.Element? ele = html.querySelector("#toast-content"); + web.Element? ele = web.document.querySelector("#toast-content"); String content = """ var toastElement = Toastify({ text: '$m', @@ -117,18 +119,19 @@ class FluttertoastWebPlugin { }); toastElement.showToast(); """; - if (html.querySelector("#toast-content") != null) { + if (web.document.querySelector("#toast-content") != null) { ele!.remove(); } - final html.ScriptElement scriptText = html.ScriptElement() + final web.HTMLScriptElement scriptText = web.HTMLScriptElement() ..id = "toast-content" - ..innerHtml = content; - html.querySelector('head')!.children.add(scriptText); + ..innerHTML = content; + web.document.body!.append(scriptText); if (textColor != null) { - html.Element toast = html.querySelector('.toastify')!; + web.Element toast = web.document.querySelector('.toastify')!; String tcRadix = textColor.toRadixString(16); final String tC = "${tcRadix.substring(2)}${tcRadix.substring(0, 2)}"; - toast.style.setProperty('color', "#$tC"); + final style = toast.getAttribute('style') ?? ''; + toast.setAttribute('style', '$style color: #$tC;'); } } } diff --git a/pubspec.lock b/pubspec.lock index 42d26ed6..6b0d5764 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -56,6 +56,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.4" + web: + dependency: "direct main" + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://pub.dev" + source: hosted + version: "0.5.1" sdks: - dart: ">=3.2.0-0 <4.0.0" + dart: ">=3.3.0 <4.0.0" flutter: ">=1.10.0" diff --git a/pubspec.yaml b/pubspec.yaml index 2374484a..b4d649bd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -13,6 +13,7 @@ dependencies: sdk: flutter flutter_web_plugins: sdk: flutter + web: ^0.5.1 flutter: plugin: