Hy there, fellow developers, programmers, builders, whatever !
So, as you already know, since I gave up bgt as a dead horse despite making some libs for it by then, I too, like some others here, jumped on the c# bandwagon. I didn't very much like ms back then, as I don't really even now, however the language sintax was familiar to me, the ecosystem sounded great(well, it still kinda is today), it integrated with the windows API in a very friendly object oriented way(remember, no .net core when I enrolled), some others too, but I think you got the picture already.
Maybe I didn't mention it on this forum, but I was always passionate about creating mobile apps and actually got into programming specifically for this thing, so I was searching to apply my existing c# knowledge to the mobile dev field, well, it seemns I got more than I barggined for, so here it goes, xamarin.forms.
For those of you who didn't read my previous huge post about this matter, xamarin.forms strives to bring the .net platform to mobile devices, be it android, iOS, or even windows phone 10. It manages to do so by employing native controls for the UI made with it, thus being kinda faster and more accessible besides giving the intended sentiment, the app won't look out of place on any platform x.f supports.
Plus, what convinced me to try xamarin.forms was the way of writing UI in xaml, an easier way for blind people to write and imagine UI, as a hierarchical structure of nodes, plus parent layouts automatically size and position the children controls according to the person's specifications. Of course it won't be the most stunning UI ever, however I still had a chance to not make the controls overlap or other weird side effects, like not enough space in the window for the contents of a list or a textbox, or even the layout of the thing looking ugly and made by someone who's not caring about his UI look and user experience at all.
Well, all that is good, but in their strive to make everything as native to the platforms as possible, they arrived to some compromises and decisions that have consequences I don't like as a blind developer, and I bet my intended audience, mostly blind users, won't like it that much either.
First thing, accessibility. You might wander how can it be possible to do something less accessible than the platform provides while you're using the native controlls, well, only microsoft knows what microsoft does, tbh. Now, let's describe the problem a little, shall we?
So, first thing, navigation is fucked as hell. For example, on android, if you have an app with two or more pages(screens) and you navigate between the first and another one, guess what, the back button is unlabeled and I can't, unless I delve deep in the internals, change that. Plus, on windows it's even worse, the screen reader doesn't even focuse on the back button, it only says grafic and so on. Furthermore, when you navigate to a page, focus isn't placed anywhere, so the user practically doesn't know they are interacting with a new screen entirely.
There are lots of issues with this alone, I even opened an issue against them, not even an answer, maybe some bots self asigned, but nothing more.
Now, to some more seriously bad design choices.
You know the settings screen any moderately large mobile or desktop app has to eventually get? The xamarin.forms guys recommend we implement that with table views, a special data presentation view, like a grid basically, there are some user modifyable cels there.
Anyways, the android version of it is just deplorable from both a visual and accessibility standpoint, I think. So, from a rendering and layout and screen reader interaction side, for checkboxes, there is first the text, then the checkbox, terrible design. Next, the settings sections(categories) aren't marked properly, just a lable among all those cels, doesn't make much sense to a screen reader user, believe me. As if the trubbles can't ever end, the edit box cels are kinda inaccessible, the keyboard doesn't show when tapping on it like a normal edit box would, though talkback says cursor to the end and all that. Only when you long press on the thing, you might get lucky and get that fucking keyboard finally, but then something else happens, and so on. This is all I'm saying, it's needless to speak about uwp, the cels aren't even read. I would like to share the uwp version as well, but it's farely large, wetransfer won't accept it, plus my google drive is kinda full.
However, if you want to see the android app for your self, here's the demo apk
https://we.tl/t-IWNPksaqCg
Besides, it has some stupid limitations, like the app can't do anything if it's in the background, can't do notifications, nothing of that kind of thing, so not really native, not at all. Plus, if you want to use a checkbox in your app, you have to make a grid with two columns or something, you must put a label next to the checkbox to explain it, like the text we get to set on almost every OS besides iOS, same with the switch control, I wander how is it that edit boxes don't need to have the same treatment?
So, all in all, I'm fed up with this xamarin.forms thingi and I am considering two options at the moment, For those of you who are more experienced, please advice me on what to do next, maybe this is one of those forcs in my programming life, hobby, whatever.
First option is continuing to develop with .net and c#, but use the native platform layers of xamarin to develop with each platform's API, like xamarin.android and the microsoft uwp sdk. With this approach, I might get a bit of a different UI for each platform, which I don't consider so bad, even though I would still have the common business logic in a class library. Advantages can be that I know c# and the dotnet tooling to some extent already, so the learning curve won't be that steep. I would have to learn each platform api with their unique ways of doing things however, but a bit of learning won't break a brain, right?
Next, another cross-platform framework, though almost reacher than xamarin in features, react native. Advantages can include that all is as cross-platform as possible again, so my code would be more portable and whatnot. Another one can be that I have a full set of API's dedicated to accessibility, a deeper one than xamarin currently has to be sure. A more important one is that I could instantly see changes applyed to my project on a device in realtime, on the device itself, the hot reload backed by expo is more powerful than what xamarin currently has.
Disadvantages are some too, for example I never worked with too much javascript, I feel as if I won't really recognise it if you gave me a file you say has javascript code. Besides, node.js is completely alien to me, as well as its package manager(npm), so I DK if I would have enough libraries and sdks as I do in .net world with nuget. Then, I think visual studio support is meh at best, please correct me if I'm wrong.
Now, I ask you guys, what do you think would be the better corse to take, go native with c# and platform-specific UI, or learn the react native framework and get a better grasp on javascript? If you'd recommend the latter, where would you recommend me learn javascrypt that isn't very browser tainted, as well as the paradigms it uses in order to be able to better understand react native documentation?
Pages 1