Getting to know FlutterFlow
Getting to know FlutterFlow
I am currently battling through another PoC mobile application, this time using FlutterFlow.
The new project
I have never used this platform before, and I still haven’t figured out how to hand over the end project to someone else yet (I need to build the project in my own account for a couple of reasons, before handing over to a client upon successful delivery), but I’m also a long way from the delivery stage, so we’ll deal with that later.
I mentioned in another post that I had previously built a Proof of Concept in Flutter, though I didn’t truly understand what I was doing, I just did enough to find my way through and get a working concept. By working, I mean, it had a layout and responded to clicks, it didn’t actually do anything interesting, there ws no engineering under the hood. I just figured out how to get the layout I wanted and for it to do things on clicking. As it was, that PoC was unsuccessful the potential client went with something built in Mendix instead.
The brilliant little project
I had recently started looking at the Dart language as part of a personal project, I already have experience of building layouts in Flutter and thought that a low-code platform that sped up the layout building would make for a brilliant little project.
At this point in time, I would say that I was wrong. First off, FlutterFlow is really good, there is no denying how satisfying it is to build something in a What You See Is What You Get (WYSIWYG) interface. It reminds me of things like old-school Visual Basic or maybe Delphi, where you can just drag a button to where you want it, it kind of snaps to any constraints within the system and that’s it. You can quickly immitate simple actions without any logic at all. More complex actions do require the logic and I assumed my recent excursion into the Dart language would help there. It probably will.
However, my initial wow I like this feeling has faded somewhat. For all the successes of the FlutterFlow platform it also has some really annoying constraints. Things that make sense when you are coding the layout yourself, because you have no choice but to follow the Flutter rules. The friendly ‘just drag and drop’ interface of FlutterFlow leads you into traps where you can put some effort into getting what you want and then later find that you needed a different widget to wrap around the widgets that you do have. I appreciate that this might not make much sense to someone that isn’t working in Flutter or FlutterFlow, but it has caught me out a couple of times, fixing these errors is quite time consuming.
Hands up, those errors were because I didn’t follow the rules, the annoying thing for me though is that if this is a rule, why does FlutterFlow allow me to build in a way that doesn’t recognise that rule in the first place!
Free vs Paid options
I also don’t like the pricing structure for FlutterFlow though admit I think they chose the pricing model quite well. As of this point in time, the platform has not provided me with an opportunity to make money and therefore I am using the free tier. The free tier gives access to all the basic building blocks as far as I can tell.
There are some things available in the paid options that seem to include multi-page apps that are ready to go basically. I don’t much care for this as if the app I wanted was ready to go then someone else would have made it already. However one area that really annoys me is that access to GitHub is restricted to paid tiers only. There is version control built into the platform, but it’s not the same as being able to keep your own code in your own GitHub up-to-date.
Furthermore, when looking at the code directly, which you do need to do sometimes, there are a number of FlutterFlow specific imports which I imagine means that we cannot deploy to the app-store(s) without moving to a paid tier (though I don’t know if that is the case yet) as I don’t know where Flutter would pull those imports from if you were running the code on your own machine. Looking at the code is also not expecially nice inside the FlutterFlow environment, If I make mistakes with widgets, it is sometimes easier to just copy the code into another IDE, make changes then past it back into FlutterFlow.
What about the backend?
The backend for my project is Firebase, this is completely separate from the FlutterFlow experience. I don’t pretend to know Firebase but it works the same regardless of the frontend, I have no issues with that. Hat’s off to FluterFlow for the simplicity and ease of connecting Firebase to the frontend, they made this very easy. I mean it’s not hard to connect Firebase to a React frontend either, but it is almost as simple as point and click in FlutterFlow, this process really is easy.
I did also try Supabase which is another backend available in the FlutterFlow interface but it seems to be limited to authentication only, unsure, I wasn’t able to quickly get on top of this product so reverted back to Firebase which I have already used a few times.
Firebase is easy to a point…
As with the rest of my experience with FlutterFlow, there is a but. For some reason (perhaps I am the reason) the simplicity of setting up and connecting a Firebase database to your frontend, ends at the setup/connection stage. It seems to me that you need to create the tables in both locations (you need to create the same table in Firebase and FlutterFlow). You don’t need to define the data or the structure in Firebase, but you do need to create the table twice (at least it seems that way to me) and I find this really odd.
FlutterFlow University
It is not lost on me that all of my stumbles are the result of not fully understanding the platform. This is where FlutterFlow shines again, they have an enormous amount of documentation and a whole series of of videos on their YouTube space that go through the basics and a little beyond the basics. There is also a fairly decent community support space and a market-place for buying ready-made functionality.
I’m not sure if I am helped or hindered by having some previous knowledge of the underlying products behind FlutterFlow or perhaps my underlying knowledge is too small and therefore working against me in that I am making too many assumptions. I guess I’ll follow this article up in a few weeks with my thoughts after successful delivery of the project.
Final words…
For any negativity aimed at FlutterFlow please disregard, it really does seem to be a special kind of platform, it just tricks me into making errors that simply arent possible when you build with Flutter directly.
Check back again sometime in the future to see how I get on with this one, hopefully I am able to share more details of the app and functions within once I get on top of the beast.