{"id":303,"date":"2020-01-13T14:00:00","date_gmt":"2020-01-13T13:00:00","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/flutter-for-android-developers\/"},"modified":"2020-02-14T10:35:04","modified_gmt":"2020-02-14T09:35:04","slug":"flutter-for-android-developers","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/","title":{"rendered":"Flutter for Android Developers explained by Faisal Abid"},"content":{"rendered":"\n<p><b><span class=\"firstcharacter\">F<\/span>lutter<\/b> is one of the most interesting technologies among the new trends in <b><span id=\"urn:enhancement-24d0d88d\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">mobile software<\/span> development<\/b>. Thus, it is no surprise that Codemotion Milan 2018 included a talk about Flutter in its agenda. Such talk was delivered by <b>Faisal Abid<\/b>, <span id=\"urn:enhancement-30fe616c\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google_developer_expert\">Google Developer Expert<\/span> and CTO at Zoom.ai. Faisal divided his speech into two parts; he started by introducing Flutter, and then discussed how <span id=\"urn:enhancement-96aa2113\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> developers can benefit from using it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><b>Introducing Flutter<\/b><\/h2>\n\n\n\n<p>Flutter is a framework developed by <span id=\"urn:enhancement-5ce2f3d0\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google\">Google<\/span>, aimed at building <b>native<\/b> <span id=\"urn:enhancement-d1aa4cb4\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_application_development\">mobile applications<\/span> for both <span id=\"urn:enhancement-8d462096\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> and iOS platforms. Using this technology, developers can easily and quickly build applications that \u201cfeel natural\u201d. Many of us have experienced weird behaviours from <span id=\"urn:enhancement-af293dc8\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_application_development\">mobile applications<\/span>, in terms of animations or features that do not appear <b>consistent with the surrounding mobile OS ecosystem<\/b>. According to Faisal, Flutter solved this issue by including <b>material design<\/b> in the <span id=\"urn:local-annotation-825935\" class=\"textannotation disambiguated\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/flutter\">Flutter<\/span> widgets, producing applications with high quality and modern designs.<\/p>\n\n\n\n<p>One of the most common mistakes about Flutter is the belief that it uses <span id=\"urn:enhancement-e1f31432\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/html5\">HTML5<\/span> and WebViews in order to implement both <span id=\"urn:enhancement-e8499f94\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> and iOS applications, similar to what other cross-platform development frameworks (e.g. <span id=\"urn:enhancement-5ec8a5d3\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/phonegap\">PhoneGap<\/span>) did in the past. Actually, this is not the case. In fact, Flutter allows the developer to create <b>fully native<\/b> <span id=\"urn:enhancement-d5bcf508\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">mobile apps<\/span>, using the <b><span id=\"urn:enhancement-cf940834\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/dart_programming_language\">Dart programming language<\/span><\/b>.<\/p>\n\n\n\n<p>As mentioned by Faisal, when <span id=\"urn:enhancement-febde6e1\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google\">Google<\/span> decided to <span id=\"urn:enhancement-983a1b5b\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_application_development\">develop<\/span> Flutter, they had to decide which language to use. Among the many choices available, including <span id=\"urn:enhancement-c61ef898\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">Javascript<\/span>, <span id=\"urn:enhancement-cfd662a0\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/python_programming_language\">Python<\/span>, <span id=\"urn:enhancement-df1606fd\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/scala_programming_language\">Scala<\/span>, and many others, <span id=\"urn:enhancement-59315ed1\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google\">Google<\/span> opted for Dart. One might consider this choice as driven by ownership (Dart has been developed by Google too). However, the main reason why <span id=\"urn:enhancement-f95c70c9\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/google\">Google<\/span> choose Dart is in its <b><span id=\"urn:enhancement-2a7099c2\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/learning_curve\">learning curve<\/span><\/b>, which resulted in it being the best one among the languages evaluated. Indeed, Dart allows us to <span id=\"urn:enhancement-905bc508\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_application_development\">develop<\/span> applications very easily; while it was born as a sort of \u201cevolution of <span id=\"urn:enhancement-bfab3d52\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/javascript\">Javascript<\/span>\u201d, this <span id=\"urn:enhancement-4997d6e5\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming language<\/span> has mostly simple features, usually included in other <span id=\"urn:enhancement-1767db16\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming languages<\/span>, and thus known by many developers.<\/p>\n\n\n\n<p>By using <span id=\"urn:enhancement-4f789f77\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/dart_programming_language\">Dart<\/span> and Flutter, developers can decide how to deploy their applications; they can opt for <b><span id=\"urn:enhancement-a7c6d9b1\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/java_programming_language\">Java<\/span><\/b> or <b><span id=\"urn:enhancement-7b7cd65f\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/kotlin_programming_language\">Kotlin<\/span><\/b> for <span id=\"urn:enhancement-3f4a5c2\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span>, or for <b><span id=\"urn:enhancement-1d1ed47f\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/swift_programming_language\">Swift<\/span><\/b> or <b><span id=\"urn:enhancement-17cb6230\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/objective-c\">Objective-C<\/span><\/b> for iOS. It is worth highlighting that choosing one of these languages does not require any kind of knowledge from the developer\u2019s point of view. <span id=\"urn:enhancement-7d45e3c1\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/dart_programming_language\">Dart<\/span> remains the only <span id=\"urn:enhancement-6d11f8b3\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/programming_languages\">programming language<\/span> processed by Flutter, while the aforementioned native mobile languages are just useful for understanding what the output will be.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/01.png\" alt=\"\" class=\"wp-image-2474\"\/><\/figure><\/div>\n\n\n\n<p><i>Figure 1. Creation of a new Flutter project with IntelliJ, allowing selection of native languages.<\/i><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><b>Flutter for Android developers<\/b><\/h2>\n\n\n\n<p>In the second part of his speech, Faisal described some <b>common patterns<\/b> that are useful for <span id=\"urn:enhancement-7f9f7a39\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> developers who want to move to Flutter. In particular, he identified three interesting patterns: implementing <b>AsyncTasks<\/b>, managing navigation via <b>Intents<\/b> and understanding how the <b>Activity\u2019s life cycle<\/b> is affected by Flutter.<\/p>\n\n\n\n<p>For implementing asynchronous tasks in the background, it is crucial to understand that Flutter has a <b>single-threaded execution model<\/b>, supporting the so-called <i>Isolates<\/i> (a way to run <span id=\"urn:enhancement-17916288\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/dart_programming_language\">Dart<\/span> code on another thread). Instead of implementing the onPreExecute(), doInBackground() and onPostExecute() methods of the AsyncTask <span id=\"urn:enhancement-ca19e0e5\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/class_computer_programming\">class<\/span>, Flutter solves the problem by declaring a function as <b>async<\/b>, and using the <b>await<\/b> keyword for long run tasks. <span id=\"urn:enhancement-d954431f\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/dart_programming_language\">Dart<\/span> will \u201cfigure out\u201d how to pass this task to a background thread, avoiding freezing the UI.<\/p>\n\n\n\n<pre>\n<code>\nloadData() async {\n    String dataURL = \"https:\/\/mysite.com\/data.json\";\n    http.Response response = await http.get(dataURL);\n    setState(() {\n        widgets = json.decode(response.body);\n    });\n}\n<\/code>\n<\/pre>\n\n\n\n<p>In order to navigate among Activities, <span id=\"urn:enhancement-d28f4e3\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> uses Intents. However, there is nothing like Intents in Flutter. Instead, you need to use <b>Navigator<\/b> and <b>Routes<\/b>. A Route is an abstraction for a \u201cscreen\u201d or \u201cpage\u201d of an <span id=\"urn:enhancement-8babea46\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/mobile_app\">app<\/span> (i.e. an Activity on <span id=\"urn:enhancement-78c9674f\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span>); a Navigator is a widget that manages routes. Navigators work like a stack on which you can push() new routes you want to navigate to, and from which you can pop() routes when you want to \u201cgo back\u201d. The following snippet shows how to navigate to a route by pushing its name (\u201c\\b\u201d) to the Navigator:<\/p>\n\n\n\n<pre><code>Navigator.of(context).pushNamed('\/b');<\/code><\/pre>\n\n\n\n<p>Finally, the third common pattern described by Faisal is about understanding the Activity\u2019s life cycle. In Flutter, all the Activities are <b>widgets<\/b>. Similar (but not equal) to what happens with <span id=\"urn:enhancement-7452af9b\" class=\"textannotation disambiguated wl-creative-work\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/android_operating_system\">Android<\/span> Activities, you can observe for the following lifecycle events:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>inactive \u2014 The application is in an inactive state and is not receiving user input. This event only works on iOS, as there is no equivalent event to map to on Android<\/li><li>paused \u2014 The application is not currently visible to the user, not responding to user input, and running in the background. This is equivalent to onPause() in Android<\/li><li>resumed \u2014 The application is visible and responding to user input. This is equivalent to onPostResume() in Android<\/li><li>suspending \u2014 The application is suspended momentarily. This is equivalent to onStop() in Android; it is not triggered on iOS as there is no equivalent event to map on iOS<\/li><\/ul>\n\n\n\n<p>Faisal concluded his talk by mentioning that the <a href=\"https:\/\/flutter.io\/docs\/get-started\/flutter-for\/android-devs\">official Flutter documentation offers many additional information for Android developers<\/a> who want to port their <span id=\"urn:enhancement-a97505cf\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/application_software\">applications<\/span> to Flutter. Moreover, information for other <span id=\"urn:enhancement-7a4fc72d\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/software_developer\">developers<\/span> (iOS, <span id=\"urn:enhancement-479ab454\" class=\"textannotation disambiguated wl-other\" itemid=\"http:\/\/data.wordlift.io\/wl01770\/entity\/react_native\">React native<\/span>, web devs, Xamarin.Forms) is also available.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.<\/p>\n","protected":false},"author":3,"featured_media":304,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":3,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[33],"tags":[59,22],"collections":[],"class_list":{"0":"post-303","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-mobile-dev","8":"tag-android","9":"tag-codemotion-milan","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Flutter for Android Developers - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flutter for Android Developers explained by Faisal Abid\" \/>\n<meta property=\"og:description\" content=\"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-13T13:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-02-14T09:35:04+00:00\" \/>\n<meta name=\"author\" content=\"Vito Gentile\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@ViGentile\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vito Gentile\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\"},\"author\":{\"name\":\"Vito Gentile\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313\"},\"headline\":\"Flutter for Android Developers explained by Faisal Abid\",\"datePublished\":\"2020-01-13T13:00:00+00:00\",\"dateModified\":\"2020-02-14T09:35:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\"},\"wordCount\":851,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg\",\"keywords\":[\"Android\",\"Codemotion Milan\"],\"articleSection\":[\"Mobile Developer\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\",\"name\":\"Flutter for Android Developers - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg\",\"datePublished\":\"2020-01-13T13:00:00+00:00\",\"dateModified\":\"2020-02-14T09:35:04+00:00\",\"description\":\"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg\",\"width\":960,\"height\":639},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mobile Developer\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Flutter for Android Developers explained by Faisal Abid\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313\",\"name\":\"Vito Gentile\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g\",\"caption\":\"Vito Gentile\"},\"description\":\"I\u2019m a data scientist, tech writer, software developer with experience in mobile, web (full-stack) and Python programming, and former researcher with interests in human-computer interaction. I thus have a multi-faceted experience in the area of software development, and that\u2019s why I love my job(s)!\",\"sameAs\":[\"https:\/\/vitogentile.it\",\"https:\/\/www.linkedin.com\/in\/vitogentile\/en\",\"https:\/\/x.com\/ViGentile\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Flutter for Android Developers - Codemotion Magazine","description":"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/","og_locale":"en_US","og_type":"article","og_title":"Flutter for Android Developers explained by Faisal Abid","og_description":"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2020-01-13T13:00:00+00:00","article_modified_time":"2020-02-14T09:35:04+00:00","author":"Vito Gentile","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg","twitter_creator":"@ViGentile","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Vito Gentile","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/"},"author":{"name":"Vito Gentile","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313"},"headline":"Flutter for Android Developers explained by Faisal Abid","datePublished":"2020-01-13T13:00:00+00:00","dateModified":"2020-02-14T09:35:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/"},"wordCount":851,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg","keywords":["Android","Codemotion Milan"],"articleSection":["Mobile Developer"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/","name":"Flutter for Android Developers - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg","datePublished":"2020-01-13T13:00:00+00:00","dateModified":"2020-02-14T09:35:04+00:00","description":"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg","width":960,"height":639},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/flutter-for-android-developers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/"},{"@type":"ListItem","position":3,"name":"Mobile Developer","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/mobile-dev\/"},{"@type":"ListItem","position":4,"name":"Flutter for Android Developers explained by Faisal Abid"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/f9c99d8dfb99900d709bb8199225d313","name":"Vito Gentile","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ebcb5b885a4f1669578d08a55deb81064893c07c1b35b7b36eb059cce730ae90?s=96&d=mm&r=g","caption":"Vito Gentile"},"description":"I\u2019m a data scientist, tech writer, software developer with experience in mobile, web (full-stack) and Python programming, and former researcher with interests in human-computer interaction. I thus have a multi-faceted experience in the area of software development, and that\u2019s why I love my job(s)!","sameAs":["https:\/\/vitogentile.it","https:\/\/www.linkedin.com\/in\/vitogentile\/en","https:\/\/x.com\/ViGentile"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-600x600.jpg","author_info":{"display_name":"Vito Gentile","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg",960,639,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-300x200.jpg",300,200,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-768x511.jpg",768,511,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg",960,639,false],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg",960,639,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg",960,639,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid.jpg",100,67,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/01\/faisal-abid-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Vito Gentile","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/vito-gentile\/"},"uagb_comment_info":0,"uagb_excerpt":"At Codemotion Milan 2018, Faisal Abid discussed how Android Developers can benefit from Flutter for cross-platform mobile app development.","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=303"}],"version-history":[{"count":5,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/303\/revisions"}],"predecessor-version":[{"id":2625,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/303\/revisions\/2625"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/304"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=303"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}