Flutter with JUCE - my solution approaching mobile accessibility

Dear JUCE community,

If you are interested in pairing JUCE with Flutter, I’d like to share with you my stub project (including some documentation on how it was done).

I’d be glad to come to exchange with you about it. Or about any Flutter, React Native, Xamarin, … approaches that you are familiar with connecting to JUCE. Or about JUCE and accessibility.

As much as I love JUCE and its GUI abilities, as much I learned to customize components and look and feel, unfortunately JUCE still has no approach to accessibility, and might never have, without providing native widgets of all platforms or spending immeasurable effort into various accessibility APIs.

Since I’m currently engaged in a project developing an accessible mobile app, I looked for existing solutions and I believe Flutter is an incredible and promising cross-platform UI framework.

Any feedback or suggestions for improvement is welcome,
Thank you and stay jucy

5 Likes

This looks exciting!

Would you mind trying to wrap most of the sources/configurations in a JUCE module? That would make it much easier to integrate into an existing project, and you could customize all the platform specific stuff internally from within your module instead of reconfiguring it for each project.

1 Like

I will consider this, good idea…

I wouldn’t be so sure of that…

1 Like

Cool - That would be so awesome! :raised_hands:

I’m a little out of my depth here, but what do you guys think about the oncoming WASM hype train?

Wouldn’t that solve all our cross compatibility woes?

I have no experience nor knowledge on WebAudio or WebAssembly, but I‘ve been really impressed by the SOUL demos. That looks very promising indeed! With ARIA web UIs can be well accessible. So far I‘m still struggling if audio web apps can already compete against native apps and would be very curious to know what you think or experienced so far:

  • Is a WebAudio software as stable and performant (cpu/battery) as native apps dsp/audio processing?
  • Could it continue playing in the background as a player when switching off the phones display?
  • can a WebApp or hybrid app link 3rd party precompiled libraries (static or dynamic)?

I think you’re missing the point a little bit.

It seems the cliche of bad naming things in Computer Science has struck again. WebAssembly is not really Assembly, and it doesn’t have to be Web!

What makes WASM special is that its an intermediate level byte code (like LLVM) written to an open spec that for the first time many of the big players all agree on. Web Audio is just a browser spec. Definitely Web-y and not necessarily related at all. WebAssembly has taken on this trend lately of prefixing everything with Web, but this imo is a mistake.

I don’t know where WASM is headed, but all that would be needed is something that can interpret the WASM code and interface with the OS directly. Now you’ll get all the speed benefits advertised by the browsers of WASM, but without the weight of a browser itself.

2 Likes

Cool to have another juce as backend example!

Another wonder about such approaches,
So far I’ve yet to see any full cross-platform framework that really makes it possible to write for both desktop and mobile.

Flutter does seem to promise that (https://flutter.dev/desktop)
So I wonder if you even tried.

Since I really avoided React Native or similar approaches since they make it only useful for mobile.

To have a full cross-platform UI framework you currently got:

Qt and JUCE.

All other alternatives seems to keep you in a specific scope.

2 Likes

Thanx for clearing things up - I was completely unaware of what a game changer that could be! Sounds like you are already did some work with WebAssembly? A very interesting field indeed. Still, as for today, some boilerplate work will remain if you have to deal with interfacing closed-source platform-dependent-apis or 3rd party libs if the manufacturer have not precompiled them for WASM machine code. But it could indeed be a big hit for cross-platform as well as web solutions, especially since it’s doing native performance.

Thank you. JUCE still is my favorite cross-platform framework for reaching all major platforms - and I really would love if they could make it screen-reader-able for mobile+desktop usage. I did all my GUI work with JUCE in the last 5 years and the JUCE Team did a very good job in the meantime, e.g. in supporting Android.

I am now at a point where I am forced (which is a good thing!) to finally stop ignoring screenreader users. I even happen to know some non-vision-users and would always have loved to support them with JUCE based software, just did not have the time or resources to solve that.
At the moment I need an accessible GUI solution for Android and iOS (desktops are currently out of my scope, maybe again in future projects). I’m also looking for mobile app developers joining my team, so I have to think about what skills I can expect. Most people around I talked to (business mentors and developer teams) go with ReactNative, so I startet looking if that could be the best solution. I compared some frameworks and was really impressed by Flutter and its huge potential - especially since it’s addressing mobile+web+desktop - even if the latter are still in beta/alpha stages. It’s growing very fast and has many supporters. Since I found no projects online trying to run JUCE with Flutter I wanted to try it out on my own, if Flutter could be a working solution at all to take into account.

Yes, QT might be another very well fitting solution, do you have some experience in mobile UI with V-Play/Felgo?