Giter Site home page Giter Site logo

roughike / inkino Goto Github PK

View Code? Open in Web Editor NEW
3.6K 107.0 675.0 31.7 MB

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

Home Page: https://inkino.app

License: Apache License 2.0

Ruby 0.87% Java 0.12% Objective-C 0.24% Dart 87.64% Shell 0.49% HTML 3.92% CSS 6.72%
dart dartlang flutter flutter-redux testing cross-platform multiplatform angulardart angular

inkino's People

Contributors

aednlaxer avatar alessandroaime avatar ibhavikmakwana avatar jaripekkala avatar jonahwilliams avatar nitishk72 avatar passsy avatar roughike avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

inkino's Issues

Question: What's your impression of the dev experience of AngularDart?

Hi,

Thanks for sharing the app's code - it's a great work! We're exploring Flutter and AngularDart combination mainly to share maximum possible non-UI code between the two apps. While Flutter adoption in the community and industry is soaring, AngularDart somehow doesn't have much community adoption - from what we see in various usual places like StackOverflow or even Dart's official Google Group.

Very curious what has been your experience and what's your recommendation about AngularDart - for moderately complex enterprise web app (that will have a Flutter-based tablet app for both Android and iOS).

Thanks!
Shafqat

Code review

This is the best format I could think of, to easily get embedded code snippets and links, and some notion of "actions".

Please note that my experience with mobile development only amounts to 1 React Native app, 1 iOS App, 0.1 Android app – and I did a bit of Dart once. I might be criticising things that are well-established conventions in the mobile / Dart world πŸ™‚. I also nitpicked a lot.


General comments

  • The code looks great! Don't pay too much attention to all my other comments, it really is. It's very readable, even for someone like me who doesn't have a clue about Flutter but has looked at Dart code before, as well as JS and Java.
  • I think naming is overall really good, long names where appropriate and short ones where appropriate. That goes a long way.
  • I dunno if you could do a better usage of types – don't know Dart enough to judge of that.
  • There is quite a bit of boilerplate code. I imagine this comes with the language / Flutter (eg. all those redefinitions of the == operator or hashCode), but worth stating anyway.
  • I think more code could be written in a functional style (eg. map over forEach + mutating an array). There isn't that much complicated logic in the app right now that it would make a big difference, but it would definitely help with readability.
  • I'm surprised there isn't more reuse / abstraction for "styling" code (eg. font styles, colors, gradients, spacing). Not sure whether this is an issue, but it would seem to make it harder to ensure consistency in some of the key visual elements (animation timings, gradients, etc).

Things that are missing

I'm not sure they really are missing πŸ˜„ I'm just surprised not to see them:

  • A CI setup running the tests (with a badge, or link in the README)
  • Maybe some test coverage info or link to a collection service?
  • Linting tools
  • Some sort of script / task runner (eg. Make, or a package.json with yarn/npm in JS-land)
  • Installation instructions
  • Instructions to run the tests

I imagine these might come for free with the SDK though.


In no particular order, except for this first section,

File structure & naming

  • I see the test folder has the same structure as lib, and test files are suffixed with _test. Wouldn't this be easier to maintain if tests were located next to the file under test within lib? (I imagine there's some convention to follow here – personally I like that approach because it makes it much easier to see what has and doesn't have tests). You also might not have to do things like For more, see test/event_name_cleaner_test.dart. if the test file was right there.

  • Same for the test data inside test_assets at the moment. It would make it much easier to understand the XML parsing code in say models/event if the XML stub was right next to it.

  • The test data (https://github.com/roughike/inKino/tree/v1.0.0/test_assets) uses the assets terminology, but those files technically aren't bundled with the app – should use stub instead?

  • I'm not sure what to think of the terminology of having networking and model under data. If the API you were talking to was anything that's not understood as a data source, it would still fall under networking (eg. use the same networking utils) but wouldn't necessarily be data. Also model feels important enough that it should be top-level – and again models are more than just data (business logic)

  • Finally, have you considered organizing the app code by feature/domain (eg events, showtimes, etc) rather than by file type / function (eg. redux, models)? It is sort of done already for Redux and the UI (which naturally work well by domain), so would be worth considering doing the same for the whole app IMHO.

Tests

expect(paris1517.id, '302535');
expect(paris1517.title, '15:17 Pariisiin (2D dub)');
expect(paris1517.cleanedUpTitle, '15:17 Pariisiin');

  • I see the deserialisation tests a lot of manual assertions. I think it's fine/good for such a small test suite, but there might be a snapshot testing feature you could leverage in your test framework that would auto-generate those?

sut = new ShowMiddleware(mockApi);

  • sut – system under test?. Not the clearest variable name IMHO. middleware?

Utils

static final RegExp _pattern =
new RegExp(r"(\s([23]D$|\(([23]D|dub|orig|spanish|swe).*))");

Data

  • General comment – I notice the API response parsing code is somewhat coupled with the app's models. Generally I think it's a good idea if the app "owned" the API, but here that's not the case. Have you considered separating this out as a standalone Dart client for the Finnkino API? Since it could be reused beyond this one app and its models, this seems desirable IMHO.

var trailers = <String>[];
nodes.forEach((node) {
trailers.add(

document.findAllElements('Show').forEach((node) {
var title = tagContents(node, 'Title');
var originalTitle = tagContents(node, 'OriginalTitle');
shows.add(new Show(

  • Looks like these should be a map instead of a forEach. (same comment for other models potentially)

/// Entirely redundant theater, which isn't actually even a theater.
/// The API returns this as "Valitse alue/teatteri", which means "choose a
/// theater". Thanks Finnkino.
static const String kChooseTheaterId = '1029';

  • πŸ˜‚ priceless

Networking

/// If this has a red underline, it means that you haven't created
/// the lib/tmdb_config.dart file. Refer to the README for instructions
/// on how to do so.
import 'package:inkino/tmdb_config.dart';
/// If this has a red underline, it means that you haven't created
/// the lib/tmdb_config.dart file. Refer to the README for instructions
/// on how to do so.

  • I know this is documented in the README but this still strikes me as very odd. Secrets shouldn't be inlined in application code, and if the code can compile without the API key actually being set up, it should. You could consider logging a dev-time warning instead.
  • If you want to keep it as-is, consider adding a tmdb_config.dart.sample file with its content as what the README shows, and a cp command in the README.
  • Also duped comment

UI

description:
description ?? 'There was an error while\nloading movies.',
onActionButtonTapped: onRetry,

  • I'm surprised to see text overflow manually handled like that. Is this idiomatic?

class TheaterListViewModel {
TheaterListViewModel({

  • Personal preference – I find it easier to understand if the view model is inlined within the view file, since the two are highly coupled.

description:
'Didn\'t find any movies\nabout to start for today. Β―\\_(ツ)_/Β―',
);

  • Should this be "on the selected day" (or equivalent) instead of "today"?

style: new TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16.0,
),
),

  • I'm surprised text styles like this aren't extracted to some sort of "stylesheet". It would make it easier to ensure the styles are consistent?

gradient: new LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: <Color>[
const Color(0xFF222222),
const Color(0xFF424242),
],
),

decoration: new BoxDecoration(
gradient: new LinearGradient(
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
colors: <Color>[
const Color(0xFF222222),
const Color(0xFF424242),
],
),
),

  • Same question as above – this gradient is duplicated once. Should it be extracted somewhere?

placeholder: ImageAssets.transparentImage,
image: event.images.portraitMedium ?? 'http://example.com',
width: size?.width,

  • This looks like it's hotlinking example.com, but I'm not entirely sure because I don't know how the placeholder works. Either way this seems like a bad idea – is there a better fallback value?

Redux

  • I would advocate for _reducer and _state (and potentially _selectors) to be co-located in the same file by default. All of this code is very tightly coupled, and is harder to follow in separate files (note: this might be true only in JS, maybe the IDE features for a language like Dart are good enough that it's less of an issue). That said, I know this isn't a very popular opinion even in JS land, and it only works if all those three things are relatively small, so take this with a grain of salt.

// YOLO! We don't need to handle this. If fetching actor avatars
// fails, we don't care.

  • πŸ‘ maybe mention what happens UI-wise in that scenario, so someone looking at this knows they don't have to worry.

return new Store(
appReducer,
initialState: new AppState.initial(),

  • I don't think it's idiomatic redux to have a root reducer that does more than just combining other reducers – looking at the file structure, I would not expect app to be the one combining all of the others.

List<Event> _uniqueEvents(List<Event> original) {
var uniqueEventMap = new LinkedHashMap<String, Event>();
original.forEach((event) {
uniqueEventMap[event.originalTitle] = event;

  • Isn't there a LinkedSet type in Dart?
  • I'm not 100% sure but it looks like there is no place where we would want duplicate events. Why not do this in the middleware or reducer instead of the selectors?

Did I mention the code actually is very readable?

Tabbing on ChromeOS is not working

From #74:

Tabbing does not work. This is really important. For example the Google Play store on ChromeOS allows you to use TAB key to jump down and across lists, and then ESC to back up out of lists or all the way backwards in navigation. It makes it much more usable.

I reported this a low priority issue, since I expect that not a lot of people will use inKino with ChromeOS. If an end user reports the same issue, I'll raise the priority and look into it sooner.

Use more const Widgets

I've noticed there are a lot of places where new can be replaced by const with just some small changes.
Every place you can use a const widget instead of new, you save flutter a little bit of work.

For example, in event_backdrop_photo.dart

  Widget _buildShadowInset(BuildContext context) {
    return new Positioned(
      bottom: -8.0,
      child: new DecoratedBox(
        decoration: *const* BoxDecoration(
          boxShadow: *const* <BoxShadow>[
            *const* BoxShadow(
              color: Colors.black38,
              blurRadius: 5.0,
              spreadRadius: 3.0,
            ),
          ],
        ),
        child: new SizedBox(
          width: MediaQuery.of(context).size.width,
          height: 10.0,
        ),
      ),
    );
  }

They aren't huge changes, but if you're interested I can open a PR

Logo Proposal for inKino

Hello, I wish to cooperate with inKino, for this reason I have decided to design a logo for it. If you like this proposal, I can send you the files.

You can suggest the changes you think are necessary.

PROPUESTA_LOGO_INKINO.jpg

Support subsidiaries

Finnkino operates a total of 14 cinemas in eleven cities. It also has subsidiaries in Latvia, Lithuania and Estonia, operated under the names of Forum Cinemas and Forum Distribution.
https://en.wikipedia.org/wiki/Finnkino

Finland:

Latvia:

Lithuania:

Estonia:


This change would require:

  • introducing multiple endpoints and changes to fetching strategy
  • evaluating the use of areas as only .fi version has aggregate areas.
  • extending #25 to support:
    • English
    • Russian
    • Finnish
    • Latvian
    • Lithuanian
    • Estonian
  • evaluating the possibility to use GPS to retrieve closest theatres

TMDB API attribution

The TMDB API terms require that the app states somewhere that their API is in use.

Reusing the software

Given the permissive license ( apache ) under which is this project released, we can reuse this code base for our own purposes ?

casts names are overlapping

Casts names are Over lapping with each other when inkino.app website opened in mobile device as desktop site. Attaching a screenshot for reference. I opened the website in Xiaomi Redmi 5A device and chrome as browser running its latest version.
screenshot_2018-12-29-15-40-28-268_com android chrome

Build showing errors

When I try to launch the web version using webdev serve, I am getting the following out put.

Creating build script, took 10047ms
[INFO] Setting up file watchers completed, took 25ms
[INFO] Waiting for all file watchers to be ready completed, took 202ms
[INFO] Reading cached asset graph completed, took 490ms
[INFO] Checking for updates since last build completed, took 744ms
[INFO] Running build completed, took 443ms
[INFO] Caching finalized dependency graph completed, took 282ms
[SEVERE] build_web_compilers:ddc on package:package_resolver/package_resolver.dartdevc.module (cached):
Error compiling dartdevc module:package_resolver|lib/package_resolver.ddc.js

[error] The imported library ''current_isolate_resolver_stub.dart'' can't have a part-of directive. (package:package_resolver/src/package_resolver.dart, line 12, col 8)
[error] The imported library ''utils_isolate_stub.dart'' can't have a part-of directive. (package:package_resolver/src/utils.dart, line 15, col 8)

Please fix all errors before compiling (warnings are okay).
}

[SEVERE] Failed after 742ms
Serving `web` on http://localhost:8080
Serving `test` on http://localhost:8081

It is showing that there is some error with package_resolver.

No cast pictures

Cast pictures only show a generic thumbnail.
I would be useful to know what is missing for this to work (which file needs to be modified, etc)

Display show times in event details page

Currently, when navigating to event details page from now in theaters or upcoming page, there are no showtimes visible. While there's an entirely different tab for browsing showtimes in the main page, it would be nice to see the showtimes just for the currently open movie.

Mockito dependency causes build error (Flutter 0.73 or later)

Can only build if I remove mockito from the dev dependencies. If not I get this error:

Running "flutter packages get" in inKino...
The current Dart SDK version is 2.1.0-dev.3.0.flutter-760a9690c2.

Because inkino depends on mockito >=0.8.1 <3.0.0-beta+3 which requires SDK version >=1.0.0 <2.0.0-∞, version solving failed.

Question about last release

Hi, I'm curious what your Flutter version was for this project when you last built and deployed. We are seeing bad scroll performance on other apps, but your app seems to be very smooth. Was it before 1.0 Flutter (December 2018)?

Support Version differences between the Client and Server

How do you handle the situation where you have V1 Client and v 1.1 server ?

There are a few techniques which i wil raise for discussion as i have tried a few difference ones.

  1. Keep the URLs always the same and pass the version of the client in the header. The server then detects the version in the header and then handles the request this way. Not changing the URL is the whole point here as if you do then so much else has to constantly change.

  2. Use GRPC. GRPC was designed so that the client and server can use have Data type models that are different in that if a field is added to the server model the client does not freak out.

Maybe some others.... ?

Accepted Media Resource Formats

The app default video format is set to YoutTube :

<MediaResourceFormat>YouTubeVideo</MediaResourceFormat>

Would it be sufficient to change the media tags to get this working with different media providers?
Ex:

<MediaResourceFormat>Vimeo</MediaResourceFormat>
<MediaResourceFormat>DailyMotion</MediaResourceFormat>

PlatformAdaptiveProgressIndicator with 20% overhead in LoadingView

Currently, the use of PlatformAdaptiveProgressIndicator in LoadingView

return LoadingView(
status: viewModel.status,
loadingContent: const PlatformAdaptiveProgressIndicator(),
errorContent: ErrorView(
description: 'Error loading events.',
onRetry: viewModel.refreshEvents,
),
successContent: EventGrid(
events: viewModel.events,
onReloadCallback: viewModel.refreshEvents,
),
);

causing the app to continually running at about 20% overhead.

screen shot 2018-08-03 at 22 16 02

If I replace the PlatformAdaptiveProgressIndicator with only a Text('Loading...') this overhead is not occurring any more.

I found that LoadingView is using StackView to show/hide views depending on their visibility,

return Stack(
alignment: Alignment.center,
children: <Widget>[
_TransitionAnimation(
key: LoadingView.loadingContentKey,
controller: _loadingController,
child: widget.loadingContent,
isVisible: widget.status == LoadingStatus.loading,
),
_TransitionAnimation(
key: LoadingView.errorContentKey,
controller: _errorController,
child: widget.errorContent,
isVisible: widget.status == LoadingStatus.error,
),
_TransitionAnimation(
key: LoadingView.successContentKey,
controller: _successController,
child: widget.successContent,
isVisible: widget.status == LoadingStatus.success,
),
],
);

but I think that PlatformAdaptiveProgressIndicator keeps running in the background, although it is invisible.

I just wanted to note about this issues.

And, thanks for sharing this great project;
I learned a lot from it πŸ‘

Issue with loading Mockito

When I first clone the repo and open it, I'm seeing this error:
[inKino] flutter packages get
Running "flutter packages get" in inKino...
Incompatible version constraints on mockito:

  • flutter_test 0.0.0 depends on version 2.2.3
  • inkino depends on version 3.0.0-alpha+3
    pub get failed (1)
    exit code 1

Incorrect poster image loads in cases where a movie has no poster (sometimes)

When selecting for example Turku Kinopalatsi from the nav drawer, initially the app shows the poster of "A Quiet Place" for "[rec]" as well. However if you scroll down and then up again (this I assume refreshes the view), "[rec]" with no poster renders correctly.

First screenshot shows the incorrect state and second screenshot is after you scroll a bit and let the view refresh.

screenshot_20180411-233721

screenshot_20180411-233741

PS. Sorry for the gigantic screenshots :D

Readd the tmdb_config.dart file with a placeholder api key

The project can't be built in its current state since it assumes that tmdb_config.dart is present. That file is omitted on purpose so that an actual TMDB API key isn't accessible to anyone.

Add lib/tmdb_config.dart with contents something like this:

class TMDBConfig {
  static final String apiKey = '<YOUR API KEY HERE>';
}

Also, make it fallback nicely; if there's no valid API key, the app shouldn't crash and the actor names shouldn't get stuck to Loading....

Issue running app on iPhone/iOS

Great app and very nice code, thanks so much for sharing ❀️

Grabbing the latest code from the repository and trying to run it from development branch, I am seeing three errors when I do flutter run -d [deviceID] where deviceID is the iOS simulator I run with open -a Simulator. It is a iPhone X with iOS 11.3. My environment is macOS High Sierra 10.13.4, Xcode 9.3 ((E145). Here is the output from flutter run -

Launching lib/main.dart on iPhone X in debug mode...
Running Xcode clean...                                       1.0s
Starting Xcode build...
Xcode build done                                             1.6s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **

Xcode's output:
↳
    === BUILD TARGET path_provider OF PROJECT Pods WITH CONFIGURATION Debug ===
    In file included from /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.0/ios/Classes/UrlLauncherPlugin.m:7:
    /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-3.0.0/ios/Classes/UrlLauncherPlugin.h:5:9: fatal error: 'Flutter/Flutter.h' file not found
    #import <Flutter/Flutter.h>
            ^~~~~~~~~~~~~~~~~~~
    1 error generated.
    In file included from /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.4.1/ios/Classes/SharedPreferencesPlugin.m:5:
    /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/shared_preferences-0.4.1/ios/Classes/SharedPreferencesPlugin.h:5:9: fatal error: 'Flutter/Flutter.h' file not found
    #import <Flutter/Flutter.h>
            ^~~~~~~~~~~~~~~~~~~
    1 error generated.
    In file included from /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-0.4.0/ios/Classes/PathProviderPlugin.m:5:
    /Users/indrajit.chakrabarty/Work/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-0.4.0/ios/Classes/PathProviderPlugin.h:5:9: fatal error: 'Flutter/Flutter.h' file not found
    #import <Flutter/Flutter.h>
            ^~~~~~~~~~~~~~~~~~~
    1 error generated.
Could not build the application for the simulator.
Error launching application on iPhone X.

flutter doctor prints the following -

➜  inKino git:(development) βœ— flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[βœ“] Flutter (Channel beta, v0.2.8, on Mac OS X 10.13.4 17E199, locale en-AU)
[βœ“] Android toolchain - develop for Android devices (Android SDK 27.0.3)
[βœ“] iOS toolchain - develop for iOS devices (Xcode 9.3)
[βœ“] Android Studio (version 3.1)
[βœ“] VS Code (version 1.22.1)
[βœ“] Connected devices (2 available)

β€’ No issues found!
➜  inKino git:(development) βœ—

My environment has Cocoapods version 1.5.0 installed.

Anyone have any suggestions for me try, please?

Thanks!

The expression here has a type of 'void', and therefore cannot be used.

image

void _updateShowDates(dynamic action, NextDispatcher next) {
    var now = Clock.getCurrentTime();
    var dates = List.generate(7, (index) => now.add(Duration(days: index)));

    next(new ShowDatesUpdatedAction(dates));
  }

I got this error message "The expression here has a type of 'void', and therefore cannot be used."

Detail

  • OS : Linux 18.04
  • Flutter SDK : Channel dev, v0.5.8
  • Dart version 2.0.0-dev.69.5.flutter-eab492385c

Error: No dynamic found

I am using Flutter v0.2.8 and built the Android apk with ./gradlew installDebug, when I open the app, it showed the following error.

screenshot_20180412-100557

ChromeOS issues list

I tried it out on Chrome OS and found a few things not right, but in general it works πŸ‘

  • No langscape mode. I think i raised this in a seperate issue. This is the most pressing issue.
  • Escape works, which is the same as the back button. SO thats good. I guess its default
  • Tabbing does not work. This is really important. For example the Google Play store on ChromeOS allows you to use TAB key to jump down and across lists, and then ESC to back up out of lists or all the way backwards in navigation. It makes it much more usable.
  • everything works !!

F-Droid inclusion

Hi @roughike

Since this app is Apache v2 licensed, are you considering the fact to add it to F-Droid? There is a strong community behind.

You can find some documentation here.

Otherwise, if you don't want to work on the inclusion of this app by yourself, would it be ok for you if someone else do it for you?

Mobile - Review UI/UX

Hello people.
I wanted to compile here some suggestions on the part of UI (user interface) and UX (user experience). My experience may be of a UI/UX junior designer, with some projects like this, but it has liked your app for being in Flutter (which I am studying) and open source <3.
In case you accept some or all of the suggestions, I can open separate issues for each one.
I will only present the problems and if they are admitted, I can propose solutions in the issues or in the discussion that may arise. Follow the thread.

  1. When pressed in the toolbar, the local selection menu opens. It seems a bit confusing because you press a button and another menu opens. Img 1
    ezgif com-video-to-gif (1)

  2. There is in the list of shows in the tab showtimes, the option to perform a long press on an item, but when this happens, the contrast gets worse. Img 2
    Screenshot_20190413-191956_opt

  3. The yellow ticket icon on each item on the showtime list may not clearly represent the action to go to the website to buy the ticket. Img 3
    Screenshot_20190413-194617_opt jpg

  4. In the details of some movies to be released, sometimes it appears 0 min (probably not yet found the information). Instead, it could show a stroke or something else that does not indicate a duration value. Img 4
    Screenshot_20190413-194859_opt

  5. In the details of some movies to be released, there are no images in the gallery and a large blank part is presented in the detail of the movie. Img 5
    Screenshot_20190413-194751_opt

  6. In the details of some movies to be released, the icons of actors and gallery images are objects that seem clickable. Img 6 (does not have)

  7. When accessing the details of the movie by the tab 'now in theaters', there is no option to buy the ticket. As it is very likely that the user enters first there (and not in showtimes) because it is the first page that loads, the user may feel disoriented or frustrated of not having that option. Img 7.1 and img 7.2
    Screenshot_20190413-195506_opt
    Screenshot_20190415-113023_opt

  8. In the images with white colors in the details of the movie, the return arrow may not be seen clearly (contrast). Img 8
    Screenshot_20190413-195506_opt jpg

  9. When the storyline expands, the screen is not focused to see everything written. Img 9
    ezgif com-video-to-gif

  10. Lack of space in the tabs of the bottom bar and an animation when the tab is pressed. Img 10
    Screenshot_20190413-194617_opt (1)

  11. Accessibility: The augmented text x2 is applied. Search field description on the toolbar. Img 11
    Screenshot_20190413-212309_opt

  12. Accessibility: The augmented text x2 is applied. Description of the film in the movie details.Img 12
    Screenshot_20190413-212131_opt

  13. Accessibility: The augmented text x2 is applied. Bottom overflow in showtimes tab.Img 13
    Screenshot_20190413-212200_opt

  14. Accessibility: The augmented text x2 is applied. Bottom overflow in details of the movie.Img 14
    Screenshot_20190413-212209_opt

  15. The user may not understand that it is the end time of the session in each step of the showtime tab because it is not explained anywhere. Img 15
    14

  16. The separation that differentiates the selection buttons of the day and the list of movies (showtime), is not perceptible. Here it may be due to a contrast problem in the two colors used.Img 16
    16

Tags!

How about adding some tags to the project? Like Flutter, Dartlang, android, ios etc...
(Thibaud made me do this to get a t-shirt)

i have a question

Please, i want know how to compile flutter application on mac os. I have followed many tutorials,
i have mojave with xcode, pods, etc
i could be install android studio and generate app for ios??

Can you help me, for you experience?

Best Regards

Localization support

Currently, every message and label is hardcoded, and the app works in English only. Localize the app the support both English and Finnish.

Tasklist:

  • Extract all hardcoded strings into a localization file
  • Introduce English and Finnish localizations
  • Modify the Finnkino API client to drop the en from the URLs when the detected language is Finnish

Screen Rotation

Anybody has ever tried to implement screen rotation here?
I have tried :

  SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeRight,
      DeviceOrientation.landscapeLeft,
    ]);

but it doesn't work.
Is the app locked in a portrait mode?

webdev could not run for this project.

webdev could not run for this project.
This version of webdev does not support the build_daemon protocol used by your version of build_runner.
Please add a dev dependency on build_daemon with constraint: >=1.0.0 <2.0.0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.