Design+Code logo

Quick links

Suggested search

Jetpack Compose for Designers image 1

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.

Jetpack Compose for Designers image 2

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.

Jetpack Compose for Designers image 3

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.

Jetpack Compose for Designers image 4

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.

READ NEXT

Building your first component

Templates and source code

Download source files

Download the videos and assets to refer and learn offline without interuption.

check

Design template

check

Source code for all sections

check

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.

icon

6 courses - 24 hours

course logo

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

UIKit for iOS 15 Part 2

Learn advanced techniques about animations, layout, localization, Firebase, Xcode Cloud, and more!

3 hrs

course logo

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

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

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

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