The simple Podcast playing app for Android & iOS, built with Dart & Flutter

Overview

Anytime Podcast Player

This is the official repository for the Anytime Podcast Player - the simple Podcast playing app for Android & iOS, built with Dart & Flutter.


screenshot1.png  screenshot2.png  screenshot3.png  screenshot3.png 

Getting Started

Anytime is currently at v1.1 and is built against Flutter 2.8+. View the project to see what is currently being worked on.

Testers

If you would like to help test Anytime please click the image below to head over to the Play Store, or Amazon App Store. You can download the current stable release or sign up to the Beta channel and help test current developments.

Get it on Google Play  Anytime Play Store Link Anytime App Store Link

I would really appreciate all feedback - positive and negative - as it both helps improve Anytime and prioritise new features. You can reach me at [email protected].

Building from source

If you do not already have the Flutter SDK installed, follow the instructions from the Flutter site here.

Fetch the latest from master:

git clone https://github.com/amugofjava/anytime_podcast_player.git

From the anytime_podcast_player directory fetch the dependencies:

flutter packages get

Then either run:

flutter run

Or build:

flutter build apk

Search Engines

Anytime can search for podcasts via iTunes and PodcastIndex. To use PodcastIndex, first create an account at https://podcastindex.org. This will generate the required key and secret. To enable searching with PodcastIndex in AnyTime, pass the key and secret as runtime arguments:

flutter run --dart-define=PINDEX_KEY=mykey --dart-define=PINDEX_SECRET=mysecret

If running from Android Studio, add the following to the command line arguments section:

-t lib/main.dart --dart-define=PINDEX_KEY=mykey --dart-define=PINDEX_SECRET=mysecret

Ensure there are is only a single space between each argument. I have found that an additional space between any of the arguments will prevent them from being passed into Flutter correctly.

Built With

Anytime makes use of several amazing packages available on pub.dev. Below is a list of the packages that are heavily used within the application.

  • Flutter - SDK.
  • Sembast - NoSQL persistent store.
  • RxDart - adds additional capabilities to Dart Streams and StreamControllers.
  • Audio Service - Provides background support for supporting audio libraries.
  • Podcast Search - Provides podcast search and parsing.

Architecture

architecture.png

Anytime takes a layered approach:

  • UI - The UI presented to the users. Currently this is mobile, but could be extended to web and/or desktop in the future.
  • BLoC - Handles the state for the UI. Communication between the UI and BLoC is entirely via Sinks and Streams.
  • Services - Interacts with the API and Repository to provide data handling routines to the BLoCs and other services.
  • API - Interacts with the iTunes API (via a package) to fetch and parse podcast data.
  • Repository - Provides persistent storage.

Contributing

If you have an issue or discover a bug, please raise a GitHub issue. Pull requests are also welcome. Full details can be found in CONTRIBUTING.md.

Have a question?

If you wish to reach out to me directly you can find me at [email protected].

License

Anytime is released under a BSD-Style License. See the LICENSE file for further details.

Comments
  • Refresh the podcast on Podcast Details page creation

    Refresh the podcast on Podcast Details page creation

    Add a minor convenience to the user, whenever the user opens the podcast detail it silently updates the list of episodes.

    Based on this suggestion: https://github.com/breez/breezmobile/issues/456

    How it looks like

    https://user-images.githubusercontent.com/1225438/123450993-ab049a80-d5b3-11eb-8930-d92b04815276.mp4

    opened by ademar111190 11
  • Status bar changes

    Status bar changes

    This change removes the need of brightness hack for the status bar blink on opening PodcastDetails page.

    If the theme was overridden by the wrapping app, this hack reverted status bar color back to plugins theme. This change is to make sure the status bar color uses the overridden theme.

    Before

    https://user-images.githubusercontent.com/4012752/106821785-e1865b00-668e-11eb-8238-7591308a3ce8.mp4

    After

    https://user-images.githubusercontent.com/4012752/106817659-3a9ec080-6688-11eb-8b7b-fc194dc01ad4.mp4

    on hold 
    opened by erdemyerebasmaz 11
  • just_audio upgrade issues

    just_audio upgrade issues

    just_audio causes issues after upgrading A direct build without any changes could not complete with several build errors stating ios build version differences. So I went ahead and upgraded all the individual packages.

    To Reproduce Steps to reproduce the behaviour:

    1. Updated the pubspec yaml with the latest versions of the packages used (versions shown below)
    2. Compile errors are shown within the 'mobile_audio_player.dart' file

    Expected behaviour Should have hopefully built with the latest packages.

    Screenshots image image

    Smartphone (please complete the following information):

    • Device: Simulator (iPhone 12 Pro - iOS 14.3)
    • OS: iOS 14.3

    Additional context `environment: sdk: ">=2.8.0 <3.0.0"

    dependencies: flutter: sdk: flutter flutter_localizations: sdk: flutter audio_service: ^0.16.1 cached_network_image: ^2.5.0 connectivity: ^2.0.2 cupertino_icons: ^0.1.2 flutter_dialogs: ^1.1.0 flutter_downloader: ^1.5.2 flutter_launcher_icons: ^0.8.1 flutter_spinkit: ^4.1.2+1 html: ^0.14.0+4 intl: ^0.16.1 intl_translation: ^0.17.10+1 just_audio: ^0.6.5 liquid_pull_to_refresh: ^2.0.0 logging: ^0.11.4 mockito: ^4.1.3 mp3_info: ^0.1.4 package_info: ^0.4.3+2 path_provider: ^1.6.27 percent_indicator: ^2.1.9 permission_handler: ^5.0.1+1 podcast_search: ^0.3.7 provider: ^4.3.2+3 rxdart: ^0.25.0 sembast: ^2.4.8+1 shared_preferences: ^0.5.12+4 url_launcher: ^5.7.10

    dev_dependencies: flutter_test: sdk: flutter pedantic: ^1.9.2`

    Pastebin - initial build error

    opened by vnl 11
  • Update mini player UI

    Update mini player UI

    After consulting with our designer we decided to make these small changes to mini player UI.

    • Font changes:
      • Podcast episode title -> Podcast episode title
      • Podcast author -> Podcast author
      • Authors font size is reduced
      • Both fields now use same letterSpacing and height
    • Play/Pause buttons size is reduced
    • Now has a distinctive background color

    opened by erdemyerebasmaz 9
  • Podcasts fail to load on Android 6 devices if the SSL CA is Let's Encrypt

    Podcasts fail to load on Android 6 devices if the SSL CA is Let's Encrypt

    Describe the bug Podcasts that use Let's Encrypt as their CA fail to load.

    To Reproduce Steps to reproduce the behavior:

    1. Search for the 'Once Bitten' podcast.
    2. Tap on the icon to load the podcast.
    3. Busy spinner keeps on spinning,

    Issue The Let's Encrypt CA expired at the end of September 2021. This is causing issues with older Android devices which cannot update it's list of CA's. Later versions of Android are fine.

    testing 
    opened by amugofjava 8
  • Add support for importing/exporting subscriptions in OPML format

    Add support for importing/exporting subscriptions in OPML format

    Is your feature request related to a problem? Please describe. As a user wanting to migrate from a different app to Anytime, I would like to be able to import an OPML file of all my subscriptions that I exported from my previous app, so that I don't have to manually add all of them in Anytime.

    Additionally (could be split into a separate feature request) As a user, I want to be able to export the subscriptions I have in Anytime in OPML format so that I can easily migrate to a different app or if I want to share my subscription list or just have a backup of it.

    Describe the solution you'd like I would like to be able to import an OPML (standard format of a list of RSS feeds) of my podcast subscriptions into Anytime.

    Additionally I would also like to be able to export my subscriptions in an OPML format.

    Describe alternatives you've considered Adding my 30+ subscriptions manually.

    Additional context N/A

    enhancement 
    opened by villiers-s 7
  • Add Show Funding Menu settings to show/hide FundingMenu on PodcastDetails

    Add Show Funding Menu settings to show/hide FundingMenu on PodcastDetails

    Since we have our own payment system integrated into the plugin via hooks, this raised the need to hide FundingMenu on PodcastDetails page. We believe the least intrusive way to go with this change was to add a showFunding flag to AppSettings.

    This PR introduces showFunding settings flag that allows developers to hide FundingMenu on PodcastDetails page. This setting is true by default and won't be configurable through Settings page.

    question 
    opened by erdemyerebasmaz 7
  • Empty player after existing the app using Android back button

    Empty player after existing the app using Android back button

    Player is blank after existing the app using the device's back button.

    To Reproduce Steps to reproduce the behavior:

    1. Play any podcast episode.
    2. Close the podcast view and go back to the Library view.
    3. Click on Android back button.
    4. Notice the player is empty. It's also empty in full screen mode.

    Expected behavior Player shows the episode details.

    Video https://drive.google.com/file/d/1UB_prI9P7mjHC0x-KFEFrVxuLD0Zj0hN/view?usp=drivesdk

    Smartphone:

    • Device: OnePlus 6
    • OS: Android 10

    Additional context Regression from the latest update it seems.

    bug 
    opened by kingonly 7
  • Open dialogs without using root navigator

    Open dialogs without using root navigator

    Dialogs use root navigator by default. This causes issues when the plugin is opened through an app with it's own instance of Navigator. The dialogs should be pushed to the nearest Navigator from the context in this case.

    For example:

    • The plugin is embedded into an app,
    • a dialog that belongs to the plugin is opened,
    • calling Navigator.pop(context) to close the dialog would pop the last item on app's Navigator instead of popping the dialog.
    on hold 
    opened by erdemyerebasmaz 5
  • Specific episode plays for a second and then stops

    Specific episode plays for a second and then stops

    E48 of Podcasting 2.0 plays for a second or two and then stops.

    Steps to reproduce the behavior:

    1. Go to the Podcasting 2.0 podcast
    2. Play episode 48
    3. Episode stops after a second or two
    • Device: OnePlus 8t
    • OS: Android 11

    Nope episode is played successfully in other apps. Dave Jones confirms.

    opened by kingonly 4
  • Error on run flutter pub get - Flutter 2 dependency Issue

    Error on run flutter pub get - Flutter 2 dependency Issue

    Describe the bug I have got this error on run flutter pub get: pub get failed (1; So, because anytime depends on both podcast_search from git and intl 0.17.0, version solving failed.)

    This my flutter doctor:

    [βœ“] Flutter (Channel stable, 2.0.2, on macOS 11.2 20D64 darwin-x64, locale en-US)
    [βœ“] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
    [βœ“] Xcode - develop for iOS and macOS
    [βœ“] Android Studio (version 4.1)
    

    What's wrong there? Have anysuggest to fix this error? Thank you so much!

    opened by sinhpn92 4
  • OPML Import hangs on a certain podcast

    OPML Import hangs on a certain podcast

    Describe the bug When I import an OPML file, the app consistently hangs when trying to download "https://www.geierb.de/trishaspodcasts/FM4-Charts/podcast.xml"

    Smartphone (please complete the following information):

    • Device: Samsung a52
    • OS: Android 12

    Additional context I think it would be a good idea to download podcasts with a timeout. If the app cannot download/process a podcast, the problem should be limited to the problematic podcast. The way it is now the only option is to abort importing the OPML.

    question 
    opened by tomtom 1
  • Feature/62 enforce https usage

    Feature/62 enforce https usage

    Closes #62

    Hi,

    this is a improvement proposal to force HTTPS usage. Indeed, authorizing the whole app to establish HTTP connections is a security issue.

    I'll be happy to discuss about all this.

    opened by Chralu 1
  • Single purpose App

    Single purpose App

    Hi, I just want to know if we can use Anytime Podcast Player with just one or a choice of podcast feeds. I am considering to use the app for my radio station.

    opened by sanbroz 3
  • Accept HTTP connection ?

    Accept HTTP connection ?

    Is your feature request related to a problem? Please describe. Some RSS provide http URLs (without SSL) to download audio files.

    In that case, clicking on the episode download button does nothing (on iOS). Whereas stream reading episodes works perfectly.

    Describe the solution you'd like As audio file downloading is not risked, maybe we should accept HTTP connections.

    opened by Chralu 5
  • Add portuguese translation πŸ’ͺπŸ‡¦πŸ‡΄πŸ‡§πŸ‡·πŸ‡¨πŸ‡»πŸ‡ΉπŸ‡±πŸ‡¬πŸ‡ΆπŸ‡¬πŸ‡ΌπŸ‡²πŸ‡΄πŸ‡²πŸ‡ΏπŸ‡΅πŸ‡ΉπŸ‡ΈπŸ‡ΉπŸ’ͺ

    Add portuguese translation πŸ’ͺπŸ‡¦πŸ‡΄πŸ‡§πŸ‡·πŸ‡¨πŸ‡»πŸ‡ΉπŸ‡±πŸ‡¬πŸ‡ΆπŸ‡¬πŸ‡ΌπŸ‡²πŸ‡΄πŸ‡²πŸ‡ΏπŸ‡΅πŸ‡ΉπŸ‡ΈπŸ‡ΉπŸ’ͺ

    Hi, I just add this Portuguese translation on Breez fork so I'm sharing it here now.

    About the translation, Brazilian Portuguese is my mother language, there are important differences in Brazilian Portuguese and other variants, especially on the conjugation of the second person (singular and plural), gerund x periphrastic, vocabulary, etc… So to have a wide Portuguese support it is necessary at least the European and African variations, nevertheless, it is still the same language so all Portuguese speakers can understand it perfectly.

    opened by ademar111190 4
  • Connectivity issues can result in episodes being marked as read.

    Connectivity issues can result in episodes being marked as read.

    Describe the bug Anytime is not distinguishing between an episode stopping because it has come to the end or as a result of a connection issue or drop out. If you have mark played episodes as read enabled in settings, this can result in an episode being marked as played when it hasn't.

    To Reproduce Steps to reproduce the behaviour:

    1. Enable mark played episodes as read
    2. Begin streaming an episode.
    3. Enable airplane mode and wait for buffer to run out.

    Expected behaviour If, when streaming, an episode stops due to a connectivity error the current play position should be recorded and the episode should not be marked as played.

    bug 
    opened by amugofjava 0
Releases(release/v1.2.2)
  • release/v1.2.2(Jan 2, 2023)

    This release contains minor bug fixes and UI improvements:

    • Fixes Let's Encrypt CA issue on Android 6 & 7.
    • The podcast details page shows an expandable view of the description rather than all of it at once.
    • Fix bottom bar icon indexing.
    • Fix keyboard pop-up on search bar on Android.
    • Fix issue whereby podcast details would not be displayed if any of title, description or copyright were missing,
    • Update dependencies.
    Source code(tar.gz)
    Source code(zip)
  • release/v1.2-rc1(Jun 24, 2022)

  • release/v1.1-beta3(Nov 4, 2021)

    Latest changes:

    • Improved playback speed selector and added volume boost (Android only). Trim silence has also been added but temporarily disabled due to bug in just_audio package.
    • Rewind is now 10s with fast forward remaining at 30s.
    • Fixed flashing chapter image bug when offline.
    • Fixed minor UI issue with time played indicator on episode image tiles.
    Source code(tar.gz)
    Source code(zip)
    app-release.apk(27.37 MB)
Owner
Ben Hills
Java & Android developer currently fascinated by Flutter & the Dart language.
Ben Hills
An application built using Flutter that can be used while playing board games if actual or physical dice is missing . This is a dual dice application.

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

dev_allauddin 3 Feb 3, 2022
Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API

Flutter plugin for playing or streaming YouTube videos inline using the official iFrame Player API. The package exposes almost all the API provided by iFrame Player API. So, it's 100% customizable.

Pratap Singh 0 May 15, 2022
WooCommerce App template that uses Flutter. Integrated to work with WooCommerce stores, connect and create an IOS and Android app from Flutter for IOS and Android

WooCommerce App: Label StoreMax Label StoreMax - v5.3.1 Official WooSignal WooCommerce App About Label StoreMax Label StoreMax is an App Template for

WooSignal 314 Jan 9, 2023
Flutter simple image crop - A simple and easy to use flutter plugin to crop image on iOS and Android

Image Zoom and Cropping plugin for Flutter A simple and easy used flutter plugin to crop image on iOS and Android. Installation Add simple_image_crop

null 97 Dec 14, 2021
🎬 A movie catalog app for both Android & IOS ~ Flutter.io project in Dart | Dart, Bloc, Movies

Movie Catalog App ?? Browse through movies from the YIFY api Getting Started For help getting started with Flutter, view our online documentation. Tod

Jonas De Vrient 49 Nov 21, 2022
Habit formation is an Android & iOS app which is built using Flutter UI Toolkit.

Habit Formation Habit formation is an Android & iOS app which is built using Flutter UI Toolkit. You can create a habit through this app and can keep

Umang Kothari 11 Mar 6, 2022
Wordle-in-flutter - Wordle game for Android and IOS built with Flutter

wordle Wordle game for Android and IOS built with Flutter Screenshots

Chawer Kamanga 2 Nov 23, 2022
A beautiful weather forecasting application built with the Flutter development kit. Available on Android and iOS.

Flutter Weather A beautiful weather forecasting application built with the Flutter development kit. Screenshots Analysis Run Application This project

Scott Carnett 15 Oct 17, 2022
Responsive Full Stack Reddit Clone - Works on Android, iOS & Web! built with Flutter πŸš€πŸ’™

?? ??️ ?? ??️ ?? ??️ ?? ??️ UNDER CONSTRUCTION ?? ??️ ?? ??️ ?? ??️ ?? ??️ Reddit Clone ?? ?? Responsive Full Stack Reddit Clone - Works on Android, i

SOLOMON ABUH 3 Dec 15, 2022
Simple tool to open WhatsApp chat without saving the number, developed using Google's Flutter Framework. for Android/ IOS/ Desktop/ Web

OpenWp Simple tool to open WhatsApp chat without saving the number Explore the docs Β» View Demo Β· Report Bug Β· Request Feature Table of Contents About

Swarup Bhanja Chowdhury 15 Nov 1, 2022
A Flutter plugin for IOS and Android providing a simple way to display PDFs.

Pdf Viewer Plugin A Flutter plugin for IOS and Android providing a simple way to display PDFs. Features: Display PDF. Installation First, add pdf_view

Lucas Britto 56 Sep 26, 2022
A simple yet powerful Flutter plugin for showing Toast at Android, iOS and Web.

Flutter Toast A simple yet powerful Flutter plugin for showing Toast at Android and iOS. Features: Native Toast Pure Flutter Toaster Installation Add

Eyro Labs 5 Dec 13, 2021
Flutter plugin to display a simple numeric keyboard on Android & iOS

numeric_keyboard A simple numeric keyboard widget Installation Add numeric_keyboard: ^1.1.0 in your pubspec.yaml dependencies. And import it: import '

Hugo EXTRAT 16 Sep 27, 2022
Add features to the Android / iOS keyboard in a simple way.

Keyboard Actions Add features to the Android / iOS keyboard in a simple way. Because the keyboard that Android / iOS offers us specifically when we ar

Diego VelΓ‘squez LΓ³pez 641 Dec 27, 2022
Encode App-Dev is a open source project which contains different projects of Application development, Android development, IOS development, Flutter, Kotlin, Dart, Java, Swift etc.

HACKTOBERFEST 2022 Encode App-Dev is an open source project which contains different projects of Application development, Android development, IOS dev

null 4 Dec 4, 2022
A streaming client for the Komga self-hosted comics/manga/BD server targeting Android/iOS written in Dart/Flutter

Klutter A streaming client for the Komga self-hosted comics/manga/BD server targeting Android/iOS written in Dart/Flutter Background This is a project

Mark Winckle 58 Dec 7, 2022
A wrapper around our Cocoa and Java client library SDKs, providing iOS and Android support for those using Flutter and Dart.

Ably Flutter Plugin A Flutter plugin wrapping the ably-cocoa (iOS) and ably-java (Android) client library SDKs for Ably, the platform that powers sync

Ably Realtime - our client library SDKs and libraries 46 Dec 13, 2022
ESP-Touch Dart API for Flutter. Platform-specific implementation for Android (Java) and iOS (Objective-C).

esptouch_flutter Flutter plugin for ESP-Touch to configure network for ESP-8266 and ESP-32 devices. Runs on iOS and Android. esptouch_flutter is Flutt

SMAHO Engineering OSS 86 Dec 10, 2022
Write iOS&Android Code using Dart. This package liberates you from redundant glue code and low performance of Flutter Channel.

Dart_Native Dart_Native operates as both a code generator tool and a bridge to communicate between Dart and native APIs. Replaces the low-performing F

DartNative 893 Jan 4, 2023