{"id":55,"date":"2021-10-22T01:49:10","date_gmt":"2021-10-22T01:49:10","guid":{"rendered":"https:\/\/blogs.oregonstate.edu\/davidkaff\/?p=55"},"modified":"2021-10-22T01:50:28","modified_gmt":"2021-10-22T01:50:28","slug":"choosing-flutter-as-our-mobile-framework","status":"publish","type":"post","link":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/","title":{"rendered":"Choosing Flutter as our Mobile Framework"},"content":{"rendered":"\n<p>My capstone project is &#8220;Development of an Evacuation Drill App&#8221;, and a technology we need is a mobile framework. Our choice of framework was mostly made for us, as two of our three members learned Flutter in CS 492 over the summer.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Flutter is a mobile framework developed by Google using the Dart language (which was developed previously by Google, initially to compile to JavaScript). It is an alternative to React Native, which is a mobile framework developed by Facebook using the JavaScript language.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Flutter attempts to deliver on the promise of &#8220;code once, deploy everywhere&#8221;. From a single code base Flutter can compile apps for both iOS and Android, along with Windows, macOS, and the web.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>However, like many of its predecesors it only accomplishes this to a high degree \u2013 not completely. For some specific features native code must be implemented after compilation. But for the general architecture of a mobile (and now desktop or web) application, Flutter can be the primary framework.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Why we chose Flutter over alternatives<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Flutter was a clear choice for our project based on group familiarity.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>It was a much better choice than developing our application twice, once for iOS and again for Android, and better fulfilled the project requirements by not choosing to develop for only one ecosystem.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>An additional reason it is a good choice for our project is that none of our group members have extensive front-end web development experience. On teams that do have such experience, React Native can be a stronger choice because it uses the JavaScript language and follows many of the design patterns used by front-end web devs.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Flutter also makes claims to being faster on both mobile operating systems. These claims are mostly true, but the end-user experience does not seem to be reasonably diminished when using React Native, so in my opinion it is not a strong reason to choose Flutter over React Native. I agree more with the sentiment that if performance is primary concern for a project, true native code should be the focus of development.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>A peripheral concern which Flutter resolves is a stretch goal for our project \u2013 to develop a desktop application to aggregate data from multiple instances of our mobile application. Flutter is now equiped to compile to desktop applications for both Windows and macOS. While it would not be a great choice if this was the main focus of a project, being able to reuse our code-base with minor tweaks to create a new desktop application brings this stretch goal closer to realization.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">How we will use Flutter in our project<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Flutter will be the framework we implement to develop our mobile application for both iOS and Android. We will use a basic flutter project as our starting point for development by running <code>flutter create<\/code>.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>We will leverage many of the open source packages available for Flutter and it&#8217;s underlying language Dart by using the <code>pub<\/code> command.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Finally, when it comes time to test or publish our application we will compile it for iOS and Android using flutter.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator is-style-dots\" \/>\n","protected":false},"excerpt":{"rendered":"<p>My capstone project is &#8220;Development of an Evacuation Drill App&#8221;, and a technology we need is a mobile framework. Our choice of framework was mostly made for us, as two of our three members learned Flutter in CS 492 over the summer. Flutter is a mobile framework developed by Google using the Dart language (which&hellip; <a class=\"more-link\" href=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/\">Continue reading <span class=\"screen-reader-text\">Choosing Flutter as our Mobile Framework<\/span><\/a><\/p>\n","protected":false},"author":11555,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[5],"class_list":["post-55","post","type-post","status-publish","format-standard","hentry","category-oregon-state-capstone-blog","tag-evacuation-drill-app","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Choosing Flutter as our Mobile Framework - David Kaff<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Choosing Flutter as our Mobile Framework - David Kaff\" \/>\n<meta property=\"og:description\" content=\"My capstone project is &#8220;Development of an Evacuation Drill App&#8221;, and a technology we need is a mobile framework. Our choice of framework was mostly made for us, as two of our three members learned Flutter in CS 492 over the summer. Flutter is a mobile framework developed by Google using the Dart language (which&hellip; Continue reading Choosing Flutter as our Mobile Framework\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"David Kaff\" \/>\n<meta property=\"article:published_time\" content=\"2021-10-22T01:49:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-10-22T01:50:28+00:00\" \/>\n<meta name=\"author\" content=\"David Kaff\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Kaff\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/\"},\"author\":{\"name\":\"David Kaff\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/#\\\/schema\\\/person\\\/0d93f65fc3b5939cc721d30965e4f353\"},\"headline\":\"Choosing Flutter as our Mobile Framework\",\"datePublished\":\"2021-10-22T01:49:10+00:00\",\"dateModified\":\"2021-10-22T01:50:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/\"},\"wordCount\":512,\"commentCount\":0,\"keywords\":[\"Evacuation-Drill-App\"],\"articleSection\":[\"Oregon State Capstone Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/\",\"url\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/\",\"name\":\"Choosing Flutter as our Mobile Framework - David Kaff\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/#website\"},\"datePublished\":\"2021-10-22T01:49:10+00:00\",\"dateModified\":\"2021-10-22T01:50:28+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/#\\\/schema\\\/person\\\/0d93f65fc3b5939cc721d30965e4f353\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/2021\\\/10\\\/22\\\/choosing-flutter-as-our-mobile-framework\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Choosing Flutter as our Mobile Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/#website\",\"url\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/\",\"name\":\"David Kaff\",\"description\":\"fledgling software engineer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/#\\\/schema\\\/person\\\/0d93f65fc3b5939cc721d30965e4f353\",\"name\":\"David Kaff\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g\",\"caption\":\"David Kaff\"},\"url\":\"https:\\\/\\\/blogs.oregonstate.edu\\\/davidkaff\\\/author\\\/kaffs\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Choosing Flutter as our Mobile Framework - David Kaff","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:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/","og_locale":"en_US","og_type":"article","og_title":"Choosing Flutter as our Mobile Framework - David Kaff","og_description":"My capstone project is &#8220;Development of an Evacuation Drill App&#8221;, and a technology we need is a mobile framework. Our choice of framework was mostly made for us, as two of our three members learned Flutter in CS 492 over the summer. Flutter is a mobile framework developed by Google using the Dart language (which&hellip; Continue reading Choosing Flutter as our Mobile Framework","og_url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/","og_site_name":"David Kaff","article_published_time":"2021-10-22T01:49:10+00:00","article_modified_time":"2021-10-22T01:50:28+00:00","author":"David Kaff","twitter_card":"summary_large_image","twitter_misc":{"Written by":"David Kaff","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/#article","isPartOf":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/"},"author":{"name":"David Kaff","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353"},"headline":"Choosing Flutter as our Mobile Framework","datePublished":"2021-10-22T01:49:10+00:00","dateModified":"2021-10-22T01:50:28+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/"},"wordCount":512,"commentCount":0,"keywords":["Evacuation-Drill-App"],"articleSection":["Oregon State Capstone Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/","url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/","name":"Choosing Flutter as our Mobile Framework - David Kaff","isPartOf":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website"},"datePublished":"2021-10-22T01:49:10+00:00","dateModified":"2021-10-22T01:50:28+00:00","author":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353"},"breadcrumb":{"@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/2021\/10\/22\/choosing-flutter-as-our-mobile-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.oregonstate.edu\/davidkaff\/"},{"@type":"ListItem","position":2,"name":"Choosing Flutter as our Mobile Framework"}]},{"@type":"WebSite","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#website","url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/","name":"David Kaff","description":"fledgling software engineer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.oregonstate.edu\/davidkaff\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.oregonstate.edu\/davidkaff\/#\/schema\/person\/0d93f65fc3b5939cc721d30965e4f353","name":"David Kaff","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/feece6673b6f1dbb8044d124b27ad93d9c837024b690380c1f3a9cb710d0a470?s=96&d=mm&r=g","caption":"David Kaff"},"url":"https:\/\/blogs.oregonstate.edu\/davidkaff\/author\/kaffs\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/55","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/users\/11555"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/comments?post=55"}],"version-history":[{"count":1,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/55\/revisions"}],"predecessor-version":[{"id":56,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/posts\/55\/revisions\/56"}],"wp:attachment":[{"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/media?parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/categories?post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/davidkaff\/wp-json\/wp\/v2\/tags?post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}