Either way you'll end up dealing with a library called "dart:js". While dart:js is very powerful, it can also get complicated very quickly, which is why I never use it.
What are CustomEvents
Custom Events are supported in all the browsers, http://caniuse.com/#search=CustomEvent, so using them is no problem.
Because of their flexibility, you can use them to describe all sorts of stuff happening in your code.
Imagine you wanted to initialize GoogleMaps from your Dart code. Instead of using dart:js to get an instance of the GoogleMaps object, calling some method on it which ends up being very cumbersome, like below.
var googleMap = new JsObject(context['google']['maps']['Map'], [...]); var p1 = new JsObject(context['Point'], [5, 1]); var p2 = new JsObject(context['Point'], [1, -2]); print(p1.callMethod('distanceFrom', [p2])); // Prints 5. Example from https://www.dartlang.org/articles/js-dart-interop/
Catching this in Dart is fairly simple, just setup a listener to your document (or whatever element you want to catch the event on) and parse it out.
Really, it's as simple as that.
Just use Custom Events!