A beautiful xkcd viewer app written with Flutter

Overview

xkcdViewer

Codemagic build status Stargazers Forks Issues License

xkcdViewer is a simple comic viewer for the infamous xkcd webcomic built with Flutter 🐦 and ScopedModel for state management.

Features

πŸ‘€ Get the latest xkcd comic

πŸ“– Randomly browse comics

πŸ”– Add comics to your favorites

πŸ’¬ Swipe up for alt text

πŸ“² Share the fun

🌍 Read the explanation on explainxkcd

πŸ“Ά Data saver option

Get it on Google Play

Google Play and the Google Play logo are trademarks of Google LLC.

The comics displayed in this app are licensed under a Creative Commons Attribution-NonCommercial 2.5 License. Visit xkcd for additional information.

Contributors

Contributions are always welcome! πŸ‘

Comments
  • Zoom is broken in new update

    Zoom is broken in new update

    Describe the bug Zoom is broken.

    When trying to pan the comic, it keeps swiping

    To Reproduce Steps to reproduce the behavior:

    1. View comic
    2. Zoom
    3. Try pan the comic
    4. It just swipes left or right

    Expected behavior Expected I could pan the image

    Smartphone (please complete the following information):

    • Device: OnePlus 5T
    • OS: Latest OOS
    • Version: Latest versoin
    bug 
    opened by dasmikko 6
  • Replace Shared Preferences with Hive

    Replace Shared Preferences with Hive

    closes #28

    • Added service locator(GetIt)
    • Added a PersistenceService as an abstract class
    • Added a HivePersistenceService class that implements the PersistenceService abstract class
    • Removed the Preferences class and replaced all of it's references with final PersistenceService prefs = sl<PersistenceService>();

    To-do:

    • [x] Replace dynamic theme with a hive alternative
    • [x] Save favourite comics to hive
    opened by britannio 5
  • Downloading of images failing

    Downloading of images failing

    The simple permissions plugin causes some exceptions which prevent downloads. Fix this by reimplementing it (or using another approach) and optionally add a simple directory picker to let the user choose the download target. This directory has to be editable within the app's settings.

    bug hacktoberfest 
    opened by wakahuula 5
  • Replace saving to shared prefs

    Replace saving to shared prefs

    Switch from shared preferences to SQLite or Hive. Adding a comic to the favorites should then also store the image, title, alt text and URL for sharing.

    enhancement hacktoberfest 
    opened by wakahuula 3
  • Error With Override

    Error With Override

    Same issue as https://github.com/Baseflow/flutter_cached_network_image/issues/270

    Compiler message: ../../../DEV/flutter/.pub-cache/hosted/pub.dartlang.org/cached_network_image-1.1.3/lib/src/cached_network_image_provider.dart:42:24: Error: The method 'CachedNetworkImageProvider.load' has fewer positional arguments than those of overridden method 'ImageProvider.load'. ImageStreamCompleter load(CachedNetworkImageProvider key) { ^ ../../../DEV/flutter/packages/flutter/lib/src/painting/image_provider.dart:574:24: Context: This is the overridden method ('load'). ImageStreamCompleter load(T key, DecoderCallback decode); ^

    bug 
    opened by JohnMeyerhoff 2
  • Update README.md

    Update README.md

    Hi,

    This small PR adds a button to get your app via the IzzyOnDroid open source app repo in a F-Droid client. (It also put the Google Play button under a commentary, since it's offline)

    It will help people without Google Play to find and use your app, as well as helping them to keep it updated.

    Since the apk provided by IzzyOnDroid is simply taken from the Release Section of this repo, please never forget to attach your signed apk to the release when tagging a new version, so that Izzy can take it and make it available via a F-Droid client to your users !

    opened by Poussinou 1
  • Image downloading feature added.

    Image downloading feature added.

    Image downloading feature is added and working smooth and fine now,If any error persists Kindly run flutter doctor and flutter clean.Thanks @wakahuula

    opened by Himanshuranjan30 1
  • Browse comics

    Browse comics

    Some users requested a browse feature which would probably just load all comics (in a list like the favorites page?). Additionally this view should have options for searching for comics.

    opened by wakahuula 1
  • Fix work with localizations

    Fix work with localizations

    • Include all locale related files to assets (fix missing ru-RU.json file)
    • Fix loading of fallback localization (because rootBundle.loadString throw an error when file not found)
    opened by hemirime 1
  • Fix NoSuchMethodError when tap on share button

    Fix NoSuchMethodError when tap on share button

    ══║ EXCEPTION CAUGHT BY GESTURE β•žβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
    The following NoSuchMethodError was thrown while handling a gesture:
    The getter 'num' was called on null.
    Receiver: null
    Tried calling: num
    
    When the exception was thrown, this was the stack:
    #0   Object.noSuchMethod (dart:core/runtime/libobject_patch.dart:50:5)
    #1   ComicModel.shareComic (package:xkcd/models/comic_model.dart:62:52)
    #2   HomePage._buildAppBar.<anonymous closure> (package:xkcd/pages/home_page.dart:68:19)
    

    Using ScopedModel.of instead of creating second instance of model class

    opened by hemirime 1
  • Theming support

    Theming support

    The app should come with a dark theme, which automatically inverts the images (when no color is detected). A simple primary/accent color picker would be nice too.

    Add an automatic night mode if possible.

    enhancement hacktoberfest 
    opened by wakahuula 1
  • Unable to build with Flutter 2.2.2

    Unable to build with Flutter 2.2.2

    I'm unable to build the application on Flutter version 2.2.2. This is my first time working with Flutter, so I could be doing something wrong.

    flutter pub get isn't able to resolve dependencies due to a conflict in dependency requirements between image and integration_test:

    Running "flutter pub get" in xkcdviewer_...
    Because every version of integration_test from sdk depends on archive 3.1.2 and image 2.1.19 depends on archive ^2.0.0, integration_test from sdk is incompatible with image 2.1.19.
    
    And because no versions of image match >2.1.19 <3.0.0, integration_test from sdk is incompatible with image ^2.1.19.
    
    So, because xkcd depends on both image ^2.1.19 and integration_test any from sdk, version solving failed.
    pub get failed (1; So, because xkcd depends on both image ^2.1.19 and integration_test any from sdk, version solving
    failed.)
    

    Upgrading image to the latest version, 3.0.2 seems to resolve this, but there are tons of build errors after that: https://hastebin.com/raw/onaciwixut

    flutter pub upgrade seems to fix everything, except an error in dynamic_theme:

    Running Gradle task 'assembleRelease'...
    Picked up _JAVA_OPTIONS: -Djava.util.prefs.userRoot="/home/dophin2009/.config"/java
    
    ../../../.cache/flutter/pub-cache/hosted/pub.dartlang.org/dynamic_theme-1.0.1/lib/dynamic_theme.dart:25:46: Error: Method not found: 'TypeMatcher'.
    
        return context.ancestorStateOfType(const TypeMatcher<DynamicThemeState>());
    
                                                 ^^^^^^^^^^^
    
    ../../../.cache/flutter/pub-cache/hosted/pub.dartlang.org/dynamic_theme-1.0.1/lib/dynamic_theme.dart:25:20: Error: The method 'ancestorStateOfType' isn't defined for the class 'BuildContext'.
    
     - 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('/opt/flutter/packages/flutter/lib/src/widgets/framework.dart').
    
    Try correcting the name to the name of an existing method, or defining a method named 'ancestorStateOfType'.
    
        return context.ancestorStateOfType(const TypeMatcher<DynamicThemeState>());
    
                       ^^^^^^^^^^^^^^^^^^^
    
    
    
    
    
    FAILURE: Build failed with an exception.
    
    
    
    * Where:
    
    Script '/opt/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 1035
    
    
    
    * What went wrong:
    
    Execution failed for task ':app:compileFlutterBuildRelease'.
    
    > Process 'command '/opt/flutter/bin/flutter'' finished with non-zero exit value 1
    
    
    
    * Try:
    
    Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    
    
    * Get more help at https://help.gradle.org
    
    
    
    BUILD FAILED in 31s
    Running Gradle task 'assembleRelease'...                           32.2s
    Gradle task assembleRelease failed with exit code 1
    

    This seems to be related to dynamic_theme #52? There is an unmerged PR that addresses this issue.

    opened by mirryi 2
  • Add a list view as an alternative browsing method

    Add a list view as an alternative browsing method

    Is your feature request related to a problem? Please describe. Finding comics or quickly browsing through may be a hassle if you just want to find a specific comic.

    Describe the solution you'd like A separate list view reachable through bottom tabs (?) which lists every comic in a reversed chronological list.

    enhancement good first issue hacktoberfest 
    opened by wakahuula 0
  • Add a migration path for favorites from SharedPreferences to Hive or a similar DB

    Add a migration path for favorites from SharedPreferences to Hive or a similar DB

    We have to implement a migration path for legacy users before publishing a new version of the app. Previously comic URLs were saved as favorites through SharedPreferences.

    bug enhancement 
    opened by wakahuula 0
  • jump to comic

    jump to comic

    Is your feature request related to a problem? Please describe. Sometimes, using the app I'd like to be able to open a specific comic, either by typing in the comic number/name like on the explainxkcd wiki or by searching for it in google then opening using the app.

    Describe the solution you'd like I think a "search" or "jump to comic" feature in the app would work, as well as support for opening xkcd links.

    enhancement 
    opened by aekaisato 1
  • Localization

    Localization

    The currently has localizations for en-US and de-DE.

    Localizations must be added as a json file under /assets/locale and retain the order of the en.json file. Supported locales have to be added in main.dart and app_localizations_delegate.dart.

    enhancement help wanted good first issue hacktoberfest 
    opened by wakahuula 5
Releases(1.3.0)
  • 1.3.0(Feb 15, 2019)

    Changes since 1.1.0

    Improved

    • Improved UI (layouts, colors) in some places
    • Some under the hood performance improvements

    New

    • Favorites can now be downloaded and shared
    • Previous/next navigation through buttons due to popular demand
    • Swipe left/right to load the previous/next comic
    Source code(tar.gz)
    Source code(zip)
    app-release.apk(7.15 MB)
  • 1.1.0(Dec 6, 2018)

  • 1.0.2(Oct 17, 2018)

  • v1.0.1(Oct 14, 2018)

    This is the first public release! The app can also be found at Google Play.

    Improved

    • Explanations are opened in an in-app browser instead of externally
    • Delete favorites is clearer (buttons on the right)
    • Clear favorites in settings didn't do anything
    • "Top app bar" was transparent and overlapped with the comic after zoom

    New

    • Added a data saver option for low resolution images to save data
    • Bottom app bar can now be closed with a swipe
    Source code(tar.gz)
    Source code(zip)
    app-release.apk(6.01 MB)
Owner
Kosta Stoupas
Kosta Stoupas
Iridium-reader-widget - Plug and play reader widget allowing to easily integrate an Iridium viewer inside any app

Plug and play reader widget allowing to easily integrate an Iridium viewer insid

Mantano 15 Dec 31, 2022
A widget based on Flutter's new Interactive Viewer that makes picture pinch zoom, and return to its initial size and position when released.

pinch_zoom A widget based on Flutter's new Interactive Viewer that makes picture pinch zoom, and return to its initial size and position when released

Teun Kortekaas 36 Dec 30, 2022
Derpibooru viewer made in Flutter

Chryssibooru Derpibooru client made with Flutter Todo Themes? Wontdo Likes Favourites Comments Anything that requires the user to log in, since Derpib

null 13 Dec 21, 2022
Production-grade project developed during the Reso Coder Academy Flutter Bootcamp: It's a mobile Github repository viewer

RepoStar - GitHub Starred Repository Manager Production-grade project developed during the Reso Coder Academy Flutter Bootcamp. It's a mobile Github s

Kishan Dhankecha 4 Aug 18, 2022
An advanced story viewer for Flutter. Quite easy & Quite advanced

AdvStory ?? Quite simple & Quite advanced ?? Advanced Story viewer for Flutter. Supports image, video and custom stories. Full control over stories fo

Ertuğrul Yakın 21 Nov 18, 2022
Yet another booru viewer for Android

Yet another booru imageboards viewer for Android Download Preview Click Here Building You can build this app just like any other flutter app, for exam

Nauval Rizky 126 Dec 27, 2022
An Org Mode file viewer for iOS and Android

Orgro An Org Mode file viewer for iOS and Android See https://orgro.org for a demo video What is Org Mode? Imagine a plain-text markup language like M

Aaron Madlon-Kay 314 Jan 2, 2023
Sprite viewer / editor for the Game Boy Dev Kit

This is a graphic editor for GBDK inspired by GameBoyTileDesigner (GBTD) and GameBoyMapBuilder (GBMB). Online version game_boy_graphics_editor can run

DREVET Olivier 13 Dec 17, 2022
A beautiful, secure and simple authenticator app that supports multiple protocols and services. Free and open source. Written in Flutter and Dart.

OpenAuth A beautiful, secure and simple authenticator app that supports multiple protocols and services. Free and open source. Written in Flutter and

Isaiah Collins Abetong 31 Oct 5, 2022
Simple & Beautiful Note-taking app written in dart with flutter UI toolkit.

Keep Notes is a privacy oriented, secure , beautiful and fast note (s) taking application made in flutter. It supports various features like adding an

null 26 Dec 30, 2022
A new flutter package project which contains lots of beautiful alert dialog that will help you lot to create beautiful awesome alert box very quickly and easily.

A new flutter package project which contains lots of beautiful alert dialog that will help you lot to create beautiful awesome alert box very quickly and easily.

Karan Soni 8 Jan 8, 2022
Sibyl App written with Dart/Flutter. (My first experience in writing a real android app in flutter).

sibyl_app A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if thi

ALi.w 3 Feb 17, 2022
Flutter-Musive-app - Full-stack music player app written in flutter and dart using node.js music API

Musive Full-stack music player app is written in flutter and dart using node.js

Ansh rathod 69 Dec 28, 2022
BMI calculator app - BMI calculator app written with dart language using flutter

BMI_calculator_app This app is written with dart language using flutter framewor

Elham Madjidi 0 Feb 5, 2022
Car-Rental-App-UI-Flutter - Beautiful Car Rental App UI with support for dark mode. Created by Martin GogoΕ‚owicz.

Flutter Car Rental App UI with darkmode support Flutter 2.8.1 Null Safety Beautiful Car Rental App UI with support for dark mode. Created by Martin Go

Martin GogoΕ‚owicz 48 Dec 28, 2022
Shoes-Store-App-UI-Flutter - Beautiful Shoes Store App UI with support for dark and light mode

Flutter Shoes Store App UI with support for dark and light mode. Flutter 2.8.1 N

Jakub SobaΕ„ski 4 Nov 23, 2022
Simple & Beautiful App (Tool) made in Flutter to Download Media from YouTube. Based on the original SongTube App repository.

songtube A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if this

SongTube 11 Dec 18, 2022
Hotel-Booking-App-UI - Beautiful Hotel Booking App UI with support for dark and light mode

Flutter Hotel Booking App UI with support for dark and light mode. Flutter 2.8.1

Martin GogoΕ‚owicz 11 Nov 1, 2022
Mnt-ng-flutter - The Mnt NG app interface written in flutter

Mnt Ng Flutter Mnt NG application interface in flutter About This project is meant to be only the Mnt Ng interface, all the data exhibited here is fak

NG InformΓ‘tica 12 Dec 23, 2019