• Stars
    star
    546
  • Rank 78,653 (Top 2 %)
  • Language
    Kotlin
  • Created about 3 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Kotlin Multiplatform playground

NotFlix

Notflix

๐Ÿ› ๏ธMigrating to KMP - Develop Branch

An android and desktop app built using Kotlin Multiplatforom that consumes TMDB API to display current trending, upcoming and popular movies๐Ÿฟ and tvshows๐ŸŽฌ.

Kotlin Multiplatform is a framework of Kotlin that allows for sharing of a single codebase for business logic across different targets/platforms. Some of the targets supported by kotlin are: Android, iOS, Kotlin/JVM, Kotlin/JS, Android NDK, Windows, Linux, macOS etc.

Compose Multiplatform is a UI framework maybe by Jetbrains that allow for simple and accelerated desktop application and web development using compose. Compose multiplatform also allows sharing compose UI code between diffrent platforms. eg android, desktop(Windows, Linux, MacOS) and web.

Table Of Content

Prerequisite

// ToDo

Pros of KMP/KMM

  • Faster development since you only need to write most of the business logic and tests only once.
  • Improve code quality.
  • Highly maintainable and testable code due to separation of concern in the codebase.

App Structure

Project Structure

The project currently has 3 main modules:

1. androidApp

This module contains the android application's UI built using Jetpack compose.

2. desktopApp

This module contains the desktop application's UI built using Compose Multiplatform.

3. iOSApp

This module contains iOS code that holds the iosApp UI built using Swift UI

4 . shared

This module contains shared code that holds the domain and data layers and some part of the presentation logic ie.shared viewmodels

Domain

This is the core layer of the application. The domain layer is independent of any other layers this means that changes in other layers will have no effect on domain layer eg. screen UI (presentation layer) or changing database (data layer) will not result in any code change withing domain layer.

Components of domain layer include:

  • Models: Defines the core structure of the data that will be used within the application.

  • Repositories: Interfaces used by the use cases. Implemented in the data layer.

Data

The data layer is responsible for selecting the proper data source for the domain layer. It contains the implementations of the repositories declared in the domain layer.

Components of data layer include:

  • Models

    -Dto Models: Defines POJO of network responses.

    -Entity Models: Defines the schema of the database.

  • Mappers: They perform data transformation between domain, dto and entity models.

  • Network: This is responsible for performing network operations eg. defining API endpoints using Ktor.

  • Cache: This is responsible for performing caching operations using Realm.

  • Data Sources: Responsible for deciding which data source (network or cache) will be used when fetching data and presenting the data to viewmodels.

Clean Architecture Diagram

Presentation

The presentation package contains shared viewmodels code.

Libraries

Shared

  • Koin - Kotin dependency injection library with multiplatform support.
  • Ktor - Provides multiplatform libraries required to make network calls to the REST API.
  • Realm - Caching of application data from network responses.
  • Multiplatform Settings - This is a Kotlin library for Multiplatform apps, so that common code can persist key-value data.
  • kotlinx.coroutines - Library support for Kotlin coroutines with multiplatform support.
  • kotlinx.serialization - Provides sets of libraries for various serialization formats eg. JSON, protocol buffers, CBOR etc.
  • kotlinx.datetime - A multiplatform Kotlin library for working with date and time.
  • Napier - Logger library for Kotlin Multiplatform.
  • Mockk - Library for creating mocks for tests.

Android

iOS

  • SwiftUI - SwiftUI is Apple's brand new declarative UI Toolkit for building user interfaces for iOS, tvOS, macOS, and watchOS.
  • Cached Async Image - SwiftUI Image loading framework with caching capability.
  • KMP Async - A library to use kotlin coroutines in Swift.
  • Cocoa Pods - CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects.
  • UIimage Colors - Swift Library to extract colors from images.

Extras

  • GitHub Actions -The project uses GitHub actions for CI/CD operations such as running automated builds, tests and deploying applications.
  • KtLint - The project uses KtLint to check for syntax correctness.

Demo

Android App

iOS App

Desktop App

Related Resources

In this section I've included some resources ie. articles and GitHub repositories that i used to learn about kotlin multiplatform mobile:

Videos ๐Ÿ“ฝ๏ธ

Articles/Blogs ๐Ÿ“–

Sample Projects ๐Ÿค–

  • KMM Sample - A sample project for experiments with Kotlin Multiplatform mobile.
  • Fantasy Premier League - Kotlin Multiplatform project with Jetpack Compose, Compose for Desktop and SwiftUI clients (and using Ktor for remote API requests and Realm for persistence).
  • KaMPKit
  • People In Space - Minimal Kotlin Multiplatform project with SwiftUI, Jetpack Compose, Compose for Wear OS, Compose for Desktop, Compose for Web, and Kotlin/JS + React clients along with Ktor backend.
  • Poetree - Poetree is a minimalistic poetry app that helps people freely access art from a global community full of poetry lovers.

Other Helpful Resources

In this section I've included resources that are not related to kotlin multiplatform mobile but were really helpful in learning other android components and tools:

Videos ๐Ÿ“ฝ๏ธ

  • ToDo

Articles/Blogs ๐Ÿ“–

Sample Projects ๐Ÿค–

More Repositories

1

Gistagram

Kotlin Multiplatform GitHub/Instagram clone for android, iOS and desktop platforms
Kotlin
43
star
2

Kotlin-Multiplatform-Template

A Kotlin Multiplatform project template
Kotlin
40
star
3

DarajaMultiplatform

Kotlin Multiplatform wrapper for Daraja(M-Pesa) API for Kotlin and Swift clients
Kotlin
34
star
4

Android-CI-CD

Kotlin
26
star
5

Gamex-Compose

Simple android application that consumes RAWG API to display a list of games
Kotlin
21
star
6

Kyo

Kotlin
17
star
7

DevTyme

KMM project that consume REST API from WakaTime
Kotlin
17
star
8

Streamz

Kotlin
6
star
9

COVID19StatApp

COVID-19 Stats App using MVVM architecture to show statistics about the current pandemic.
Kotlin
6
star
10

LeadersBoard

ALC Project Phase 1 Challenge App
Kotlin
5
star
11

Mars-Rover-Photos

Kotlin
4
star
12

ShopComp

Kotlin
4
star
13

FixIt-API

User authentication API written in Golang
Go
4
star
14

go-firebase-tutorial

Simple Golang API to demonstrate file upload to fireabase storage and retrieving url of uploaded file.
Go
4
star
15

NoteIt

Barebone Kotin server for a simple note app
Kotlin
3
star
16

NoteKeeper

An application to help users keep all of their important notes organized and easily accessible on their android phones.
Kotlin
2
star
17

victorkabata.github.io

my personal website
CSS
2
star
18

NewsApp

News app.
Kotlin
2
star
19

Travelmantics

An android app to help users find great affordable travel deals to amaizing destinations. Part of ALC4 challenge2.
Java
2
star
20

golang-web-frameworks

Golang server project playground
Go
1
star
21

FixItApp

An android app to help users find repair services or assist users with repair skills to find new clients.
Kotlin
1
star
22

Resources

1
star
23

VictorKabata

1
star
24

Komix

Komix App
Kotlin
1
star