Flutter Project Navigation
What is Google Flutter?
Flutter is a Software Development Kit developed by Google that includes a number of different tools that allow you to build applications for both Android and iOS mobile devices, as well as websites and potentially desktop operating systems as well.
Flutter apps are built in a language called Dart (also developed by Google), and you create both the user interface (i.e. the things your app users will see on their screens) and the functionality (how the application works) within the same code documents and structures.
Flutter was designed to allow you to build an app that can work on multiple kinds of devices and platforms with one code base. In the past, to create apps that work on these different kinds of devices, you would have had to essentially write multiple versions of the same application in different languages - like Java, Swift, and Objective-C. For an individual, this meant learning multiple coding languages and other tools and doubling or even tripling the effort. For a company, this often meant hiring multiple developers to meet these needs, dramatically increasing the expense of building and managing their apps. Flutter is designed to make building and maintaining a piece of software for users on different kinds of devices a lot easier!
To make this possible, Flutter doesn't use of the existing (or 'native') functionality that is built into each device; instead, it 'paints' the visual parts of your application onto the screen. This makes the app look and function much more consistently across different kinds of devices.
The Flutter SDK package also includes the tools you need to compile your code for these multiple devices. Compiling your code basically means that it converts the code you wrote (and which usually makes sense to you as the creator) and translates it into machine code, which is what your device understands.
I'm not familiar with coding. What is the Dart language like?
Dart is a language that Google started creating in 2011, and released in 2013. The main language itself is meant to build user interfaces within the code so that you have the visual aspects and the functionality in one set of code. In other languages, like JavaScript, you'd usually use another language to create the parts of the app that the user sees. Here's what a part of my code looks like for my first app assignment:
@overrideWidgetbuild(BuildContext context) {returnMaterialApp(home: Scaffold(appBar: AppBar(title: const Text('Elizabeth Warren Quotapalooza!', style: TextStyle(color: Colors.white, fontSize: 22,),),backgroundColor: Colors.teal,),body: ListView(children: [Padding(padding: const EdgeInsets.all(8.0),child: Image.asset('assets/images/elizabeth_warren.jpg'),),Padding(padding: const EdgeInsets.all(8.0),child: Quote(warrenQuote),),Padding(padding: const EdgeInsets.all(8.0),child: UpdateQuote(quoteButton),),],),),);}
I'll explain what's going on here:
- This whole chunk of the code builds the main page of the app. There are other components that go above this, but this is a good place to start understanding how the language works.
- The second line (starting with Widget build...) is called the 'build function' because it tells Dart what to draw onto the screen of the mobile device where the app is being opened.
- The 'build function' builds one large widget that is called 'MaterialApp'
- Inside the 'MaterialApp' widget are our instructions for what that app should look like. The first thing it contains is a 'Scaffold' widget which literally builds a scaffold for the app on the screen.
- Inside our Scaffold widget, we have an 'AppBar' widget, which makes the title bar at the top of the app appear. Mine reads "Elizabeth Warren Quotapalooza" in white text on a teal background.
- Below the AppBar widget, also inside the Scaffold widget, is the body of our app. The body contains the 'ListView' widget, which is a widget that allows you to stack a bunch of other widgets and will let the app user keep scrolling down to see all of them if they go on longer than the size of the screen. (I found this widget when I build this with a standard Column widget and then found out from a friend that their large text setting eventually made the button disappear and they couldn't scroll down to it!)
- Inside the list view, we have three main things: a photo, a text box (called Quote), and a button (called UpdateQuote). Each of these are nestled inside a 'Padding' widget that puts room in between them to make the app look nicer.
- The 'Image' widget displays the photo.
- The 'Quote' widget is a widget that I built myself for this app, and the code for that one is in a separate file. The other widgets before this point are standard in Dart and Flutter, but I built this one specifically because I needed to be able to change the text and have it update on the screen.
- The 'UpdateQuote' widget is also one that I built in a separate, and it makes the app display a button. When the button is clicked, the text in the Quote widget changes, and the app updates to show a new quote.
- When I 'call" the Quote or UpdateQuote widgets here, the main file takes the instructions from the other files and draws the text box and the button based on those instructions.
Could someone just starting out with coding and software development use this kit? If not, would there be similar alternatives that may be more beginner friendly?
I think with the right materials, this would be a fairly reasonable place to start with coding. The difficulty would be finding materials appropriate for a beginner.
In general, the first people to learn how to code in a new language are people who already do a lot of software development, or who have experience working with other languages. When they start creating tutorials, often these materials skip over a lot of the foundational knowledge you need to really make sense of all of the terminologies and concepts that are similar between all coding languages.
The tutorials I'm watching right now tend to gloss over some of the programming concepts you need to build more advanced programs, so they might not offer enough support for a true beginner. Give it a year or so, and I'm sure there will be kids books on coding in Flutter. Kids books are, without question, the best way to learn how to code, especially if you're a beginner. They break things down much better, the projects are way more interesting, and they don't assume you have a bunch of prior knowledge. Books geared toward adults tend to assume that adult learners don't actually need to enjoy learning, so they're generally very dull, the projects are more functional than fun, and they tend to over-explain the things that are much easier to learn through trial-and-error if you offer the right kind of beginner projects.
If a beginner who had never coded before wanted to learn Flutter, I would encourage them to try out Scratch first, which is a block coding language where you can learn how to do things like write functions and use variables. These concepts would be very helpful with more advanced Flutter programming, but I haven't seen anyone explain it well in the learning modules and books.
You can also look at my posts with resources and tips for new coders:
About how much time could one expect to dedicate to the task in order to build a software application?
This depends on a lot of different factors:
- How complex is the app? Some of the first apps you build tend to be pretty simple, like the quote app that I built as part of the tutorial I'm using right now. It has a title bar at the top, a photo, and a text box with a quote that changes when you push a button that sits under the quote. Other apps have multiple screens and perform some pretty involved calculations, store and use data, and integrate with different parts of the phones functionality like the camera, the gps system, the on-screen keyboard, etc. Those apps could take a lot longer to build.
- How well aligned are your app design goals and your current skill level? If you're building an app that has the kind of features you've built before, it may go pretty quickly. If you're trying to do a lot of things you've never tried before, it could take significantly longer to problem-solve your way through.
- How well do you manage frustration? This may sound like a joke question, but it's an honest thing to consider. For my first app that I built without instructions, it took a total of about 4 hours. It had some similarities to the first app that I built by following the instructors actions exactly in the videos of the tutorials, but this time I had no step-by-step directions. The Sunday before last, I spent three hours trying to build the assignment app, using Google to find information when I had trouble, and making very little headway. At the end of that session, I was frustrated and feeling pretty defeated, and I thought there was a pretty good likelihood that this project would be about my failure to reach my goal. Almost a week later, I gave it another go and had the thing built within the hour, even though I re-started from scratch. I've learned by now that this is a completely normal part of the software development process, whether you're a new coder (like me), or have been building software for 30 years. The stuff you struggle with gets more and more complex, but all developers deal with it. I went to a Flutter meetup this week and was talking to the table full of professional developers about how I almost sank into the Swamps of Sadness, and every single one of them admitted that they feel that way, on average, at least once per week. One of those developers is literally the Development Manager for a relatively high-profile local software company. Managing frustration well means knowing when you're too deep in the weeds and too frustrated to make real progress, and stepping away from the computer to do something else. I probably could have reclaimed an hour off that first, miserable session and still have built the app in an hour in the second. On the other hand, I could have also stayed up until 2am and burned down a lot more time being frustrated in that first session, too. The best thing is to realize when you're just spinning your wheels so that you know when to take a break.
Can Google's Flutter Kit be used for a Dental Assisting simulation?
This is an awesome question! I don't know how the simulations work, but I did a bit of Googling and found some articles and videos about Flutter simulations. Here's one that looks interesting: https://www.youtube.com/watch?v=LHZ0KSvTTqQ.
I will expand the answer to this question as I learn more about Flutter!