• Stars
    star
    3,590
  • Rank 12,349 (Top 0.3 %)
  • Language
    Dart
  • License
    Apache License 2.0
  • Created over 6 years ago
  • Updated over 2 years ago

Reviews

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

Repository Details

A multiplatform Dart movie app with 40% of code sharing between Flutter and the Web.

inKino - a multiplatform Dart project with code sharing between Flutter and web

What is inKino?

Build Status

inKino is a multiplatform Dart app for browsing movies and showtimes for Finnkino cinemas.

InKino showcases Redux, has an extensive set of automated tests and 40% code sharing between Flutter and web. The Android & iOS apps are made with a single Flutter codebase. The progressive web app is made with AngularDart. This project is generally something that I believe is a good example of a multiplatform Dart project.

I plan on doing a full article series on multiplatform Dart stuff, so you might want to check out my blog and subscribe to it.

Get it on Google Play Get it on the App Store Get it on the App Store

Folder structure

There's three different folders. Each of them is a Dart project.

  • core: contains the pure Dart business logic, such API communication, Redux, XML parsing, sanitization, i18n, models and utilities. It also has a great test coverage.
  • mobile: this is the Flutter project. It imports core, and it's a 100% shared codebase for the native Android & iOS apps that go on app stores.
  • web: the AngularDart progressive web app. Also imports core, and it's the thing that is live at https://inkino.app.

To work on these projects, open each one of them in an editor of your choice.

For example, if you want to do a new feature and you do it for the Flutter project first, you'd open both core and mobile in separate editor windows. To clarify, you'd do File -> Open... for core and then File -> Open... again for mobile.

Development environment setup

  • Install Dart for the web. The customized Dart version Flutter ships with is not suitable for web development.
  • Install webdev by running pub global activate webdev. This requires that you ran your Dart installation properly and Dart is part of your PATH.
  • Install an IDE. You can't go wrong with WebStorm. If that doesn't tickle your fancy, there are other options too.
  • Install the Dart plugin for your IDE.

Finally, if you haven't already, install Flutter. And the Flutter plugin for your IDE. At the time of being, inKino is built with Flutter 1.0.

If you don't like IDEs, you can apparently use Emacs or Vim too.

Building the project

Renaming the TMDB configuration file

You don't need a TMDB API key, but the actor images won't load without it.

If you try to build the project straight away, you'll get an error complaining that a tmdb_config.dart file is missing. To resolve that, run this on your terminal in the project root:

cd core/lib/src && mv tmdb_config.dart.sample tmdb_config.dart && cd ../../..

OR

If you don't trust in random bash scripts copied from the Internet, you can just rename the tmdb_config.dart.sample to tmdb_config.dart manually.

Building from source

First, ensure that you followed the "Development environment setup" section above.

  • To run the web project, first run pub get initially, and then webdev serve in the root of the web project.
  • To run the Flutter project, open it in your editor and click the play button, or run flutter run on your terminal.

Contributing

Contributions are welcome! However, if it's going to be a major change, please create an issue first. Before starting to work on something, please comment on a specific issue and say you'd like to work on it.

Thanks

Special thanks to Olli Haataja for the design.

Additional thanks for the initial release go to Thibaud Colas, Brian Egan, Alessandro Aime and Juho Rautioaho for giving their extra pair of eyes for reviewing the source code.

More Repositories

1

BottomBar

(Deprecated) A custom view component that mimics the new Material Design Bottom Navigation pattern.
Java
8,426
star
2

SwipeSelector

A nicer-looking, more intuitive and highly customizable alternative for radio buttons and dropdowns for Android.
Java
1,089
star
3

page-transformer

A sample for having PageView transformation effects in Flutter.
Dart
878
star
4

movie-details-ui

A sample for creating a nice movie details page UI in Flutter.
Dart
437
star
5

flutter_facebook_login

A Flutter plugin for allowing users to authenticate with native Android & iOS Facebook login SDKs.
Dart
404
star
6

streaming_shared_preferences

A reactive key-value store for Flutter projects. Like shared_preferences, but with Streams.
Dart
247
star
7

blurry_artist_details_page

An artist details page with blurred background in Flutter.
Dart
151
star
8

adaptive-master-detail-layouts

A sample on how to have an adaptive master-detail layout in Flutter.
Dart
89
star
9

flutter_twitter_login

A Flutter plugin for authenticating users by using the native TwitterKit SDKs on Android & iOS.
Dart
84
star
10

wavy-image-mask

Sample on how to use ClipPaths and CustomClippers to create a wave mask for an image.
Dart
57
star
11

separating_build_environments

A sample on how to separate apps into different build environments in Flutter.
Dart
43
star
12

image_test_utils

Provide mocked responses for Image.network widgets in Flutter widget tests.
Dart
38
star
13

multiplatform_key_value_store

Dart
29
star
14

form-validation-sample

A sample on how to validate forms simply in Flutter.
Dart
18
star
15

super_editor_collaboration_sample

Dart
13
star
16

testing-navigation

A quick sample app on how to test navigation in Flutter.
Dart
12
star
17

indent

Change indentation in multiline Dart strings while preserving the existing relative indentation. Kotlin's trimIndent and trimMargin for Dart.
Dart
11
star
18

welcomments-blog

The legacy blog for Welcomments. See here for the new one: https://github.com/welcomments/website
HTML
3
star