Create a (sub) widget that contains the full black image. Make that widget part of your main GUI. Set the default opacity of this widget to 0, and make it not-hit-testable. Make it overlap everything else.
In your PlayerController, after you add the GUI to the player viewport, save a reference to your GUI top-level widget.
When you need to fade-black, call some method on the GUI widget, and have that method (which you implement in your GUI top-level widget) start the timeline to fade in to black.
When you need to fade back, call some other method on your GUI widget, which plays the timeline back again.
The main trick is to make sure that you create and add the GUI widget to the player viewport in your local playercontroller BeginPlay() (or similar hook,) and save the created widget object in a variable, so you have a reference to it in the player controller.