From 6bb36a2ddda8bb9a088b0c9fe8d7d41df2316957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Ku=C3=9Fowski?= Date: Mon, 29 Dec 2025 14:32:49 +0100 Subject: [PATCH] refactor: Migrate to universal web --- .../homeserver_picker/homeserver_picker.dart | 2 +- lib/pages/image_viewer/video_player.dart | 9 ++- lib/utils/client_manager.dart | 4 +- .../builder.dart | 4 +- .../local_notifications_extension.dart | 12 ++-- lib/widgets/matrix.dart | 2 +- macos/Flutter/GeneratedPluginRegistrant.swift | 4 +- pubspec.lock | 60 ++++++++----------- pubspec.yaml | 4 +- 9 files changed, 49 insertions(+), 52 deletions(-) diff --git a/lib/pages/homeserver_picker/homeserver_picker.dart b/lib/pages/homeserver_picker/homeserver_picker.dart index 7f3f6cfa6..f081c3583 100644 --- a/lib/pages/homeserver_picker/homeserver_picker.dart +++ b/lib/pages/homeserver_picker/homeserver_picker.dart @@ -7,7 +7,7 @@ import 'package:collection/collection.dart'; import 'package:flutter_web_auth_2/flutter_web_auth_2.dart'; import 'package:go_router/go_router.dart'; import 'package:matrix/matrix.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:url_launcher/url_launcher.dart'; import 'package:fluffychat/config/app_config.dart'; diff --git a/lib/pages/image_viewer/video_player.dart b/lib/pages/image_viewer/video_player.dart index 052bd6cff..1ba5d42b5 100644 --- a/lib/pages/image_viewer/video_player.dart +++ b/lib/pages/image_viewer/video_player.dart @@ -6,8 +6,9 @@ import 'package:flutter/material.dart'; import 'package:chewie/chewie.dart'; import 'package:matrix/matrix.dart'; import 'package:path_provider/path_provider.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:video_player/video_player.dart'; +import 'dart:js_interop'; import 'package:fluffychat/utils/localized_exception_extension.dart'; import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart'; @@ -64,8 +65,10 @@ class EventVideoPlayerState extends State { // Create the VideoPlayerController from the contents of videoFile. if (kIsWeb) { - final blob = html.Blob([videoFile.bytes]); - final networkUri = Uri.parse(html.Url.createObjectUrlFromBlob(blob)); + final blob = html.Blob( + videoFile.bytes.map((int byte) => byte.toJS).toList().toJS, + ); + final networkUri = Uri.parse(html.URL.createObjectURL(blob)); videoPlayerController = VideoPlayerController.networkUrl(networkUri); } else { final tempDir = await getTemporaryDirectory(); diff --git a/lib/utils/client_manager.dart b/lib/utils/client_manager.dart index c318ceb11..bff3827c0 100644 --- a/lib/utils/client_manager.dart +++ b/lib/utils/client_manager.dart @@ -9,7 +9,7 @@ import 'package:flutter_vodozemac/flutter_vodozemac.dart' as vod; import 'package:matrix/encryption/utils/key_verification.dart'; import 'package:matrix/matrix.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -145,7 +145,7 @@ abstract class ClientManager { static void sendInitNotification(String title, String body) async { if (kIsWeb) { - html.Notification(title, body: body); + html.Notification(title, html.NotificationOptions(body: body)); return; } if (Platform.isLinux) { diff --git a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart index 54b0d453b..de86d3a89 100644 --- a/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart +++ b/lib/utils/matrix_sdk_extensions/flutter_matrix_dart_sdk_database/builder.dart @@ -6,7 +6,7 @@ import 'package:matrix/matrix.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/utils/client_manager.dart'; @@ -54,7 +54,7 @@ Future flutterMatrixSdkDatabaseBuilder(String clientName) async { Future _constructDatabase(String clientName) async { if (kIsWeb) { - html.window.navigator.storage?.persist(); + html.window.navigator.storage.persist(); return await MatrixSdkDatabase.init(clientName); } diff --git a/lib/widgets/local_notifications_extension.dart b/lib/widgets/local_notifications_extension.dart index 62b295c12..ee85d4a85 100644 --- a/lib/widgets/local_notifications_extension.dart +++ b/lib/widgets/local_notifications_extension.dart @@ -7,7 +7,7 @@ import 'package:collection/collection.dart'; import 'package:desktop_notifications/desktop_notifications.dart'; import 'package:image/image.dart'; import 'package:matrix/matrix.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:fluffychat/config/setting_keys.dart'; import 'package:fluffychat/l10n/l10n.dart'; @@ -19,7 +19,7 @@ import 'package:fluffychat/widgets/fluffy_chat_app.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension LocalNotificationsExtension on MatrixState { - static final html.AudioElement _audioPlayer = html.AudioElement() + static final html.HTMLAudioElement _audioPlayer = html.HTMLAudioElement() ..src = 'assets/assets/sounds/notification.ogg' ..load(); @@ -81,9 +81,11 @@ extension LocalNotificationsExtension on MatrixState { html.Notification( title, - body: body, - icon: thumbnailUri?.toString(), - tag: event.room.id, + html.NotificationOptions( + body: body, + icon: thumbnailUri?.toString() ?? '', + tag: event.room.id, + ), ); } else if (Platform.isLinux) { final avatarUrl = event.room.avatar; diff --git a/lib/widgets/matrix.dart b/lib/widgets/matrix.dart index dbbee270e..e748952bf 100644 --- a/lib/widgets/matrix.dart +++ b/lib/widgets/matrix.dart @@ -13,7 +13,7 @@ import 'package:matrix/encryption.dart'; import 'package:matrix/matrix.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; -import 'package:universal_html/html.dart' as html; +import 'package:universal_web/web.dart' as html; import 'package:url_launcher/url_launcher_string.dart'; import 'package:fluffychat/l10n/l10n.dart'; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index c1565959a..03f1fc53c 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -16,7 +16,7 @@ import file_picker import file_selector_macos import flutter_local_notifications import flutter_new_badger -import flutter_secure_storage_macos +import flutter_secure_storage_darwin import flutter_web_auth_2 import flutter_webrtc import geolocator_apple @@ -48,7 +48,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) FlutterNewBadgerPlugin.register(with: registry.registrar(forPlugin: "FlutterNewBadgerPlugin")) - FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin")) + FlutterSecureStorageDarwinPlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStorageDarwinPlugin")) FlutterWebAuth2Plugin.register(with: registry.registrar(forPlugin: "FlutterWebAuth2Plugin")) FlutterWebRTCPlugin.register(with: registry.registrar(forPlugin: "FlutterWebRTCPlugin")) GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 3103ac5f9..2f041f7cd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -161,14 +161,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.0" - charcode: - dependency: transitive - description: - name: charcode - sha256: fb0f1107cac15a5ea6ef0a6ef71a807b9e4267c713bb93e00e92d737cc8dbd8a - url: "https://pub.dev" - source: hosted - version: "1.4.0" checked_yaml: dependency: transitive description: @@ -580,50 +572,50 @@ packages: dependency: "direct main" description: name: flutter_secure_storage - sha256: "9cad52d75ebc511adfae3d447d5d13da15a55a92c9410e50f67335b6d21d16ea" + sha256: da922f2aab2d733db7e011a6bcc4a825b844892d4edd6df83ff156b09a9b2e40 url: "https://pub.dev" source: hosted - version: "9.2.4" + version: "10.0.0" + flutter_secure_storage_darwin: + dependency: transitive + description: + name: flutter_secure_storage_darwin + sha256: "8878c25136a79def1668c75985e8e193d9d7d095453ec28730da0315dc69aee3" + url: "https://pub.dev" + source: hosted + version: "0.2.0" flutter_secure_storage_linux: dependency: transitive description: name: flutter_secure_storage_linux - sha256: be76c1d24a97d0b98f8b54bce6b481a380a6590df992d0098f868ad54dc8f688 + sha256: "2b5c76dce569ab752d55a1cee6a2242bcc11fdba927078fb88c503f150767cda" url: "https://pub.dev" source: hosted - version: "1.2.3" - flutter_secure_storage_macos: - dependency: transitive - description: - name: flutter_secure_storage_macos - sha256: "6c0a2795a2d1de26ae202a0d78527d163f4acbb11cde4c75c670f3a0fc064247" - url: "https://pub.dev" - source: hosted - version: "3.1.3" + version: "3.0.0" flutter_secure_storage_platform_interface: dependency: transitive description: name: flutter_secure_storage_platform_interface - sha256: cf91ad32ce5adef6fba4d736a542baca9daf3beac4db2d04be350b87f69ac4a8 + sha256: "8ceea1223bee3c6ac1a22dabd8feefc550e4729b3675de4b5900f55afcb435d6" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "2.0.1" flutter_secure_storage_web: dependency: transitive description: name: flutter_secure_storage_web - sha256: f4ebff989b4f07b2656fb16b47852c0aab9fed9b4ec1c70103368337bc1886a9 + sha256: "6a1137df62b84b54261dca582c1c09ea72f4f9a4b2fcee21b025964132d5d0c3" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "2.1.0" flutter_secure_storage_windows: dependency: transitive description: name: flutter_secure_storage_windows - sha256: b20b07cb5ed4ed74fc567b78a72936203f587eba460af1df11281c9326cd3709 + sha256: "3b7c8e068875dfd46719ff57c90d8c459c87f2302ed6b00ff006b3c9fcad1613" url: "https://pub.dev" source: hosted - version: "3.1.2" + version: "4.1.0" flutter_shortcuts_new: dependency: "direct main" description: @@ -1921,14 +1913,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.0" - universal_html: - dependency: "direct main" - description: - name: universal_html - sha256: c0bcae5c733c60f26c7dfc88b10b0fd27cbcc45cb7492311cdaa6067e21c9cd4 - url: "https://pub.dev" - source: hosted - version: "2.3.0" universal_io: dependency: transitive description: @@ -1945,6 +1929,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + universal_web: + dependency: "direct main" + description: + name: universal_web + sha256: "618a9d8659e9429875f69d4da0fb9c0c143d3d4cdab28b4545502088aa50ed62" + url: "https://pub.dev" + source: hosted + version: "1.1.1+1" unorm_dart: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8b93eb5f8..756885c80 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -36,7 +36,7 @@ dependencies: sdk: flutter flutter_map: ^8.2.2 flutter_new_badger: ^1.1.1 - flutter_secure_storage: ^9.2.4 + flutter_secure_storage: ^10.0.0 flutter_shortcuts_new: ^2.0.0 flutter_vodozemac: ^0.4.1 flutter_web_auth_2: ^4.1.0 @@ -77,7 +77,7 @@ dependencies: swipe_to_action: ^0.3.0 unifiedpush: ^6.2.0 unifiedpush_ui: ^0.2.0 - universal_html: ^2.3.0 + universal_web: ^1.1.1+1 url_launcher: ^6.3.2 video_compress: ^3.1.4 video_player: ^2.10.1