We have various tools that can help you configure your setup without an IDE. For example, `flutter run` listens to SIGUSR1 to do a hot reload, `flutter analyze` has a flag to write the latest results to a file, etc.
If you're after code completion, vim-lsc plugin combined with dart_language_server should work.
I'm hoping someone with more experience could chime in.
In my work, I've been using other cross-platform technologies, such as Xamarin and React Native briefly (actually currently doing a customer project with RN). In my experience, RN is not that bad and mostly gets the job done, but I've grown to like Flutter more. The tooling and documentation are top-notch ("it just works"), and since it custom renders everything, the UIs are consistent across devices and platforms. For example, with React Native I had to recently fight with a third-party library to have gradients (RN doesn't support them), but couldn't get the library working.
Another thing that I heard from colleagues was that React Native can introduce a lot of breaking changes between versions. I have a one-year-old hobby Flutter project and I was still able to run that without any pain when the first beta came out.
Being a native Android & Java guy for the last 5 years or so, having the strong type system of Dart also felt more natural to me than Javascript.
Some good points of Flutter so far:
* Hot reloading is fast, much easier to iterate on designs and experiments
* Plugins seem to be easy to make, they made an architecture that focuses on minimal boilerplate
* Being able to use async-await syntax on a whole UI view is a cool idea (like Android's onActivityResult() with much less typing involved). Push a view onto the navigation stack, let it collect input from the user, pop off the stack with a data structure representing the user input)
* Animations are easy
* Minimal opening of Xcode. Most days I can get by without ever opening it.
* Data flow architectures like the Elm Architecture or Redux are well supported
Some not-so-good points:
* Having null
* Material design is pushed way too hard - Cupertino widget documentation/examples are lacking
* Code generation needed for JSON parsing
* State for StatefulWidgets are generic over the Widget and not the other way around - I would have expected a StatefulWidget to be generic over a State e.g. `MyHomePage extends StatefulWidget<MyHomePageState>`
* Because of the previous point, the UI building function, build(), is usually on the State class and not the Widget class
* My relatively barebones app is around 33MB on iOS
Overall though I like it! Lots of good ideas and tooling. I one day want to create something with a similar architecture using a language like Rust instead of Dart, and native UI components instead of reimplementing the entirety of Android and iOS component behavior.
Cineworld in the UK released an "app", which is just a WebView for their mobile website, so it replicates all the horrible aspects of that experience.
By far the prettiest app for Helsinki kino/cinema though.
That being said, Flutter does have unofficial Linux and MacOS desktop embedders: https://github.com/google/flutter-desktop-embedding
I haven't had the time to look into it, but having seen a couple example Flutter desktop apps, it seems really promising!
but had to do some hacks. At the end I had flutter_sdl.dll (~10-15mb, depending how you compile it), and was able to add flutter_gallery (among other things).
Things that are missing - keyboard input, but there is a very hihg-level plugin system how to achieve this. Just haven't had the time to do it.
Tried implementing mousewheel, by simulating pad touches - but it ain't the same. Feels kind of obvious now, why it's not the same, but generally the controls themselves need to know about mousewheel. For example a gauge-like spinner can't be emulated this way.
Still very snappy, and someone on the flutter-dev mailing list mentioned that he, or she got live reloading.
Flutter and Dart come with a nice HTTP library out of the box. In my experience, it does everything you'd expect from a networking library. If you're looking for something like Retrofit on Android, there's a package called "jaguar_http" that does the job.
For taking/picking images, you'd use the officially supported "image_picker" plugin. It exposes a nice API based on Dart's Futures and handles Android's onActivityResult dance for you in the background. If you're looking into embedding a camera preview in a Flutter app, there's a package called "camera" for that.
There's generally a plugin that handles the platform stuff you need to do. If not, you can always create one and use Java/Kotlin/Swift/ObjC code to call the native SDK APIs you need yourself. Having published a couple plugins myself, I've found the plugin system to be really nice.
Sorry about that!
"inKino - A cross platform movie and showtime browser for Finnkino cinemas, made with Flutter."
"inKino - a showtime browser for Finnkino cinemas"
Adding a "mobile" in there somewhere would be a significant improvement.
In addition "movie app" is a bit underspecified. Maybe it's for managing movies? Editing them? Playing them?
Especially when both confusions are combined, it can be easy to get the wrong idea of what the submission is.