H3 Web
In most cases you should not use this library directly, use h3_dart or h3_flutter instead.
This package provides implementation of H3 abstraction from package:h3_common
through bindings to Ubers's h3-js library written on JS.
Bindings are generated using dart_js_facade_gen
tool.
// Get hexagons in specified triangle.
final h3 = const H3Web();
final hexagons = h3.polyfill(
resolution: 5,
coordinates: [
GeoCoord(20.4522, 54.7104),
GeoCoord(37.6173, 55.7558),
GeoCoord(39.7015, 47.2357),
],
);
Setup
In most cases you should not use this library directly, use h3_dart or h3_flutter instead.
This library is built on top of h3-js
, you have to import it.
Add next line to your index.html
:
<script defer src="https://unpkg.com/h3-js@3.7.2"></script>
Note, main.dart.js
import should go after this line
For contributors:
Facade for h3-js library is placed at h3_web/lib/src/generated/types.dart
and generated by dart_js_facade_gen
dependency.
To regenerate this file run npm run generate
(Node.js should be installed)
dart_js_facade_gen
is currently out-of-date and it does not support null-safety.
So, while using h3_js
you should treat any response as nullable, even if dart analyzer says it's not.
If you want to check the response for null, you should first cast it, e.g.:
// ignore: unnecessary_cast
final res = h3_js.h3ToCenterChild(
h3Index.toH3JS(),
resolution,
) as String?;
Every responsed by h3_js list, you should also cast to avoid runtime errors:
h3_js
.polyfill(coordinates.map((e) => [e.lat, e.lon]).toList(), resolution)
.cast<String>() // here, althrough `polyfill` method declaration says it returns List<String>
.map((e) => e.toBigInt())