Dart
Flutter
Firebase
RiverPod
IntelliJ
GitHub
We want you to achieve two primary goals in this course:
Let’s discuss these two goals in more detail.
The first goal of this course is to help you learn to feel comfortable designing, implementing, and deploying native mobile applications using the Flutter framework. You will become familiar with a variety of best practices for mobile application system architecture, database storage and retrieval, and UX design.
Heads up!
Learning mobile application development with Flutter is complicated by literally hundreds of introductory blog posts, tutorials, and videos. Unfortunately, much of this material is unsuitable for one or more of the following reasons:
In response to this problem, the initial, “bootstrapping” sections of this course (Dartapalooza, Flutterpalooza, and Material) stick to official introductory tutorials and documentation written by the core Dart and Flutter development teams. This material is kept up to date, and is pitched at an appropriate level for students in this course.
In addition, this course starts by focusing on the Dart language in isolation. Investing a week or two becoming comfortable with Dart development and with the novel language constructs in that language will pay off richly when you need to understand non-trivial Flutter code.
Finally, we review any third-party pages or tutorials used in this course for clarity and appropriateness. Our goal is to provide a curated, efficient pathway to proficiency in mobile application design for advanced ICS undergrads and graduate students.
Here are the primary components of the tech stack used in this course:
Facility with a modern tech stack for mobile application development is like facility with high quality canvas, paint, and brushes: it is important and necessary, but at the end of the day, what counts is the picture you paint! So, the second goal of this course is to provide you with an opportunity to practice and develop your technical creativity and imagination. Put another way, given facility with a tech stack, what kind of technology are you inspired to build to address a human problem?
To achieve this goal, this course includes a semester-long activity called “Fix The World” (FTW). From the first day of class to the last, we hope you will spend time thinking about about personal or societal problems, and how imaginative and creative application of mobile technology can help to address them. By the end of the semester, you will have chosen a problem to work on, and developed (either alone or in small groups) a prototype mobile application to help address it.
As noted above, this course is designed for advanced undergraduates and/or graduate students in computer science or computer engineering.
It is helpful to have taken ICS 314 (Software Engineering) prior to this course, as we will assume you are comfortable with project and configuration management using GitHub, and code development using IntelliJ IDEA.
If you have not taken ICS 314, then you should study the Configuration Management, Agile Project Management, and Development Environment modules to gain proficiency with these skills prior to the course.
It is also helpful to have taken a Database design course, such as ICS 321. If you haven’t, you will have to pick up database design concepts along the way.
Mobile Application Development is structured as a sequential series of modules, each taking approximately a week to complete. Each module has the following structure:
Philip Johnson is a Professor of Information and Computer Sciences at the University of Hawaii. His research interests include climate change, food security, educational technology, software engineering, and serious games. He is currently an active developer for Geo Garden Club, an organization whose goal is to increase food security through advanced, native mobile technology for garden planning and management.
In Fall 2021, he participated in the Flutter Apprentice Book Club. This was a great introduction to Flutter and got him thinking about how he would teach mobile application development to ICS students. This course is his answer.