Web-only libraries should only be used in Flutter web plugins.

== Why is this an issue?

The following libraries:

* https://dart.dev/libraries/dart-html[`dart:html`]
* https://api.flutter.dev/flutter/dart-js/dart-js-library.html[`dart:js`]
* https://api.flutter.dev/flutter/dart-js_util/dart-js_util-library.html[`dart:js_util`]

are not supported outside of a https://dart.dev/web[web context].

Using them in a non-Flutter library or in a Flutter library that is not a web plugin may lead to runtime errors.

The rule reports an issue on any `import` statement that references one of the above libraries:

[source,dart]
----
import 'dart:html';    // Non compliant
import 'dart:js';      // Non compliant
import 'dart:js_util'; // Non compliant
----

A non-Flutter library is identified as a library with a `pubspec.yaml` file that does not have a dependency on the `flutter` package:

[source,yaml]
----
dependencies:
  other_package: ^1.0.0
  # Missing flutter dependency
----

A Flutter library that is a web plugin is identified as a library with a `pubspec.yaml` file that has a dependency on the `flutter` package and declares the web context, potentially among other platforms:

[source,yaml]
----
name: my_project
dependencies:
  flutter:
    sdk: flutter

flutter:
  plugin:
    platforms:
      web:
        flutter_web: any
        flutter_web_ui: any
      android:
        package: com.example.hello
        pluginClass: HelloPlugin
----

== How to fix it

Remove the dependency to the web-only library.

=== Code examples

==== Noncompliant code example

[source,dart,diff-id=1,diff-type=noncompliant]
----
import 'dart:html';    // Non compliant
import 'dart:js';      // Non compliant
import 'dart:js_util'; // Non compliant
import 'package:other_package/other_library.dart';
----

==== Compliant solution

[source,dart,diff-id=1,diff-type=compliant]
----
import 'package:other_package/other_library.dart';
----

== Resources

=== Documentation

* Dart Docs - https://dart.dev/tools/linter-rules/avoid_web_libraries_in_flutter[Dart Linter rule - avoid_web_libraries_in_flutter]
* Dart API Reference - https://dart.dev/libraries/dart-html[Core libraries - `dart:html`]
* Flutter API Reference - https://api.flutter.dev/flutter/dart-js/dart-js-library.html[Flutter packages - `dart:js`]
* Flutter API Reference https://api.flutter.dev/flutter/dart-js_util/dart-js_util-library.html[Flutter packages - `dart:js_util`]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Don't use web-only libraries outside Flutter web plugin packages.

=== Highlighting

The entire `import` statement, including the semi-colon: e.g. `import 'dart:html';`.

endif::env-github,rspecator-view[]
