I am not aware of a built-in way to do this. One way you could do it, would be by drawing your image to a temporary canvas and modify the pixels of the image yourself. But you'll need functions to convert between RGB and HSL. You can use this method to do the same thing to saturation and lightness.
double hue = 0.8;
var data = _context.getImageData(0, 0, _canvas.width, _canvas.height);
var pixels = data.data;
List<double> hsl;
List<int> newPixel;
for(var i = 0, len = pixels.length; i < len; i += 4) {
hsl = rgbToHsl(pixels[i + 0], pixels[i + 1], pixels[i + 2]);
newPixel = hslToRgb(h, hsl[1], hsl[2]);
// or newPixel = hslToRgb((hsl[0] + hue) % 1.0, hsl[1], hsl[2]);
pixels[i + 0] = newPixel[0];
pixels[i + 1] = newPixel[1];
pixels[i + 2] = newPixel[2];
}
_context.putImageData(data, 0, 0);
Another way, using you method, could be to additionally use your base image as a mask for the canvas with the changed hue. You would have to loop through your pixels and change pixel[i + 3]
to the alpha of the base image. But you wouldn't have to convert between HSL and RGB.