The standard flow of a Monarch screen transition from A to B is that two flows of execution start at the same time (two coroutines): one to hide A and one to show B.
HIDE A
- Notify transition listeners that A is about to be hidden
- Release input focus on A
- Notify focus listeners that A lost focus
- Start ShowOut (ie hide) transition on A
- Unload A
- Notify transition listeners that A has been hidden
The above happens as fast as possible. The only delay you have is the time it takes to transition the screen. In your case there is no transition so it will all happen in a single frame.
SHOW B
- Notify transition listeners that B is about to shown
- Load B
- Start ShowIn (ie show) transition on B
- Acquire input focus on B
- Notify focus listeners that B gained focus
- Notify transition listeners that B has been shown
The above also happens as fast as possible. BUT there is a problem here and that is that it takes at least one frame to load and enable the proxy for B.
In your case this means that A is unloaded in a single frame but B is not loaded and visible until one frame later. So for at least one frame there is no screen visible at all, and that is why it flickers.
The solution? Either add a transition/delay on A or preload B. If B is preloaded there is no delay in showing B. You can preload a screen by checking the Preload checkbox on the screen script. Keep in mind though that the resources for B will be kept in memory at all times with this solution.