
Announcing Flutter Release Preview 1 - mattsolle
https://medium.com/flutter-io/flutter-release-preview-1-943a9b6ee65a
======
pplante
I've been using Flutter for a few months now, and have not felt this
productive in years. Being able to iterate so quickly on real or virtual
devices has changed how I design and development a UI. I can set out with a
mock-up and almost immediately start to feel why it isn't perfect and just use
it until the feel is right. The productivity bonuses are sometimes hard to
explain to people who haven't yet tried Flutter and it's tooling.

This announcement of preview 1 is coming at a great time as I am launching my
first app on iOS and Android next week.

~~~
frollpin
Dart is by far the most productive cross-platform web technology I've ever
worked with. We got the same (quite complex due to the domain requirements)
core codebase for web client, IOS, Android, and on the server side is well.
Had we chosen to go with the more traditional combination, the effort to keep
everything in sync would rise exponentially with the complexity of the
project.

~~~
Apocryphon
What frameworks are you using for the web client and the server?

~~~
frollpin
Web client: our own mini-framework developed on top of dart:html (we needed
maximum flexibility there, for simpler UI we could have used an existing
framework)

Server: shelf

------
greenhouse_gas
Unfortunately, I kind of feel torn: On one hand, I love flutter as a
concept[1]. It removes a lot of the baroque from mobile development (no need
for the whole RecyclerViewer construction for every list! No Fragments!
Doesn't require Android Studio to start working!) but I hate the language
(dart). After using Kotlin (let alone Rust), It feels like moving back to Java
(no non-nullable types) and in some ways it's actually worse than Java
(threads are extremely heavy weight, every interaction with native code is
async and slow).

I wish there was:

1\. A good Kotlin language server (unlikely, as the company behind the
language is an IDE company).

2\. A good reactive Kotlin GUI library (meaning, with the ergonomics of
Flutter (as in, I don't have to work with Fragments and their lifecycles, just
use views)).

3\. A good JVM interpreter (to speed up Kotlin/Java compilation)

[1]. No I don't use Flutter to "write two apps for the price of one", as most
(of my) apps are just a front-end over a back-end server, so they don't have
any special logic worth saving between iOS and Android. I just find Flutter
easier to work with relative to Android.

~~~
munificent
I'm on the Dart team (though I wouldn't necessarily take my comment to be an
official statement of the entire team).

 _> (no non-nullable types)_

I really wanted [1] to get those into Dart 1 (way back before Swift and
TypeScript even existed), but I couldn't convince language team at the time
that it was worthwhile.

When we moved to a stricter, sound type system with strong mode, we hoped to
get non-nullable types into that and ship them with Dart 2. But, as you can
imagine, migrating millions of lines of code from an optionally typed, unsound
type system to a sound, reified static type system is a hell of a lot of work.
(I'm not aware of any cases where it's been done at this scale.)

We weren't able to fit non-nullable types into that schedule and into our
users' migration pain tolerance. There is only so much you can drag them
through, and just getting to strong mode was a lot.

There is still a desire to bring non-nullable types to Dart. It probably won't
be soon because we want to give our users a break from migration, and give our
implementation teams time to take advantage of the new type system. But I
haven't given up on them, and our team's new focus on static ahead-of-time
compilation makes them more important than ever.

I agree that Kotlin is a really nice language. I hope we can catch up to them
with Dart and exceed them in areas.

[1]: [http://journal.stuffwithstuff.com/2011/10/29/a-proposal-
for-...](http://journal.stuffwithstuff.com/2011/10/29/a-proposal-for-null-
safety-in-dart/)

~~~
greenhouse_gas
The thing is that the longer you wait, the harder it will be to migrate, as
the codebase size grows (and once you leave beta, people assume that the
language is finalized and won't be too happy being forced to refactor their
code when Dart 3 comes out). But as it is, I doubt that the nice parts of
Kotlin will ever make it to Dart.

~~~
k__
Yes, it's really sad that a language as young as Dart already has such
problems :/

~~~
greenhouse_gas
It's because the language was made to compile to JS, and competition to JS, so
appropriate tradeoffs were made.

For example:

1\. JS is single-threaded, with extremely heavy threads only recently made
available. So Dart is single threaded, with extremely heavy threads available.

2\. JS is weak-typed, so Dart was made optional typed. Remember, it was made
before typescript, so they probably didn't expect that such type-heavy
features as ADT would interest people.

Kotlin does the same (for example, internal immutability would be much nicer,
but since the JVM doesn't support that, neither does Kotlin).

------
mythz
This release follows Airbnb posts describing their deep experience in React
Native and why they ended up abandoning it: [https://medium.com/airbnb-
engineering/sunsetting-react-nativ...](https://medium.com/airbnb-
engineering/sunsetting-react-native-1868ba28e30a)

Based on the issues they've had with React Native [1] I believe they would've
had a better experience with Dart and Flutter which also has a fast iterative
dev experience with a productive language that lets you build both iOS and
Android Apps from a single code-base. But in contrast to RN, Dart 2 is
statically typed and AOT compiled into native ARM which enables better
performance and doesn't have any of the JS VM issues Airbnb kept running into.
I also prefer Flutter's x-plat approach of drawing all their widgets with Skia
as it also mitigates the UI widget inconsistencies they would've had if they
tried to wrap native widgets. Flutter widgets follow Material design by
default but can also be themed to look like native iOS widgets
([https://flutter.io/widgets/cupertino/](https://flutter.io/widgets/cupertino/)).

React Native nails the development experience but is plagued with issues which
isn't clear if it's because it's architecturally flawed or that it's just
poorly resourced and Facebook only cares about resolving their own issues.

I've been burnt by the lack of support in React Native indiscriminately
closing issues, which stopped me from wasting my time reporting any more
issues and eventually stopped using React Native altogether.

I've been pleasantly surprised by Flutter, it does what it says on the tin,
enables a productive dev environment for creating Native Apps from a single
code-base and in contrast to my RN experience their support has been stellar,
several team members responded to my queries immediately with solutions and
workarounds.

The biggest issue I've run into coming from JS/RN is not being able to use
reflection due to iOS's AOT restrictions for which you'll need to use code-gen
to workaround. Also I prefer JSX for designing UIs, whilst Dart's object
declarations enable a kind of code DSL it's not as composable as using a
declarative XML markup where you can freely move widgets around to design UIs.
Ultimately I hope they provide a similar language feature for using an XML-
like markup as an alternative for (and just transpiles to) object
declarations.

    
    
      [1] https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology-dafd0b43838#4b2b

~~~
hliyan
> Facebook only cares about resolving their own issues

One could argue that Google suffers from this weakness as well.

~~~
mythz
Hasn't been my experience with Flutter, it looks like a well resourced project
with a very talented team who are committed at building a high-quality and
productive tool for developing Mobile Apps and are actively supporting their
existing user base.

React Native feels like an in-house development project they've open sourced
but don't have the resources to resolve external issues so they've instituted
a policy of routinely indiscriminately closing and signalling their intentions
to never fix them and by extension removing any visibility of which issues
still exist and from anyone else being able to resolve them either. They've
done this for 1000's of issues - not going to invest in a platform plagued
with issues that stands no chance of being resolved.

~~~
nevi-me
I think proactivity and a knowing a good platform to ask questions in, helps.
For some of us, the difficulty is often whether to ask on StackOverflow or to
open a bug on Github.

An overflow of Github issues can lead to some issues going unnoticed
(depending on whether issues are regularly triaged by a team).

For example, I have a Flutter Android app that has an infinite notification
loop bug [1]. I've struggled for many hours (spread over a few weekends)
trying to figure out what was wrong. I eventually opened an issue on GH after
giving up.

After a few days, I decided to post a question on SO, and someone from the
Flutter team saw it. The issue might have gone unnoticed for a bit if I hadn't
done so (especially given its obscurity). I believe so because popular
projects on GH get a lot of issues, and yours might get buried if someone
doesn't pick it up immediately.

The other thing is that when we open issues, and project maintainers try to
work with us, we often delay in responding to them. That over time, leads to
issue clutter, and probably developer fatigue.

So perhaps we can be better citizens by being more proactive, given that
someone who's often paid a lot is taking time to help us with issues.

\---

I agree with your point on RN and in-house development.

[0]
[https://play.google.com/store/apps/details?id=za.co.movingga...](https://play.google.com/store/apps/details?id=za.co.movinggauteng.mytrain)
[1]
[https://github.com/flutter/flutter/issues/18524](https://github.com/flutter/flutter/issues/18524)

~~~
mythz
I'm not referring to technical support questions, I'm referring to actual
issues with verifiable repros which works everywhere else (inc. their
debugger). They dismiss issues with core functionality like their W3C fetch
API not being able to maintain long-running HTTP connections which breaks
solutions relying on them like SSE [1]. They originally closed it making it
known they have no intentions on ever fixing it and have since locked it
preventing anyone else from being able to comment on it either.

RN enables a fast development model but you'll continually skate into an open
mine field of issues where you'll end up wasting time on putting out fires and
diagnosing issues only to discover they're known issues they have no
intentions of fixing so you'll be spending time on implementing workarounds
mitigating broken UX experiences in your App instead of focusing on delivering
end-user value. Given the 1000's of issues that have received similar
treatment I suspect React Native is just an architecturally flawed experiment
and why we'll continue to see more users abandoning it. Hopefully they wont
have wasted as much effort and resources as Airbnb's multi-year investment who
despite having a large enough dev team to maintain their own fork was still
unable to make RN work for them.

[1] [https://github.com/facebook/react-
native/issues/12912](https://github.com/facebook/react-native/issues/12912)

------
kamura
As someone who has spent some time inside the Windows 10 environment working
on UWP applications, I always thought that Xamarin would someday be my goto
whenever I have the opportunity to dive into Mobile development. I am
comfortable with C# and I have always felt happy writing in XAML.

But looking into Flutter, I think it's undeniable how smart this project truly
was. Even if it isn't backed by a popular programming language, since Dart
obviously does not fall on that category.

~~~
mutagen
Have you looked at Uno?

[http://platform.uno/](http://platform.uno/)

C# & XAML UWP layer with Xamarin for mobile. The company behind it has been
using for a few years to produce apps and recently open sourced it. I'm
intrigued and weighing it against Flutter for my next bit of mobile
experimentations.

~~~
krzat
This thing seems to be a layered cake of leaky abstractions. Flutter is
actually the opposite.

------
jjnoakes
I'd love to play with Flutter but issues like this keep me at arm's length.
Hopefully when this kind of thing is finally resolved I'll be able to give it
a closer look.

[https://github.com/flutter/flutter/issues/6827](https://github.com/flutter/flutter/issues/6827)

~~~
InfamousSub
State restoration pretty damn important too. Say for example, the user goes
into multi-window on Android. If they were doing anything important on the
screen, that would just be wiped out.

~~~
jaydubs
While it's common to restart on all sorts of config changes like multiwindow
or layout changes on Android, flutter specifically configures it's android
activity to not restart. So going into multiwindow works just fine, and the
framework handles redrawing and resizing.

------
stealthefocus
I've been using flutter now for a few months and I love the workflow I can get
in, quickly iterating and seeing the changes immediately. A side effect of the
hot reloading I found is that I am able to build quickly and not worry about
the style until later because I know changing the style is relatively easy and
quick to iterate on itself.

If you use VSCode, it really is a first class citizen, which makes me happy as
I am most familiar with that editor.

Overall I haven't been this happy with development in a while.

~~~
Separo
Have you used RN?

------
curiousgal
Anyone else remembers the original Flutter app that lets you control music
with hand gestures? Google bought them and only kept the name apperently.

[https://flutterapp.com](https://flutterapp.com)

------
fal4
Dart's interesting enough if I can actually use it for both Fuchsia and Web
[1], but I find the following statement misleading: "Dart’s type system, like
the type systems in Java and C#, is sound [2]." Java's type system is not
sound [3], nor is C Octothorp's [4]. What gives?

[1] Though what happened with Chrome is a shame:
[https://news.dartlang.org/2015/03/dart-for-entire-
web.html](https://news.dartlang.org/2015/03/dart-for-entire-web.html)

[2] [https://www.dartlang.org/guides/language/sound-dart#what-
is-...](https://www.dartlang.org/guides/language/sound-dart#what-is-soundness)

[3] [https://dev.to/rosstate/java-is-unsound-the-industry-
perspec...](https://dev.to/rosstate/java-is-unsound-the-industry-perspective)

[4]
[https://stackoverflow.com/a/23968075/775282](https://stackoverflow.com/a/23968075/775282)

------
Keyframe
It might sound stupid, but I'd really like to see flutter for desktop as well.
Web too, hell why not?

~~~
bsimpson
You may appreciate [https://github.com/google/flutter-desktop-
embedding](https://github.com/google/flutter-desktop-embedding)

~~~
MarkMc
Or this: [https://github.com/google/flutter-desktop-
embedding](https://github.com/google/flutter-desktop-embedding)

I'm also working on a similar project.

~~~
surajrmal
Not sure if you meant to, but you posted the same link.

~~~
MarkMc
Whoops sorry - I mistook the link for this one:
[https://github.com/flutter/engine/wiki/Custom-Flutter-
Engine...](https://github.com/flutter/engine/wiki/Custom-Flutter-Engine-
Embedders)

------
pjmlp
If they at least replaced _@Override_ with _override_ keyword, it is not like
Dart had to deal with backwards compatibility of 5 language versions.

------
Reedx
Has anyone used both Flutter and NativeScript/React Native?

I'd be really curious to hear some experiences and why you prefer one over the
other.

------
zerr
I wonder what happened to Rikulo UI cross-platform framework for Dart:
[http://rikulo.org](http://rikulo.org)

------
sbilstein
I love Dart and used flutter for a few months but once I hit the lack of
native support for maps, I had to switch to native iOS development. It was a
great learning experience for prototyping quickly but hitting a wall with maps
was not OK for any high fidelity app.

With Airbnb’s announcement around React Native, I feel like native dev is
still the way to go.

------
nhangen
So this is different from the Flutter product I backed on Kickstarter?
Confusing...

[https://www.kickstarter.com/projects/flutterwireless/flutter...](https://www.kickstarter.com/projects/flutterwireless/flutter-20-wireless-
arduino-with-half-mile-1km-ran)

------
disease
Is there anything that Dart does particularly well in a project like this that
justifies its use over TypeScript?

~~~
felideon
Check out this blog post from earlier this year: [https://hackernoon.com/why-
flutter-uses-dart-dd635a054ebf](https://hackernoon.com/why-flutter-uses-dart-
dd635a054ebf)

------
atomicnumber1
Is it safe to say, they are probably ramping up the fuchsia development too?

------
pjmlp
Just noticed that [https://flutterstudio.app/](https://flutterstudio.app/)
only works properly on Chrome, what a surprise.

~~~
mraleph
Works just fine in Safari and Firefox Nightly for me. Consider reporting your
browser configuration to the author? [1]

[also notice that it is in no way affiliated with Flutter and done by somebody
in the community]

[1] I can't find any way to contact the author, but here is his blog post
about the Studio [https://medium.com/@pmutisya/flutter-studio-
version-2-41cce1...](https://medium.com/@pmutisya/flutter-studio-
version-2-41cce10fcf3d)

~~~
pjmlp
I tried, but won't bother with Medium subscription just to post a comment
there.

Doesn't work on Edge or FF stable.

