Jetpack Compose for Designers
Add to favorites
Learn about the basics of Jetpack Compose to build an NFT Marketplace Android app with the powerful declarative framework
Play video
![icon](http://images.ctfassets.net/ooa29xqb8tix/3jE4cFaYl3lo2vnF6hQhw7/71b0e256800b583648fb2f9c5db66452/Logo_Android.png?w=400&q=50)
Jetpack Compose for Designers
1
Jetpack Compose for Designers
10:07
2
Building your first component
13:03
3
Designing the Onboarding Screen
10:51
4
Introduction to Kotlin
10:26
5
Classes in Kotlin
10:57
6
Dynamic Composable Functions
12:22
7
Building a Lazy Horizontal List
10:35
8
Creating the Collection Cards
10:29
9
Remembering State
9:19
10
Scrolling Views
15:24
11
Creating a Top App Bar
8:48
12
Customizing Bottom App Bars
10:19
13
Making the Ranking Components
12:00
14
Building the Stats Screen
7:27
15
Animations in Jetpack Compose
13:36
16
Introduction to Navigation
8:48
17
Bottom App Bar Navigation
8:46
18
Dynamic Navigation
8:52
19
Introduction to Jetpack Compose Theming
11:40
20
Updating our App’s Typography
12:36
Please download the resources from the download link. This will be vital for completing this course. In this folder you should find a Figma file which is where we will be getting our designs from and the assets that we will use in the development of our sample app.
About this Course
This course is meant to introduce you to the Jetpack Compose framework and how you can still build amazing, powerful Android applications using Kotlin and the declarative syntax. I'll introduce you to some basics of Kotlin and how you can use Android Studio’s previews to quickly set up and visualize your app. We'll then delve further into Jetpack Compose code to see how we can customize basic view layouts of the app.
In this course, we'll build a sample NFT Marketplace app. We'll take a look at how we can use basic view elements like Text and Card, customize buttons and and other elementary views to match our design, and how to load data to make our composable functions dynamic. We'll also see how we can visually enhance our app by working with Material Icons, Android Theming, and more. Finally, we'll take a look at how we can use navigation throughout our app to support the default Android controls.
Project Setup
This course expects you to have some prior programming knowledge. Therefore, please make sure you have taken some of the previous courses before continuing. In this course, I am running macOS Monterey and Android Studio Bumblebee | 2021.1.1 Patch 2. You can download Android Studio from here.
To create a new project, open up Android Studio and select New Project . Under Templates and Phone and Tablet, select Empty Compose Activity . Enter the details for your app and save it in a location on your disk for you to find easily.
Inside of Android Studio Preferences, under Languages and Frameworks, select Kotlin. We’ll change the update channel from Stable to Early Access Preview. Currently, I am using 211-1.6.20-release-275-AS7442.40.
Inside of our project navigator, we need to update some of the build.gradle files we have. Be sure to note the difference between the app-level gradle file and the project level gradle file. For the project-level file, change it to the following:
buildscript {
ext {
compose_version = '1.1.0'
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.4'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'
}
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.1.2' apply false
id 'com.android.library' version '7.1.2' apply false
id 'org.jetbrains.kotlin.android' version '1.5.21' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
freeCompilerArgs += [
"-Xuse-experimental=kotlin.ExperimentalUnsignedTypes",
"-Xuse-experimental=kotlinx.coroutines.DelicateCoroutinesApi",
"-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi",
"-Xuse-experimental=kotlinx.coroutines.FlowPreview",
"-Xuse-experimental=kotlinx.coroutines.InternalCoroutinesApi",
"-Xuse-experimental=kotlinx.serialization.ExperimentalSerializationApi",
"-Xuse-experimental=androidx.compose.animation.ExperimentalAnimationApi",
"-Xuse-experimental=androidx.compose.ExperimentalComposeApi",
"-Xuse-experimental=androidx.compose.material.ExperimentalMaterialApi",
"-Xuse-experimental=androidx.compose.runtime.ExperimentalComposeApi",
"-Xuse-experimental=androidx.compose.ui.ExperimentalComposeUiApi",
"-Xuse-experimental=coil.annotation.ExperimentalCoilApi",
"-Xuse-experimental=com.google.accompanist.pager.ExperimentalPagerApi",
]
}
}
}
For the app-level file, change build.gradle to the following:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk 31
defaultConfig {
applicationId "io.designcode.nftapp"
minSdk 21
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
useIR = true
}
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion compose_version
kotlinCompilerVersion '1.6.10'
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
}
dependencies {
implementation "androidx.compose.material:material-icons-extended:$compose_version"
implementation 'androidx.core:core-ktx:1.7.0'
implementation "androidx.compose.ui:ui:$compose_version"
implementation "androidx.compose.material:material:$compose_version"
implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.activity:activity-compose:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:$compose_version"
debugImplementation "androidx.compose.ui:ui-tooling:$compose_version"
implementation "androidx.navigation:navigation-compose:2.4.0-beta02"
}
We’re now ready to start building our application.
Templates and source code
Download source files
Download the videos and assets to refer and learn offline without interuption.
Design template
Source code for all sections
Video files, ePub and subtitles
Videos
Subtitles
Assets
1
Jetpack Compose for Designers
Learn about the basics of Jetpack Compose to build an NFT Marketplace Android app with the powerful declarative framework
10:07
2
Building your first component
Explore the fundamentals of Jetpack Compose to build an amazing Card
13:03
3
Designing the Onboarding Screen
Modify Jetpack Compose elements to suit your design
10:51
4
Introduction to Kotlin
Learn the basics of programming in Kotlin
10:26
5
Classes in Kotlin
Develop different card types with the help of classes
10:57
6
Dynamic Composable Functions
Build the NFT Category Card to use Dynamic Data
12:22
7
Building a Lazy Horizontal List
Iterate through Data to build a Dynamic Scrollable List
10:35
8
Creating the Collection Cards
Making the Collection Card with Material Icons
10:29
9
Remembering State
Learn about State Changes and Remembering UI State with Compose
9:19
10
Scrolling Views
Finish building the Home Screen and Learn more about the Scaffold element
15:24
11
Creating a Top App Bar
Learn about TopAppBars in Android and how to implement them with Jetpack Compose
8:48
12
Customizing Bottom App Bars
Add a Bottom Bar for Navigation and Learn How to Add Dependencies
10:19
13
Making the Ranking Components
Review the fundamentals by building the blocks for the Stats Screen
12:00
14
Building the Stats Screen
Integrate the Second Screen of our App with Jetpack Compose
7:27
15
Animations in Jetpack Compose
Learn the Fundamentals of Animating Values to Update the UI
13:36
16
Introduction to Navigation
Integrate the Navigation Compose dependency to Set up Screen to Screen Navigation
8:48
17
Bottom App Bar Navigation
Enable Functional Interactivity for the Bottom App Bar
8:46
18
Dynamic Navigation
Control the First Screen a User is Presented with Dynamically
8:52
19
Introduction to Jetpack Compose Theming
Learn the Fundamentals of Building a Theme for your app
11:40
20
Updating our App’s Typography
Refactor the remaining parts of our application
12:36
Meet the instructor
We all try to be consistent with our way of teaching step-by-step, providing source files and prioritizing design in our courses.
Sai Kambampati
Student. Engineer. Designer. Not always in that order.
Student at UCSC constantly learning about new technologies, building innovative mobile apps, and designing breakthrough products.
6 courses - 24 hours
![course logo](http://images.ctfassets.net/ooa29xqb8tix/3jE4cFaYl3lo2vnF6hQhw7/71b0e256800b583648fb2f9c5db66452/Logo_Android.png?w=400&q=50?fm=jpg&q=50)
Jetpack Compose for Designers
Learn the fundamentals of Jetpack Compose to build a beautiful Android application using Kotlin and Android Studio
4 hrs
![course logo](http://images.ctfassets.net/ooa29xqb8tix/4bWEQMRsA6PzjiHljsxryp/55d78d84da072e9c22caddbccd67396b/swift-logo.png?w=400&q=50?fm=jpg&q=50)
UIKit for iOS 15 Part 2
Learn advanced techniques about animations, layout, localization, Firebase, Xcode Cloud, and more!
3 hrs
![course logo](http://images.ctfassets.net/ooa29xqb8tix/6MFFWO1k38yxTrLKRZ26e8/2c07fa6c2c4653bfae00dd87625d6e56/swift-logo.png?w=400&q=50?fm=jpg&q=50)
UIKit for iOS 15
Design and code a UIKit app for iOS 15 with storyboards, custom layouts, scroll detection, and accessibility using Xcode 13
5 hrs
![course logo](http://images.ctfassets.net/ooa29xqb8tix/6MFFWO1k38yxTrLKRZ26e8/2c07fa6c2c4653bfae00dd87625d6e56/swift-logo.png?w=400&q=50?fm=jpg&q=50)
Advanced Development in SwiftUI
Advance your SwiftUI skills by developing an app using Core Data, CloudKit, In App Purchases, Sign In With Apple, and Firebase Authentication
4 hrs
![course logo](http://images.ctfassets.net/ooa29xqb8tix/69nAImRvSWm0SZ3pIfBewe/f42397a7b28e94baff39f1a86fc12ace/flutter-logo.png?w=400&q=50?fm=jpg&q=50)
Flutter for Designers Part 2
Continuing on from the previous Flutter for Designers course, this course has a heavier emphasis on using Firebase API's to combine Firebase and Flutter. There will be a lesser emphasis on creating front-end Flutter UI and more emphasis on how to build functional applications capable of being shipped to the App Store. A review of the previous course and the Dart programming language will be very helpful. That being said, you will also be introduced to some new Flutter widgets and packages.
4 hrs
![course logo](http://images.ctfassets.net/ooa29xqb8tix/69nAImRvSWm0SZ3pIfBewe/f42397a7b28e94baff39f1a86fc12ace/flutter-logo.png?w=400&q=50?fm=jpg&q=50)
Flutter for Designers
Flutter is a relatively new toolkit that makes it easy to build cross-platform apps that look gorgeous and is easy to use. By utilizing a platform's native components we'll build an app that can run on both iOS and Android that will look and feel like it was developed natively. Furthermore we'll see how with one single codebase, Flutter provides us with native performance, hot reload for fast development, and access to beautiful, native components.
4 hrs