
Show HN: InKino – An open-source movie app made with Flutter - roughike
https://github.com/roughike/inKino
======
gkya
How feasible is a dev setup with Flutter where one uses Emacs (or any other
general purpose text editor like vi) for coding and the flutter cli for
compiling and testing? I do have a couple app ideas, and I'd definitely prefer
to avoid the IDEs when possible (especially Android Studio which just
strangles my laptop); Flutter seems to fit that workflow, but has anybody got
actual experience doing that?

~~~
Hixie
I use Emacs, and I'm one of the lead contributors to Flutter. Hopefully that
answers your question. :-)

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.

~~~
cbracken
I'm also a Flutter contributer and code entirely in vim. I use dart-vim-plugin
for syntax highlighting and 'flutter analyze --watch' for live analysis.

If you're after code completion, vim-lsc plugin combined with
dart_language_server should work.

[1] [https://github.com/dart-lang/dart-vim-plugin](https://github.com/dart-
lang/dart-vim-plugin)

------
rvanmil
This looks really nice considering it's built with a cross platform framework.
Did you also consider using React Native, and if so what made you decide to
use Flutter instead? My team is looking to move away from Cordova for our
cross platform mobile projects to either one of these so I'd be interested to
hear about this. And thanks for open sourcing!

~~~
roughike
I've been using Flutter for a year now, and I've loved it since the first time
I gave it a try.

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.

~~~
bschwindHN
I've been starting work with Flutter over the past couple weeks. The tooling
and general experience so far has been pretty nice, though it doesn't always
"just work". The fact that flutter is so coupled to Cocoapods is a
disappointment and it means your build system is dependent on Cocoapods not
screwing up - quite a tall order. I already ran into an issue that required me
to generate a new project, copy my source over to get a working app again,
then inspect the source trees to see what went wrong. It turned out to be a
Cocoapod symlink issue or something to that effect. Not entirely a Flutter
issue but something to be wary of.

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.

~~~
roughike
I don't really agree about pushing hard on Material Design. Sure, the current
widget situation might be skewed towards Material components and Cupertino is
lacking. For Material widgets, they've implemented almost everything, even the
most obscure ones. But I think they're pushing more for customized UIs.
Meaning, UIs that don't look Material or Cupertino, but are more of a branded
experience, think Spotify, Tinder, Snapchat, etc. Designs that don't really
conform to Material or iOS design languages. The Hamilton app is a good
example of this. Sadly, I'm not a UI designer so I went with Material Design
on this inKino app since that's an easy route for me.

With your other points, I generally agree. Didn't mean to imply that it "just
works" 100% of the time. But compared to other cross-platform dev tools / SDKs
I've used, I feel like Flutter does such a great job in the tooling
department.

------
shelune
I was just wondering today why Finnkino hasn't released their own app since
their web experience is horrible. Nice!

~~~
shrikant
Be careful what you wish for, you just might get it.

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.

------
savolai
I thought from title it would actually show films.

By far the prettiest app for Helsinki kino/cinema though.

------
egnehots
cross platform = mobile only? What about desktop targets..

~~~
roughike
Like I said before in another comment, there's only so much I can fit in a
Hacker News title. :) I'd like to think that a lot of people use the term "a
cross-platform app" to mean "an app that works on Android and iOS" though. Or
"an app that works on more than one platform using shared code".

That being said, Flutter does have unofficial Linux and MacOS desktop
embedders: [https://github.com/google/flutter-desktop-
embedding](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!

~~~
Gys
Maybe use 'mobile' instead of 'cross platform'. Its shorter and implies
nowadays iOS and Android.

------
kvgr
I have been recently looking into flutter, because I want to start developing
multiplatform apps. What is the coding time compared to android? How does it
behave with networking/camera?

~~~
roughike
For the difference in coding time, it's hard to estimate. I'd say once you get
the hang of it, which for me was quite fast, it's much more pleasant and
generally faster than working with native Android. Hard UI related things on
Android (rounded corners or customizing the design library components) are
pleasant to do and make a lot of sense in Flutter.

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.

------
primitur
Nice! Looks like it could be the base of a new PopcornTime-style app, as well
.. definitely a cool way to learn Flutter - thanks for sharing! :)

------
Sileni
Beautiful work. I was actually looking for a mobile platform to build my
newest project on, looks like I'm learning a bit of Dart. Hope you don't mind
if I dig through your project every time I get stuck, it looks like you're
using a lot of similar functionality :)

~~~
roughike
Thanks, glad you find it useful! And that's exactly the reason I open sourced
it - I thought there was a need for a quite comprehensive but still simple
sample app for people to learn :)

------
unop
Hmm, the HN title is grossly misleading.. I wonder why?

~~~
dang
What is misleading, and what would be a better title?

~~~
aepiepaey
Mainly "cross platform". Many people would interpret that as [desktop]
platforms, e.g. Linux/Windows/Mac OS. Especially if you weren't previously
aware of what Flutter is.

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.

~~~
pvinis
Yes but "app" is usually what you run on your phone, "application" is what you
run on your computer, no?

~~~
aepiepaey
Back before the popularization of smart phones, it was not that uncommon to
use "apps" as an abbreviation for [desktop] applications.

Of course, "apps" is usually used to refer to [mobile] applications today, but
it's still used in the other sense.

