{"id":330,"date":"2019-04-15T17:49:13","date_gmt":"2019-04-15T17:49:13","guid":{"rendered":"https:\/\/www.londonbuspal.co.uk\/blog\/?p=330"},"modified":"2019-04-15T17:49:15","modified_gmt":"2019-04-15T17:49:15","slug":"flutter-the-honeymoon-is-over","status":"publish","type":"post","link":"https:\/\/www.londonbuspal.co.uk\/blog\/flutter-the-honeymoon-is-over\/","title":{"rendered":"Flutter &#8211; the honeymoon is over"},"content":{"rendered":"\n<p>In January, I created a <a href=\"https:\/\/www.londonbuspal.co.uk\/blog\/why-flutter-is-better-than-android-native\">post<\/a> where I sang Flutter&#8217;s praises over Android native.  Three months later, does this still hold true?<\/p>\n\n\n\n<p>First, let me give you a brief background.  I launched my app back in 2013 on Android and the app has naturally grown from there.  Late in 2018, I decided to do a full rewrite of the app in Flutter (with two things in mind: make the app more future-proof and ability to expand to iOS).  I soft-launched on iOS in mid-December and went onto Android at the end of December.  Despite a few hiccups (such as forgotten or missed features!), it generally went okay.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"728\" height=\"90\" src=\"https:\/\/www.londonbuspal.co.uk\/blog\/wp-content\/uploads\/2019\/04\/WhatsApp-Image-2019-04-15-at-15.27.48.jpeg\" alt=\"\" class=\"wp-image-333\" srcset=\"https:\/\/www.londonbuspal.co.uk\/blog\/wp-content\/uploads\/2019\/04\/WhatsApp-Image-2019-04-15-at-15.27.48.jpeg 728w, https:\/\/www.londonbuspal.co.uk\/blog\/wp-content\/uploads\/2019\/04\/WhatsApp-Image-2019-04-15-at-15.27.48-300x37.jpeg 300w\" sizes=\"auto, (max-width: 728px) 100vw, 728px\" \/><\/figure>\n\n\n\n<p>As of today, only about 6% of my Android user base is still on the old Android native app.  I have around 2700 active users a day, so not massive, but it is a well-used app.  Almost 4 months of constant hammering by users should give me a good flavour of what it is like to run a Flutter app in production.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What is still good?<\/h4>\n\n\n\n<p><strong>Apple (almost for free)<\/strong>: Being able to launch my app on Apple is definitely worthwhile.  Revenue and use isn&#8217;t exactly where I want it to be, but I&#8217;m on the platform, so that is 100% further ahead than I was before Flutter.  Apart from the nuances in terms of the iOS UX, I haven&#8217;t experienced any difference between the two platforms.  It is great to do all of my development on Android and it just works on Apple.<\/p>\n\n\n\n<p><strong>Rapid developement<\/strong>: I have managed to add several new features to my app (including some fairly complex new features) which I would never have been able to achieve so quickly in Android native.  And I also got this on Apple, almost for free.  It may also be a sign of how well I architected my app, but this is also because Flutter and Dart allows this.<\/p>\n\n\n\n<p><strong>Community<\/strong>: The Flutter community is big and growing exponentially.  Help is always at hand and I see new tutorials and walkthroughs coming out daily.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What&#8217;s not so good?<\/h4>\n\n\n\n<p><strong>Dependency hell<\/strong>: I have found myself stuck in some dependency hell.  I have one library which hasn&#8217;t updated and it causes a bad domino effect.  I thought it was easier to manage in Dart, but appears not so.  It took a fair amount of effort to unpick bit by bit and find the offending library.<\/p>\n\n\n\n<p><strong>Incomplete Google features<\/strong>: Further to the dependency hell I mention above, Google&#8217;s own features are still incomplete.  Their maps are not usable yet, so I&#8217;ve had to use another package called &#8220;flutter_maps&#8221;, which is currently causing my dependency hell.<\/p>\n\n\n\n<p><strong>More incomplete Google features<\/strong>: AdMob is not really incomplete, rather just incompatible with the way that Flutter is meant to work.  The library hasn&#8217;t been updated since February and I have to use awkward workarounds.  I&#8217;ve had a really good explanation by Andrew Brogdon after I raised the issue on a Flutter Youtube video, but it is still frustrating that we are where we are with this.  Nowhere.<\/p>\n\n\n\n<p><strong>Null handling<\/strong>:  I&#8217;m not sure if it recently changed or if I just didn&#8217;t notice before, but I preferred the way that Dart handled nulls in that it won&#8217;t fatally blow up and just carry on.  I had some really bad issues recently where it would just stop running parts of my code when I accidently tried doing something with a null.  No errors, no nothing.  It would literally just skip the rest of the function without throwing anything.  It took hours to unpick and I would honestly have preferred the app to just crash instead.<\/p>\n\n\n\n<p><strong>Instability<\/strong>: I started using the stable channel of Flutter, so that I could keep up to the latest versions of Flutter, but without too much risk of things going wrong.  Unfortunately, a fairly bad <a href=\"https:\/\/github.com\/flutter\/flutter\/issues\/29007\">regression issue<\/a> has appeared and it is causing some frustration (mostly just that Samsung decided to suspend my app).<\/p>\n\n\n\n<p><strong>Other weird bugs<\/strong>: <a href=\"https:\/\/github.com\/flutter\/flutter\/issues\/20517\">This issue<\/a> has appeared most than 4000 times in my app for more than 350 users.  It has proven impossible for me to reproduce, but I can see it happening.  I&#8217;ve had a number of other weird issues also occur.  A more stable framework would not have these sorts of issues.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Do I still prefer Flutter?<\/h4>\n\n\n\n<p>Absolutely, I still prefer Flutter.  I know that on balance, it appears from the above lists that I have more complaints about Flutter than praise, but this is not accurate.  I simply recognise the current flaws with Flutter, but I still believe that the future is bright.  Using Flutter, I believe that I can keep on expanding my app and giving my users all of the great experiences they are after.<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In January, I created a post where I sang Flutter&#8217;s praises over Android native. Three months later, does this still [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[33,4],"tags":[6,26],"class_list":["post-330","post","type-post","status-publish","format-standard","hentry","category-development","category-london-bus-pal","tag-android-development","tag-flutter"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/posts\/330","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=330"}],"version-history":[{"count":3,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/posts\/330\/revisions"}],"predecessor-version":[{"id":352,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/posts\/330\/revisions\/352"}],"wp:attachment":[{"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.londonbuspal.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}