@52:
OK, so since I went through this particular thing while learning the principles of flutter my self, I think I have to explain some stuff, very quickly though since this is not the thread for it
First, because flutter doesn't necesarily follow any system UI rules, it can make its widgets look and behave in many ways, both to physical eyeballs and screen readers, that's why I managed to make the increment button be rounded in stead of square, hope I got the color right though, dk if black is good for a border or not, but that's neither here nor there.
To achieve that, in stead of having this huge widget object with dozens of properties and flags, each aspect of an onscreen controll is a separate widget, applying its effect on the widget its inclosing, a.k.a child. As you imagined, this can be recursive at infinitum, that's why I can have a focusable label with a text that's updating based on a variable.
If you know the ECS, you can think of the flutter framework, your handlers for events and all that as the system, then the end widgets you want who are just subtrees in the larger UI tree are considered entities, the various behaviours that make up each widget are, logically, the components of that controll. I DK if that's the best analogy, however that's one of the reasons I think rust should be a first class citison to the flutter ecosystem, as I think it could fit in there quite nicely. But meh, google being google, not gonna happen.
what you must keep in mind at all times is that, eventually, all widgets, no matter how nested, are actually classes, you are instantiating them in those parentheses with keyword arguments or something. That was the confusing part for me, I didn't know what I was actually doing, didn't know enough dart to realise that I'm calling constructors, I was trying to learn as much flutter related information as I could, but then I realised that I can't do one without at least a modest understanding of the other. I begun learning dart with this well, it's just the bastard of java, c#, maybe a bit of javascrypt/typescrypt thrown in there for good measure, how hard could it be? so don't do the same mistake as I did, at least go through the language tour.
Anyway, since those are classes, you can either write it all out, ending each constructor when it should(in a way like braces but with more ambiguous errors if you mess up), or simply store clumps of constructors so chained as a variable, like the separate component it actually is. If you think the outcome of what's gonna be displayed on screen depends on some other parameters, then better make it in to a proper widget, with a widget class and everything, you'll thank your self later. Don't think if you want to make a stateful or stateless widget, since if you have a supported ide, the conversion can be done automatically when you decide one over the other. As a rule of thumb, try to keep as many of your widgets as possible stateless, since those are lighter and build considerably faster, plus don't have a state object that has to be rebuilt and not used properly if the widget is made stateful in error, so try to keep that in mind.
actually, I didn't write it in any supported editor or anything, the only thing I used was notepad and the skil I gained with braces to manage those parens, they are nothing more than braces to me. Could I have split that thing further, possibly, however maybe not with widget classes, perhaps just simple variables would be enough. However the point is, this is learnable, eventually. Now, with a supported editor, indeed you get such wrappings with other widgets, extracting of parts of the tree as a separate widget and so on, however though they are a productivity booster, I recommend you don't use them while learning to cope with this stuff.
another tip for you! do you have a pluggin for your editor that navigates you by indentation levels? if so, it can be really useful here as well. Put your cursor at the beginning of a widget, press the shortcut to go to the next line with same level of indentation, boom, you're at the end of that widget, no matter how deep the hierarchy goes.
back to the topic at hand however, does anyone know why live regions don't work here, or is it the case for everyone? can someone else confirm this?