universal_html icon indicating copy to clipboard operation
universal_html copied to clipboard

BroadcastChannel is not a type.

Open jay-athelas opened this issue 1 year ago • 2 comments

I am trying to use the BroadcastChannel api , to send communication between a service worker and the main thread. Our app is hybrid, currently support web, ios and android.

Even when importing from import 'package:universal_html/html.dart'; I get a compilation error when trying to build for ios, stating that BroadastChannel is not a type. I can click on it and see the definition in html_dart2js.dart. What is going on here?

To replicate:

  • Import universal html
  • Use BroacastChannel BroadcastChannel? _channel;
  • Compile for ios

jay-athelas avatar Mar 22 '24 14:03 jay-athelas

You can use 1 of the following 2 ways:

  1. Use of conditional imports/exports
  • Create 'broadcast_channel_stub.dart' to use for mobile:
class BroadcastChannel {
   final String name;

   BroadcastChannel(this.name);

   Stream<dynamic> get onMessage => const Stream.empty();
}
  • Create 'broadcast_channel_web.dart' to use for web:
export 'dart:html' show BroadcastChannel;
  • Create 'broadcast_channel.dart' to use for all platforms:
export 'broadcast_channel_stub.dart' if (dart.library.html) 'broadcast_channel_web.dart';
  1. Wait for PR #97 to be merged for use.

dab246 avatar Mar 25 '24 03:03 dab246

Thanks @dab246 , awesome, do you have an estimate of when this PR might be merged?

jay-athelas avatar Mar 26 '24 16:03 jay-athelas