This course is part of the Flutter elective summer program at Innopolis University, running from 26 August to 26 September. It is designed to introduce students to Flutter and Dart, covering everything from basic UI elements to advanced design and deployment techniques.
- Fellow Travelers - app to find trip mates for all your trips
- First Aid Helper App - app to provide users with essential first aid instructions and CPR guidance
- Forest - app that helps to leave your phone for time
- GPS Run tracker - app for tracking your running sessions
- Healthy Cookies - app designed to help people track their food intake
- Sleep Tracker - sleep tracking app
- Aqua Mates - social hydration app where users can add friends and track each other's hydration progress
Section | Section Title |
---|---|
1. | Overview of Flutter, Dart, and project setup |
2. | Widgets, layouts, and UI patterns |
3. | State Management |
4. | Navigation and Routing |
5. | Networking and Data Management |
6. | Advanced UI Design |
7. | Testing and Debugging |
8. | Deploying and CI/CD |
Type | Points |
---|---|
Attendance | 15 |
Labs/seminar classes | 35 |
Midterm individual project | 20 |
Final team project | 30 |
Throughout the course, students completed various lab tasks and assignments aimed at reinforcing the concepts taught in the lectures. Each lab focuses on specific aspects of Flutter development, as detailed below:
- Lab 1: Implement basic Flutter widgets and their properties to create a simple UI.
- Text widget customization
- Icon widget usage
- Image display from network
- Button creation and functionality
- Layout with Columns and Containers
- Lab 2: Dive into Dart programming concepts including classes, inheritance, mixins, functions, and null-safety through hands-on tasks.
- Creating and using Dart classes
- Inheritance in Dart
- Using mixins for JSON serialization
- Function writing and usage
- Implementing null-safety features
- Lab 3: Build a stateful Flutter application focusing on hydration tracking with advanced state management and custom UI painting.
- State management with StatefulWidget
- State management using Riverpod
- Custom UI painting for water intake visualization
- Data persistence with SharedPreferences
- Lab 4: Explore asynchronous programming, state management solutions, and making HTTP requests in Flutter.
- Async/await for asynchronous operations
- Using Provider and Riverpod for state management
- Making HTTP requests with the HTTP package and Dio
- Lab 5: Learn about JSON parsing, route navigation, and using the freezed package in Flutter.
- JSON parsing and data fetching
- Route navigation with arguments
- Using freezed for immutable data models
- Lab 7: Focus on testing, including unit, mocking, widget, golden and integration test.
- Implementing various types of tests
- Code generate needed files
- Lab 8: Advanced topics including setting up analyzer rules, CI/CD with GitHub Actions, Docker integration, and building for different platforms.
- Analyzer setup and code quality
- CI/CD pipeline configuration
- Dockerization of a Flutter web app
- Building and deploying for multiple platforms
- Middle Individual Assignment: The Contrast Shower Companion app.
Students are tasked with creating an app to guide users through contrast shower sessions, with functionality to save it in local-storage and navigate between pages
- Final Assignment: Healthy app
Students will work in teams to develop a Cross-Platform Flutter Healthy App, incorporating various features and best practices covered throughout the course
For those who seek to get an A grade on the course without participating in other activities, it is enough to complete the Bonus Assignment. It includes the development of a cross-platform Flutter package for document scanning, taking into account requirements such as camera integration, touch control, border recognition and image processing.
This course adopts a practical, hands-on approach to learning, emphasizing collaboration and version control as key aspects of modern software development. Assignments and lab exercises are structured to reinforce these concepts through a pull request-based workflow.
At the beginning of the course, students are required to fork the main repository containing the templates for labs and assignments. This process introduces students to the concept of "forking" in GitHub, creating a personal copy of the repository on their own GitHub account which they can modify independently.
For each assignment or lab:
- Students work within their forked repository, making changes or completing tasks as specified in the lab or assignment instructions.
- Create new branch for each new activity
- Upon completion, students push their changes to their forked repository on GitHub.
After pushing changes to GitHub, students create a Pull Request (PR) from their repository to the original repository from which they forked. This PR should include all changes made during the lab or assignment.
- Navigate to the original repository on GitHub.
- Click on the 'Pull Requests' tab and then the 'New Pull Request' button.
- Select your repository and branch with the changes as the source, and the original repository's corresponding branch as the destination.
- Review the changes, ensuring they are complete and correct as per the assignment requirements.
- Create the Pull Request, providing any necessary descriptions or comments for the instructors or TAs to review.
Instructor review the Pull Requests, providing feedback directly within the GitHub interface. This feedback may include suggestions for improvement, questions about the implementation, or confirmation of successful completion(optional).
Once the assignment or lab is successfully completed and reviewed, the Pull Request may be closed. In this course, the primary goal of the PR is for submission and feedback rather than merging into the main repository. This approach allows instructors to easily track submissions and provide structured feedback, while students gain experience with a key aspect of collaborative software development.
This pull request-based workflow not only reinforces the technical skills involved in using git and GitHub but also simulates a collaborative development environment, preparing students for future software projects in both academic and professional settings.
The course feedback is visualized in the following graphs, representing students' responses collected after the course completion. These graphs provide insights into various aspects of the course, including overall impressions, application of learned skills, interactions with classmates from other electives, course comparison with other courses, reflections on prior knowledge, and feelings at the course's end.
This graph displays the general sentiment of students towards the course upon completion, capturing their overall impressions.
Responses to "Now I..." reflect on the new skills or knowledge students feel they have gained from the course.
This chart illustrates students' feelings after interacting with peers from different electives, highlighting the value of cross-disciplinary communication.
Student responses comparing this elective to other courses they have taken, providing context on its relative difficulty, engagement, and value.
Insights into whether students' expectations were met, exceeded, or not achieved, based on their prior expectations of the elective.
Reflections on students' feelings and takeaways at the course's conclusion, summarizing their end-of-course perspective.
This visualization captures unique elements of the course that were particularly appreciated by students, highlighting innovative aspects that set it apart from other courses.
This chart illustrates course elements that, while absent, were noted by students as positive omissions, suggesting a thoughtful curriculum design that aligns with student expectations.
This visualization reflects on aspects that students have encountered in other courses but were missing here, indicating areas for potential inclusion to enhance the learning experience.
This figure shows the course components that are commonly found in other courses but were deliberately excluded here, to the appreciation of students, underscoring the importance of curricular uniqueness.
This plot presents what students have learned, encapsulating the course's impact on their knowledge and skills in a visually engaging manner.
This visualization highlights the elements of the course that were perceived as unnecessary or less valuable by students, offering insights into areas for potential refinement.
This chart captures constructive feedback from students on how the course could be improved, providing valuable directions for future enhancements.
Feedback on Timur's proficiency in English, highlighting how it impacts the learning experience.
Students' comparison of Timur's teaching methodology with that of other instructors, focusing on effectiveness and engagement.
Capturing the aspirations and plans students have developed as a result of their learnings from the course.
A collection of students' commitments, inspired by their course achievements, extending beyond academic pursuits.
Expressions of hope and goodwill, directed towards peers, instructors, or the broader community, as inspired by the course's spirit.