# data[].attributes.body
Students will be able to design intuitive and responsive user interfaces using Flutter's widget system.

# data[].attributes.body
Students will be able to develop fully functional Flutter applications using Dart programming language and Flutter framework.

# data[].attributes.body
Students will be able to implement and compare different state management solutions in Flutter applications.

# data[].attributes.body
Students will be able to critically evaluate Flutter applications for performance, user experience, and code quality.

# data[].attributes.body
Students will be able to analyze requirements and create efficient mobile solutions using Flutter's cross-platform capabilities.

# data[].attributes.body
Direct instruction on Flutter basics, widget tree, and Dart language fundamentals.

# data[].attributes.body
Guided practice: Students work in small groups to experiment with different Flutter widgets and create simple UI layouts. Use Padlet to share and discuss created layouts.

# data[].attributes.attachment_link.readable_text
Create beautiful apps faster with Flutter's collection of visual, structural, platform, and interactive widgets. In addition to browsing widgets by category, you can also see all the widgets in the widget index.

Flutter ships with two design systems as part of the SDK. You can find many more designs systems created by the Flutter community on pub.dev, the package repository for Dart and Flutter.

Base widgets support a range of common rendering options like input, layout, and text.

100+ short, 1-minute explainer videos to help you quickly get started with Flutter widgets.
Watch more widget of the week videos
Unless stated otherwise, the documentation on this site reflects the latest stable version of Flutter. Page last updated on 2024-08-13. View source or report an issue.

# data[].attributes.attachment_link.description
A catalog of some of Flutter's rich set of widgets.

# data[].attributes.body
Direct instruction followed by guided practice on different state management approaches (setState, Provider, Bloc).

# data[].attributes.body
How can we leverage Flutter to create cross-platform mobile applications that are both efficient and user-friendly?

# data[].attributes.body
Independent practice: Students design and implement the architecture for a given app scenario, focusing on efficient state management and widget composition.

# data[].attributes.attachment_link.title
Flutter App Architecture: Best Practices and Detailed Implementations

# data[].attributes.attachment_link.description
Effective Flutter app architecture is pivotal for creating scalable, maintainable, and robust applications. This detailed guide explores best practices in app architecture, focusing on design…

# data[].attributes.body
Guided practice: Integrate a REST API into a Flutter app, handling asynchronous operations and updating UI accordingly.

# data[].attributes.attachment_link.title
Mastering API Integration in Flutter: A Step-by-Step Journey from Beginner to Pro

# data[].attributes.attachment_link.description
Working with APIs in Flutter is a fundamental skill for building mobile apps that fetch data from the internet. In this guide, I’ll take…

# data[].attributes.body
Direct instruction on Flutter performance best practices, followed by students optimizing a provided Flutter app.

# data[].attributes.attachment_link.title
Flutter Europe: Optimizing your Flutter App

# data[].attributes.body
Formative assessment: Conduct weekly code reviews where students present their work and receive feedback from peers and instructor.

# data[].attributes.body
Formative assessment: Students present their mini-projects every month, demonstrating their understanding of covered concepts. Use Padlet for students to share their project links and receive peer feedback.

# data[].attributes.body
Summative assessment: Online quiz covering Flutter basics, widget types, and state management concepts.

# data[].attributes.attachment_link.readable_text
On this page

Create a quiz

Tip: The quickest way to create a quiz is to go to g.co/createaquiz .

1. Open a form in Google Forms.

2. At the top of the form, click Settings.

3. Turn on Make this a quiz.
Optional: To collect email addresses, next to "Responses," click the Down arrow and turn on Collect email addresses.

Add questions

If you're using a template, you can skip to Update questions.

1. Open a quiz in Google Forms.

2. Click Add question .

3. To the right of the question title, choose the type of question you want.

4. Enter your question.

5. For applicable question types, enter possible answers.

6. (Optional) To specify the correct answer, assign points, or provide feedback, click Answer key. See Add questions specifying answers & points.

Tip: To prevent people from not answering a question, turn on Required.

Learn more at the Google Docs Editors Help Center

Update questions

Tip: To preview your changes at any time, at the top right, click Preview .

Add questions specifying answers & points

In the answer key, you can assign points to questions or provide feedback on answers. For some types of questions, you can also specify the correct answers.

1. To add a question, click Add question .

2. Fill out your question and answers.

3. In the bottom left of the question, click Answer key.

4. Choose the answer or answers that are correct.

5. In the top right of the question, choose how many points the question is worth.

To add a written or YouTube video explanation to an answer, click Add answer feedback.

You can edit questions or answers when you click on them.

Tip: To set the same point value for all questions, click Settings. Under Global Quiz Defaults, enter a point value.

Customize your quiz

Design your quiz

You can change your theme, set fonts, and create sections, just like with a form. See Customize your form.

Decide what people can see during and after a quiz

You can choose if people can see missed questions, correct answers, and point values.

1. Open a quiz in Google Forms.

2. At the top of the quiz, click Settings.

3. Under "Respondent settings," change settings as needed.

Preview and send your quiz

At any time, you can preview your quiz to see what it looks like. When you're ready, send your quiz to respondents using email or text.

Tip: You can share a quiz with people outside your organization, just like a form. See Control and monitor access.

Preview it yourself

Email your quiz

1. Open a quiz in Google Forms.

2. In the top right, click Send.

3. Add the email addresses you want to send the form to, along with the email subject and message.

4. To include the quiz in the email, select Include form in email.
Note: This option isn't available if your quiz includes a file upload question.

5. Click Send.

Tip: You can collect email addresses of participants, just like a form. See Control and monitor access.

Share a link to your quiz

1. Open a quiz in Google Forms.

2. In the top right, click Send.

3. At the top of the window, click Link .

4. (Optional) To simplify the quiz URL, select Shorten URL.

5. Click Copy.

6. Paste the link into a chat or email.

Grade a quiz

To get quiz responses, at the top of the quiz, click Responses.

To see a summary analysis of all quiz results, click Summary.

To grade by question, click Question.

To grade by person, click Individual.

Tip: You can send quiz responses to a spreadsheet, just like a form. You can also pause or stop response collection. See Get form responses.

Grade by question

Some questions need to be graded manually, like short answer or paragraph formats. To grade faster and reduce potential bias, you can grade by question. This is because identifying information doesn't appear by default. You'll see all the answers for a particular question at once.

Note: You can't grade by question for grid-type questions.

Grade by individual

If you collect email addresses, you can assign points and leave feedback on individual responses. After you grade each response, save your changes.

1. In Google Forms, open a quiz.

2. At the top, click Responses.

3. Click Individual.

4. To move between individuals, click Previous or Next .

5. Find the question you want to grade.

In the top right, enter how many points the response earned.

Under the answer, click Add feedback.

6. Enter your feedback and click Save.

7. To save your changes, at the bottom, click Save.

Note: If you disable the quiz setting on a form, any grading settings and manual grades you added won't be available if you decide to re-enable the quiz setting later. You can access these manual grades by using Google Takeout. If you'd like to permanently delete these manual grades, you can delete the form or individual responses. Modifying the manual grades will also overwrite any previous versions for that response.

Send quiz results

Release quiz grades now or later

If you collect email addresses in your form, you can send results immediately or wait until you're ready to share them.

By default:

Grades will release immediately

Email addresses won't be collected.

1. In Google Forms, open a quiz.

2. Click Settings.

3. Under "Release grades," select an option:

Immediately after each submission

Later, after manual review

Send grades by email

If you chose to wait to release quiz grades, you can send the grades by email when you're ready.

1. In Google Forms, open a quiz.

2. At the top, click Responses Individual.

3. At the top right of a response with a recorded email address, click Release score.

4. Check the boxes next to the people you want to email.

5. Click Send emails and release.

Related topics

Google, Google Workspace, and related marks and logos are trademarks of Google LLC. All other company and product names are trademarks of the companies with which they are associated.

# data[].attributes.attachment_link.description
Tip: The quickest way to create a quiz is to go to g.co/createaquiz . Open a form in Google Forms. At the top of the form, click Settings. Turn on Make this a quiz.Optional: To collect email addresses, next to "Responses," click the Down arrow and turn on Collect email addresses.

# data[].attributes.body
Summative assessment: Students develop a complete Flutter application showcasing all learned concepts, including proper architecture, state management, and API integration.

# data[].attributes.body
Students create a concept map summarizing the key Flutter concepts learned and their relationships.

# data[].attributes.body
Group discussion on the challenges faced during app development and strategies to overcome them.

# data[].attributes.body
Students submit an exit ticket listing three key takeaways from the lesson and one area they want to explore further.

# data[].attributes.body
Complete assigned Flutter codelabs to reinforce concepts learned in class.

# data[].attributes.attachment_link.description
Codelabs to help you quickly get started programming Flutter.

# data[].attributes.body
Analyze and critique a popular mobile app, suggesting how it could be implemented or improved using Flutter.

# data[].attributes.body
Implement the same app functionality using different state management solutions and compare their pros and cons.

# data[].attributes.body
Recreate a complex UI design in Flutter, focusing on responsive layout and custom animations.

# data[].attributes.attachment_link.title
GitHub - lohanidamodar/flutter_ui_challenges: Updated for Flutter 3.x ** 100+ Professional UI implementations with Code in Flutter. Available in Android, iOS, Linux and Web

# data[].attributes.attachment_link.description
Updated for Flutter 3.x ** 100+ Professional UI implementations with Code in Flutter. Available in Android, iOS, Linux and Web - lohanidamodar/flutter_ui_challenges

# data[].attributes.body
Find and contribute to an open-source Flutter project on GitHub, applying learned best practices.

# data[].attributes.body
By the end of this session, participants will be able to create and optimize a professional LinkedIn profile, apply best practices for networking, and evaluate strategies to increase visibility and engagement on the platform.

# data[].attributes.headline
Session 2: Introduction to Computer Science & Flutter - Installing the IDE and SDK

# data[].attributes.subject
Session 2: Introduction to Computer Science & Flutter - Installing the IDE and SDK

# data[].attributes.body
By the end of Session 2, participants will be able to install and configure the necessary development tools for Flutter, including the IDE and SDK, and demonstrate a basic understanding of computer science concepts as they set up their environment for Flutter development.

# data[].attributes.body
By the end of this session, participants will be able to initialize, commit, and push code using Git, as well as create and manage repositories on GitHub, while applying fundamental version control concepts to track changes and collaborate on projects effectively.

# data[].attributes.headline
Session 4: Understanding Dart - Data Types, Naming Conventions, Variables and Comments

# data[].attributes.subject
Session 4: Understanding Dart - Data Types, Naming Conventions, Variables and Comments

# data[].attributes.body
By the end of this session, students will be able to identify and explain key Dart concepts, including variables, data types, operators, and naming conventions, and apply these principles to write clean, well-documented code using appropriate comments and coding practices.

# data[].attributes.headline
Session 5: Applying Operators, Null Safety, and the late Keyword in Dart

# data[].attributes.subject
Session 5: Applying Operators, Null Safety, and the late Keyword in Dart

# data[].attributes.body
By the end of this session, participants will be able to explain and apply Dart operators, implement null safety features to prevent runtime errors, and use the late keyword to optimize variable initialization in their Dart programs.

# data[].attributes.body
By the end of this session, participants will be able to define and explain the structure and purpose of functions in Dart, apply function concepts to create reusable blocks of code and analyze how functions can improve code organization and efficiency in their applications.

# data[].attributes.headline
Session 7: Control Flow Statements in Dart - if, else, for, and while - try & catch - Exception - throw

# data[].attributes.subject
Session 7: Control Flow Statements in Dart - if, else, for, and while - try & catch - Exception - throw

# data[].attributes.body
By the end of this session, participants will be able to describe and explain the functionality of control flow statements such as if, else, for, while and so on, and apply these statements to manage decision-making and iteration in their Dart programs.

# data[].attributes.headline
Session 8 : Object-Oriented Programming in Dart 

# data[].attributes.subject
Session 8 : Object-Oriented Programming in Dart 

# data[].attributes.body
By the end of this session, participants will be able to define and apply core object-oriented programming concepts in Dart, including:

Classes and Objects: Create and use classes and objects to model real-world entities.

Inheritance: Extend classes to inherit and override properties and methods.

Encapsulation: Use access modifiers to protect data and expose only necessary parts of a class.

Abstraction: Implement abstract classes and methods to define abstract behaviors and hide complex implementation details.

Polymorphism: Polymorphism is used through overriding methods and interfaces to enable objects to be treated as instances of their parent class.

Interfaces: Define and implement interfaces to ensure classes adhere to a specific contract.

Participants will also be able to utilize key keywords such as static, this, and super to manage and manipulate class behavior, and implement these principles effectively in their Dart applications.

# data[].attributes.headline
Session 9: Asynchronous Programming in Dart – Futures, Streams, and Async/Await

# data[].attributes.subject
Session 9: Asynchronous Programming in Dart – Futures, Streams, and Async/Await

# data[].attributes.body
By the end of this session, participants will be able to explain and utilize Futures and Streams to handle asynchronous operations, and apply async/await for writing more readable and efficient asynchronous code in Dart applications.

# data[].attributes.headline
Session 10: Advanced Dart Programming – Isolates, Generics, Concurrency, and More (optional)

# data[].attributes.subject
Session 10: Advanced Dart Programming – Isolates, Generics, Concurrency, and More (optional)

# data[].attributes.body
By the end of this session, participants will be able to utilize advanced Dart concepts such as Isolates for concurrency, apply generics for type-safe programming, and explore enhanced enumerations. They will also be able to explain how garbage collection works, manipulate dates and times effectively, and leverage Dart’s built-in math library to perform complex calculations.

# data[].attributes.headline
Session 11: Principles of Software Development: SOLID, DRY, KISS, and more (optional)

# data[].attributes.subject
Session 11: Principles of Software Development: SOLID, DRY, KISS, and more (optional)

# data[].attributes.body
By the end of this session, participants will be able to define and apply key software development principles, including:

SOLID: Understand and implement the SOLID principles (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion) to create maintainable and scalable code.

DRY (Don't Repeat Yourself): Apply the DRY principle to reduce redundancy and improve code reusability.

KISS (Keep It Simple, Stupid): Emphasize simplicity in design to make code easier to understand and maintain.

YAGNI (You Aren’t Gonna Need It): Avoid adding functionality until it is necessary to prevent over-engineering.

Participants will also be able to analyze how these principles contribute to effective software design and implement them in their Dart applications to enhance code quality and maintainability.

# data[].attributes.attachment_link.title
Principles of Software Development: SOLID, DRY, KISS, and more

# data[].attributes.attachment_link.description
Discover the SOLID, DRY, and KISS principles, along with other key principles of software development. Enhance the quality of your code and maximize maintainability with these best practices.

# data[].attributes.body
Explain the counter app from the Flutter team and recap on OOP.

Stateless & StateFull widgets.

Container - Row - Inkwell - GesturDetector - Scaffold – SafeArea – Button - Card – column- AppBar – GridView – SingleChildScrollView - Padding - image - CircleAvatar - etc.

Pub dev packages ( Lottie - Readmore - etc)

# data[].attributes.body
Custom Widgets

Navigation

Life Cycle

Build Context

Implement with Figma

# data[].attributes.body
Auth Screens

Forms ( Text Form Field - Text Field )

Regex

onboarding

splash screen

# data[].attributes.body
Send data between screens

Navigation with Named

# data[].attributes.body
Simple Calc.

QR Code.

XO - Task

# data[].attributes.body
Image Picker and File picker.

Audio and Video Player.

# data[].attributes.body
What is the state management?

Provider

what is the riverpod

# data[].attributes.body
post man

# data[].attributes.body
Firebase service:

Auth

Firestore

Optional:

FCM

Real-Time - Chat App

crashlytics

AI

# data[].attributes.body
Shared Prefs

Flutter Secure Storage package

Note App With Sqlflite package

# data[].attributes.body
simulate project management and deal with teams

# data[].attributes.headline
Semantic Version - How to publish on the store and change app icon- name  (Open Discussion) (optional)

# data[].attributes.subject
Semantic Version - How to publish on the store and change app icon- name  (Open Discussion) (optional)

# data[].attributes.headline
DI - Dependency Injection & Design Pattern

# data[].attributes.subject
DI - Dependency Injection & Design Pattern