I work for a little web-development shop that does the occational app on the side, mostly if an existing customer are interested in having one developed, we don't employ any full time app developers. We have just decided to try out flutter for our next app project. We are close to being done with the actual app development, and it looks like we are going to be done way under budget, so we are very happy with the technology as it currently is.

Before my time, we initially started app development using Cordova. It lined up well with existing expertise in the office as that what we work with most of the time. The apps turned out rather well except for reliability and building.
These are by contract applications, so we make them, release them and don't revisit them unless we need to perform support on them. Changes in the web browser, particularity on iOS has broken these apps on several occasions where we have to go back and fix them. Some of these issues have been expected, such as when iPhone X came to market, but sometimes an update has broken something else, seemingly out of the blue.

We decided to try out some new technologies as we we're not too impressed with Cordova and settled on Nativescript + Vue. Again due to expertise with vue as it is one of the technologies we utilize a lot in web projects. Pretty much all of the people who had been involved with the previous apps found it a better experience than Cordova. But in my opinion, it was also quite infuriating to work with. Hot module reloading never truly worked the way it should, we often had to quit and reload the app for changes to be correctly applied. It didn't end up as cross platform as initially thought.
We had to make a lot of platform specific components for things we initially didn't think we had to, mostly because the shared options of components in their standard libraries we're not as good as we had hoped. We ended up spending way more time than initially thought wresling components into submission in order to get close to the design we initially envisioned, and we ended up compromising a lot on UI in order to make budget and deadlines. Performance was also something I we had to optimize a lot more for than initially planned. Animations and screen transitions would usually take a performance dive even though our views were very simple and did not really have much data in them at all. We struggled a lot to wrangle UI components into shape, hence why we felt we had to make so many components. And we encountered issues with very simple components such as images in list views not rendering if scrolled out then back in from views.

For this next project I suggested we try flutter before committing more to NativeScript, and we have seen immediate value from this technology over any of the others we have tried.

* We spend way less time on platform specific code, the reusable pieces look more consistent across platforms which means we spend less time tweaking them for either iOS or Android. I think that flutter using its own rendering technique is a serious boon to us who are just making cross platform apps as cheap as possible.

* Any non standard UI component is often way less time consuming to develop in flutter as you don't have to write platform specific version of it. This has also let us cut down on external dependencies which we felt were necessary on Nativescript in order to implement some features in the allotted time available. This is something I think we will appreciate a lot over time, as NativeScript does not have the most active community and the potential work we will have to do to maintain components that may be abandoned by their original developer down the line.

* Tooling works a lot better for flutter. Hot module reloading actually works(most of the time). Statefulness and these reload is not as smooth. Actual breakpoints and debugging is very nice. We could get that with Nativescript too, but only in the javascript code, not for the templates which were written in XML. And if something went wrong on the "native" side, it would be like a black box to us which we could not truly inspect our way into. Flutter allows us to follow the stack deep into any widget.

* When you have to write native code for Flutter, you at least get the help of the tooling built for native platform development, as opposed to NativeScript where you declare that in javascript. It is very seldom needed for the kind of projects we've been doing however so I have no great insights here.

I'm very apathetic towards Dart as a language. It is entirely inoffensive. I felt like I could work in it without even trying to learn it, and I think I have spent at most an hour or two hours to look into and learn the more dart specific language features. I am not that much of a fan of how to deal with JSON data and the dynamic type in there. Dynamic feels a bit accident prone but other than that, Dart as a language gets less on my nerves than some of the more common and frankly way more tedious web related programming languages I have to use daily for work.

As far as the kind of work we're doing, Flutter is great