A Dart EPUB parser built from the ground up, and designed to support a variety of use cases and custom

Related tags

Templates shu_epub
Overview

shu_epub

codecov

Open in Gitpod

A Dart EPUB parser built from the ground up, and designed to support a variety of use cases and custom implementations such as on-device caching and serving content from a server. This package is current WIP and is NOT yet usuable.

Motivation

This package enables the application to only have the files needed from the EPUB file loaded into memory, instead of the entire EPUB file being required in memory like in other popular epub packages.

Features

  • EpubControllerBase - An abstract class intended to be extended to enable flexibility inspired by Flutter's Widget class
    • Enables use cases such asserving epubs from the web or caching epubs on the file system
  • EpubArchiveController - Extends EpubControllerBase, reads in entire bytes of an .epub file for reading and independent from dart:io
  • EpubArchiveIOController - Extends EpubControllerBase, uses file reference to the .epub file to only read in files when required. However, this cannot take advantage of the system cache.
  • (flutter_shu_epub) EpubCacheController - Extracts ePub contents onto an Android or iOS device and caches the location, allowing for the reader to only load the needed files into memory

and more...

Progress and Plans

shu_epub (this package)

  • Models
  • Reader Controllers
    • EpubContainerReaderController
    • EpubPackageReaderController
    • EpubNavigationReaderController
    • EpubDetailsReaderController
      • Combines the container, package, and navigation into one class
  • Publication/Content Controller
  • EpubControllerBase (abstract)
    • Future getFilePaths - Method to get filepaths to all files in the epub
    • Future getFileBytes - Method to get bytes of file from the filepath
    • getEpubDetails
    • others tbd...
  • EpubArchiveController extends EpubController
    • Given the loaded .epub file bytes
    • Overrides getFilePaths and getFileBytes to use Archive/ArchiveFile
  • EpubArchiveIOController extends EpubController
    • Given a file reference/path
    • Overrides getFilePaths and getFileBytes to use filestream Archive/ArchiveFile
  • (In example.dart) EpubExtractedController extends EpubController
    • Given a directory reference/path to the root folder of the extracted epub
    • Overrides getFilePaths and getFileBytes to use async dart:io
    • Due to it requiring dart:io, it is not included in this package
  • Function/Class to declare supported epub content media types
    • Default is application/xhtml+xml
    • Old epubs may use the deprecated application/x-dtbook+xml and text/x-eob1-document
  • EpubBook class to simplify access to Epub content and metadata
    • EpubDetails (contains EpubContainer, EpubPackage, and EpubNavigation)
    • EpubFiles (all files listed in manifest)
      • Don't include items that are Out-Of-Line XML Islands
    • EpubReadingOrder (spine)
      • List of EpubFile (should all be xhtml files?)
      • Files are from manifest items included in the spine, in the same order as listed in the spine. Automatically uses the fallback file if required-modules is specified, or if the media-type is not included in the supported mediaTypes configuration.
    • EpubTableOfContents (ncx)
      • Navigation Metadata
      • Navigation Title
      • Navigation Author
      • Navigation Points (navMap)
        • File
        • CFI Location
      • Pages Optional (pageList)
      • Other Navigation Lists Optional (navList)
  • CFI Generator

flutter_shu_epub (tenative)

  • Uses Models and Parsers from dart_epub
  • Platform specific implementation to handle caching, only loads the files it needs into memory
  • Controllers
    • EpubCacheController extends EpubController
      • Reads from a .epub file extracted onto the file system, so only the files needed are loaded into memory
      • Overrides getFilePaths and getFileBytes to use dart:io File
    • EpubCacheManagerSingleton
      • Function to read an .epub file into memory and cache it on local storage for quick access later, with an optional id. The id is returned and it should be saved persistently with a package such as Hive
      • Local Database for each cached EPUB with EpubCache, which includes information about the EPUB and the EpubCacheController associated with it
      • Clear cache
      • Delete epub from cache
      • Get all cached epub information
  • Models
    • EpubCache
      • uid, can be specified
      • epub name
      • original filename
      • cache path
      • epubCacheController
  • Widgets
    • Table of Contents Panel (Side panel, bottom sheet, or whole/half page)
    • Contents View (Vertical scrolling or paged)
      • Loading view while reading from .xhtml file
      • How HTML+CSS is rendered is TBD
      • Text selection
        • Add buttons to popup
        • Custom text selection popup builder
      • Text highlighting (maybe use CFIs?)
      • Option to override font, font size, line spacing
      • Go to CFI location (scroll or page)
      • Go to CFI History
      • Optional page between chapters
      • Page turn transitions
      • Bookmark support (through CFIs)
      • Searchable
    • Epub Title
    • Pictures ListView
    • Search Panel/Page
      • Search current chapter or all chapters

Testing

Run tests with the following command

dart test

Test Coverage

Generate test coverage by running the following commands

  1. dart pub global activate coverage
  2. dart test --coverage="coverage"
  3. dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage.lcov --packages=.packages --report-on=lib

Resources

Comments
  • flutter_shu_epub

    flutter_shu_epub

    Hello,Have you completed the project flutter_shu_epub you mentioned in the Readme? Will this project be open source? I am also making the function of epub reader, how to implement horizontal paging of text or Image on the display book, do you have any suggestions?

    opened by yoni1988 6
  • Bump archive from 3.1.11 to 3.3.0

    Bump archive from 3.1.11 to 3.3.0

    Bumps archive from 3.1.11 to 3.3.0.

    Changelog

    Sourced from archive's changelog.

    3.3.0 - March 25, 2022

    • IO encoders (ZipFileEncoder, TarFileEncoder), will now include directories and empty directories.
    • Fix for ZipEncoder file lastModTime.
    • Fix for ArchiveFile.string.
    • Add PAX format to tar decoder.
    • Make more file operations async.

    3.2.2 - March 09, 2022

    • Re-add List content data for ArchiveFile.
    • Add String and TypedData (Int32List, Float32List, etc) content data for ArchiveFile.

    3.2.1 - February 17, 2022

    • Added buffer to OutputFileStream to improve performance by reducing the number of file writes.

    3.2.0 - February 12, 2022

    • For non-web applications, use native 'inflate' decompression when decompressing zip files.
    • Add asyncWrite option to extractArchiveToDisk and extractFileToDisk, moving file write operations to be async.
    • ArchiveFile.writeContent will release its memory after the data has been written, reducing overall memory usage.
    • Add clear method to ArchiveFile, clearing any decompressed data memory it's storing.
    Commits
    • dc32314 Update to 3.3.0
    • e87ebbd Fix tests
    • d96b1de Ensure directories are added to archives; upating file io operations to be async
    • a764be1 Add non-ascii ArchiveFile name to test
    • 697b530 Fix test failure from sync file delete.
    • 5307683 Update doc comments for ArchiveFile
    • 2006c07 ZipEncoder: Use ArchiveFile.lastModTime if the archive modification time wasn...
    • 278defd Make sure ArchiveFile.string has the correct size
    • 684aa6c Merge pull request #201 from grundid/master
    • 73cdf6b Merge remote-tracking branch 'duncan/master'
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 4
  • Bump xml from 5.3.1 to 6.0.1

    Bump xml from 5.3.1 to 6.0.1

    Bumps xml from 5.3.1 to 6.0.1.

    Changelog

    Sourced from xml's changelog.

    Changelog

    6.0.0

    • Significantly improve parsing performance between 10 and 30%.
    • Improved error handling to include more information, such as tag names and location in the parsed source.
    • Use the pull-based parser for all underlying parsing operations:
      • Reduce size of library by removing duplicated parsing and validation functionality.
      • Fix entity decoding if the entity spawns multiple chunks.
    • Cleanup dynamic calls and type declarations:
      • Avoid all dynamic calls across the library (thanks to srawlins).
      • Remove deprecated XmlTransformer as it requires dynamic calls in the XmlVisitor.
      • Cleanup the dynamic typing of XmlVisitor.
    • XmlBuilder keeps keeps correct nesting, even in case of exceptions.
    • Remove deprecated code:
      • parse(String input): use XmlDocument.parse(String input) or XmlDocumentFragment.parse(String input) instead.
      • XmlBuilder.build(): use XmlBuilder.buildDocument() or XmlBuilder.buildFragment() instead.
      • XmlProductionDefinition, XmlGrammarDefinition, and XmlParserDefinition.
      • XmlNormalizer.defaultInstance: use const XmlNormalizer() instead.

    5.4.0

    • Dart 2.16 requirement.
    • Update to PetitParser 5.0.
    • Escape control characters (thanks to rspilker).
    • Add a predicate to pretty printer to insert a space character before self-closing elements (thanks to rspilker).
    • Add predicates to normalizer to trim leading and trailing whitespaces, as well as collapse consecutive whitespaces.
    • Expose qualifiedName, localName, namespacePrefix and namespaceUri for convenience on the named nodes.

    5.3.0

    • Dart 2.15 requirement.
    • Upgrade to PetitParser 4.3.

    5.2.0

    • A series of read-only accessors that simplify navigating the XML DOM with XmlElements:
      • Add XmlNode.childElements.
      • Add XmlNode.siblings and XmlNode.siblingElements.
      • Add XmlNode.previousElementSibling and XmlNode.nextElementSibling.
      • Add XmlNode.ancestorElements, XmlNode.precedingElements, XmlNode.descendantElements, and XmlNode.followingElements.

    5.1.1

    • Fix printing of Exceptions.
    • Fix parsing of DOCTYPE tags.

    5.1.0

    • Upgrade to PetitParser 4.1.0.

    ... (truncated)

    Commits
    • 8ef9349 Fix the changelog text
    • 8af988f Ready for 6.0.0
    • 9195251 Some minor fixes to the tutorial.
    • f4c84cb Fix some more unicode edge cases with character entities.
    • 043f989 Fix parsing of broken entity references (invalid numbers).
    • 700688f Add ignored data files.
    • b2c5b41 Update CHANGELOG.md
    • 87c3f37 Inline C0 and C1 characters into character class for faster encoding.
    • c9e98f2 Simplify and fix most of the chunked streaming tests.
    • 7829586 Add #140 to CHANGELOG.md
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • Bump test from 1.20.1 to 1.21.1

    Bump test from 1.20.1 to 1.21.1

    Bumps test from 1.20.1 to 1.21.1.

    Commits
    • d54846b Determine encoding of source files used for coverage (#1691)
    • af8a9b2 add pubspec 'repository' fields to the pubspecs (#1690)
    • e0d2645 drop new constants from test_api and usages from test_core, re-publish test_c...
    • ba2c819 allow analyzer 4.x, and prepare to publish (#1687)
    • 52d4ef7 docs(test): fix broken links for 'Stream Matchers' (#1684)
    • 9c6dded initial implementation of a github actions reporter (#1678)
    • 8e8150a Fix an upcoming recommended lint (#1680)
    • 3f8983c update to package lints 2.0 (#1679)
    • b6aba55 Add some retry around browser launching (#1676)
    • 2afbff8 migrate back to ConstructorName.type from ConstructorName.type2 (#1673)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • Bump archive from 3.3.0 to 3.3.1

    Bump archive from 3.3.0 to 3.3.1

    Bumps archive from 3.3.0 to 3.3.1.

    Changelog

    Sourced from archive's changelog.

    3.3.1 - July 19, 2022

    • Fix for Inflate crashing on some compressed files.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump test from 1.21.1 to 1.21.3

    Bump test from 1.21.1 to 1.21.3

    Bumps test from 1.21.1 to 1.21.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump test from 1.21.1 to 1.21.2

    Bump test from 1.21.1 to 1.21.2

    Bumps test from 1.21.1 to 1.21.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump path from 1.8.1 to 1.8.2

    Bump path from 1.8.1 to 1.8.2

    Bumps path from 1.8.1 to 1.8.2.

    Changelog

    Sourced from path's changelog.

    1.8.2

    • Enable the avoid_dynamic_calls lint.
    • Popuate the pubspec repository field.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump meta from 1.7.0 to 1.8.0

    Bump meta from 1.7.0 to 1.8.0

    Bumps meta from 1.7.0 to 1.8.0.

    Changelog

    Sourced from meta's changelog.

    1.8.0 - 2014-11-28

    • dart:collection: SplayTree added the toSet function.

    • dart:convert: The JsonUtf8Encoder class was added.

    • dart:core:

      • The IndexError class was added for errors caused by an index being outside its expected range.

      • The new RangeError.index constructor was added. It forwards to new IndexError.

      • RangeError added three new properties. invalidProperty is the value that caused the error, and start and end are the minimum and maximum values that the value is allowed to assume.

      • new RangeError.value and new RangeError.range added an optional message argument.

      • The new String.fromCharCodes constructor added optional start and end arguments.

    • dart:io:

      • Support was added for the Application-Layer Protocol Negotiation extension to the TLS protocol for both the client and server.

      • SecureSocket.connect, SecureServerSocket.bind, RawSecureSocket.connect, RawSecureSocket.secure, RawSecureSocket.secureServer, and RawSecureServerSocket.bind added a supportedProtocols named argument for protocol negotiation.

      • RawSecureServerSocket added a supportedProtocols field.

      • RawSecureSocket and SecureSocket added a selectedProtocol field which contains the protocol selected during protocol negotiation.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Bump test from 1.21.4 to 1.21.5

    Bump test from 1.21.4 to 1.21.5

    Bumps test from 1.21.4 to 1.21.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump equatable from 2.0.3 to 2.0.5

    Bump equatable from 2.0.3 to 2.0.5

    Bumps equatable from 2.0.3 to 2.0.5.

    Release notes

    Sourced from equatable's releases.

    v2.0.5

    • fix: resolves T not a subtype of type 'Comparable<dynamic>' when computing hashCode

    v2.0.4

    • fix: use SplayTreeSet to resolve inconsistent hashCode for properties of type Set (#142)
    Changelog

    Sourced from equatable's changelog.

    2.0.5

    • fix: resolves T not a subtype of type 'Comparable<dynamic>' when computing hashCode

    2.0.4

    • fix: use SplayTreeSet to resolve inconsistent hashCode for properties of type Set (#142)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Content Document Utilities

    Content Document Utilities

    I am unsure what exactly this will look like, but some utilities should be provided for the xhtml documents. Files included in the head tag should be provided with the content document.

    This includes:

    • XPGT (page template)
    • HTML5/EPUB 3 constructions (not entirely sure what this is, but it is mentioned in the above website)
    • Core Media Types + others with fallbacks
    enhancement 
    opened by getBoolean 0
  • Plans for flutter_shu_epub

    Plans for flutter_shu_epub

    Check PROTOTYPE for the current proposal. It is still in the planning stage and will change

    old plans

    The below are tentative plans for Flutter utilities and widgets.

    - Platform specific implementation to handle caching, only loads the
        files it needs into memory
      - Controllers
        - **EpubCacheController** extends **EpubController**
          - Reads from a `.epub` file extracted onto the file system, so
            only the files needed are loaded into memory
          - Overrides getFilePaths and getFileBytes to use dart:io `File`
        - **EpubCacheManagerSingleton**
          - Function to read an `.epub` file into memory and
            cache it on local storage for quick access later, with an optional
            id. The id is returned and it should be saved persistently with
            a package such as Hive
          - Local Database for each cached EPUB with **EpubCache**, which includes
            information about the EPUB and the **EpubCacheController** associated
            with it
          - Clear cache
          - Delete epub from cache
          - Get all cached epub information
      - Models
        - **EpubCache**
          - uid, can be specified
          - epub name
          - original filename
          - cache path
          - epubCacheController
      - Widgets
        - Table of Contents Panel (Side panel, bottom sheet, or whole/half page)
        - Contents View (Vertical scrolling or paged)
          - Loading view while reading from `.xhtml` file
          - How HTML+CSS is rendered is TBD
          - Text selection
            - Add buttons to popup
            - Custom text selection popup builder
          - Text highlighting (maybe use CFIs?)
          - Option to override font, font size, line spacing
          - Go to CFI location (scroll or page)
          - Go to CFI History
          - Optional page between chapters
          - Page turn transitions
          - Bookmark support (through CFIs)
          - Searchable
        - Epub Title
        - Pictures ListView
        - Search Panel/Page
          - Search current chapter or all chapters
    
    enhancement 
    opened by getBoolean 0
  • Shu Epub Progress

    Shu Epub Progress

    This issue is to track the progress of shu_epub

    • [ ] Finish planning API (See
    • [ ] Implement class diagram
    • [ ] Abstract Book class to support other eBook types (possibly extract to another package shu_core)
    • [ ] HTML utilities
    old plans
    - [x] Models
    - [x] Reader Controllers
      - [x] EpubContainerReaderController
      - [x] EpubPackageReaderController
        - [ ] Support Epub 2 [Out-Of-Line XML Islands](http://idpf.org/epub/20/spec/OPF_2.0.1_draft.htm#Section2.3.1.2), removed in Epub 3
      - [x] EpubNavigationReaderController
      - [x] EpubDetailsReaderController
        - Combines the container, package, and navigation into one class
    - [ ] Publication/Content Controller
    - [ ] **EpubControllerBase** (abstract)
      - [x] Future getFilePaths - Method to get filepaths to all files in the epub
      - [x] Future getFileBytes - Method to get bytes of file from the filepath
      - [x] getEpubDetails
      - others tbd...
    - [x] **EpubArchiveController** extends **EpubController**
      - [x] Given the loaded `.epub` file bytes
      - [x] Overrides getFilePaths and getFileBytes to use `Archive`/`ArchiveFile`
    - [x] **EpubArchiveIOController** extends **EpubController**
      - [x] Given a file reference/path
      - [x] Overrides getFilePaths and getFileBytes to use filestream `Archive`/`ArchiveFile`
    - [x] (In `example.dart`) EpubExtractedController extends **EpubController**
      - [x] Given a directory reference/path to the root folder of the extracted epub
      - [x] Overrides getFilePaths and getFileBytes to use async `dart:io`
      - Due to it requiring `dart:io`, it is not included in this package
    - [ ] Function/Class to declare supported epub content media types
      - Default is `application/xhtml+xml`
      - Old epubs may use the deprecated `application/x-dtbook+xml` and `text/x-eob1-document`
    - [ ] EpubBook class to simplify access to Epub content and metadata
      - [x] EpubDetails (contains EpubContainer, EpubPackage, and EpubNavigation)
      - [ ] EpubFiles (all files listed in manifest)
        - [ ] Don't include items that are Out-Of-Line XML Islands
      - [ ] EpubReadingOrder (spine)
        - [ ] List of EpubFile (should all be xhtml files?)
        - [ ] Files are from manifest items included in the spine, in the same order as listed in the spine.
        Automatically uses the fallback file if required-modules is specified, or if the media-type is not
        included in the supported mediaTypes configuration.
      - [ ] EpubTableOfContents (ncx)
        - [ ] Navigation Metadata
        - [ ] Navigation Title
        - [ ] Navigation Author
        - [ ] Navigation Points (navMap)
          - [ ] File
          - [ ] CFI Location
        - [ ] Pages *Optional* (pageList)
        - [ ] Other Navigation Lists *Optional* (navList)
    - [ ] CFI Generator
    
    enhancement 
    opened by getBoolean 0
Owner
getBoolean
getBoolean
Tello-Dart - A testing ground for the Tello drone's socket API in dart

This packages provides a Dart interface to Ryze Tello drones. Getting started Ma

null 2 Jul 27, 2022
A fork/modification of flutter epub view package

epub_view Pure flutter widget for view EPUB documents on all platforms. Based on epub package. Render with flutter widgets (not native view) on any pl

Geeky Geeky 0 Dec 28, 2021
A comprehensive guide on learning how to code cross platform mobile applications with the Flutter framework, from the ground up.

✳️ The Ultimate Guide to App Development with Flutter ✳️ A complete and comprehensive guide to learning Flutter with explanations, screenshots, tips,

Anthony 243 Jan 1, 2023
This repository was created to provide the basics of the Dart programming language and Its use cases.

dart-exercises A collection of source code of the Dart Programming language. How does this repository works? Clone / Fork this repository to make your

Technosoft Labs 2 Oct 28, 2021
Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with little or no change.

Flutter Multi-platform sample Flutter Multi-platform allows developers to unleash their app to run on the wide variety of different platforms with lit

MindInventory 22 Dec 31, 2022
Full screen menu for Flutter apps to give a user a broad variety of variants in beautiful way

Full screen menu for Flutter apps to give a user a broad variety of variants in beautiful way

Yako 94 Dec 14, 2022
Magpie-fly is a component library produced by 58 Group, which encapsulates a variety of common components to meet the needs of developers

[toc] magpie_fly Magpie-fly 是58集体出品组件库,封装了多种常用组件,以满足开发者需求。(Magpie-fly is a component library produced by 58 Group, which encapsulates a variety of com

Wuba 40 Mar 18, 2022
Flutter custom carousel slider - A carousel slider widget,support custom decoration suitable for news and blog

flutter_custom_carousel_slider A carousel slider Flutter widget, supports custom

Emre 40 Dec 29, 2022
An intuitive Token Parser that includes grammar definition, tokenization, parsing, syntax error and debugging. Implementation based on Lexical Analysis for Dart.

Token Parser An intuitive Token Parser that includes syntax/grammar definition, tokenization and parsing. Implementation based on Lexical Analysis. Re

JUST A SNIPER ツ 2 Dec 15, 2022
Receipt parser application written in dart.

Receipt manager You can find pre-compiled releases on the Github release page or in the FDROID repository. All the needed info about how to use the re

null 132 Dec 29, 2022
Dart duration iso parser - Package to parse duration from ISO 8601 string

duration_iso_parser Package for parsing ISO 8601 durations string to the Duratio

Innim 1 Jan 18, 2022
Fan-made, handmade, recursive-descent parser for the Dart programming language.

Very Unofficial Parser Fan-made, handmade, recursive-descent parser for the Dart programming language. Although this parser strives to parse the langu

Joanna May 64 Nov 21, 2022
Response Parser makes it easier to parse data and error response from server.

Response Parser makes it easier to parse data and error response from server. Getting started Do you want to write this pretty functions... Future<Eit

Qyre AB 4 Nov 5, 2022
SearchBar widget to handle most of search cases

flappy_search_bar A SearchBar widget handling most of search cases. Usage To use this plugin, add flappy_search_bar as a dependency in your pubspec.ya

Smart&Soft 171 Dec 2, 2022
A customizable carousel slider for Flutter. Supports infinite sliding, custom indicators, and custom animations with many pre-built indicators and animations.

Flutter Carousel Slider A customizable carousel slider for flutter Screenshots Installing dependencies: flutter_carousel_slider: ^1.0.8 Demo Demo a

Udara Wanasinghe 23 Nov 6, 2022
A customizable carousel slider widget in Flutter which supports inifinte scrolling, auto scrolling, custom child widget, custom animations and built-in indicators.

flutter_carousel_widget A customizable carousel slider widget in Flutter. Features Infinite Scroll Custom Child Widget Auto Play Horizontal and Vertic

NIKHIL RAJPUT 7 Nov 26, 2022
FT-Custom-Widget - A Custom Widget Built With Flutter

Custom Widget Watch it on YouTube Product Screen Sample when you implement compl

Firgia 5 Mar 29, 2022
A WordPress API client for dart with support for WooCommerce and custom namespaces.

WordPress REST API client for Dart | Flutter Description A WordPress REST API client for dart with support for WooCommerce and custom namespaces/endpo

DHM Group 73 Nov 26, 2022
best flutter / dart practices + Custom Painter + Sliver App Bar + Custom Scrollview

Weekly Budget Flutter App A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get yo

Mohamed Awnallah 4 Oct 21, 2021