In the end, my ultimate answer is once again going to be this idiom, but to address your specific questions,
You’re trying to communicate information from A to B. The right way to do that depends on what (or, in this case, when) A and B are. Storage is the right choice when the app closes between A and B: when you’re talking to future app runs. It’s a bad choice when A and B are in the same app run, because it slows you down and requires dealing with synchronization needlessly.
Global variables simplify things until they don’t, at which point they spread like gangrene and kill your app’s maintainability. You have no way of telling consumers of the global when it has changed. Now is the point where I circle back to the first link I posted.
This is a totally understandable desire and frustration. That being said, the faster you train yourself not to want to do this, the happier you will become. You’re thinking imperatively: do A, then do B and put the result into C. Web app frameworks work reactively: when A happens, convert it into a B and send it over to C where it will be presented to the user.