A Flutter Shopping list app
  • Dart 72.1%
  • C++ 13.3%
  • CMake 10.4%
  • Kotlin 1.4%
  • Swift 1.3%
  • Other 1.5%
Find a file
SirSlader 5a85e7cee5 Document built-in Kotlin (AGP 9) limitation in developer guide
Explain that the KGP warning is expected on Flutter 3.47: the Flutter Gradle
plugin isn't compatible with the new AGP DSL, so built-in Kotlin cannot be
enabled without breaking the build. Note when/how to migrate later.
2026-08-25 12:36:25 -04:00
.agents/skills Update system was implemented for the app to receive updates 2026-06-19 12:26:16 -04:00
android Persist frequent items, fix backup key mapping, name app 'Shopping List', add release guide 2026-08-25 11:04:40 -04:00
ios Code was rebuilt and logic was added 2026-06-18 14:54:06 -04:00
lib Persist frequent items, fix backup key mapping, name app 'Shopping List', add release guide 2026-08-25 11:04:40 -04:00
linux Add Android APK self-update installer flow 2026-06-19 15:37:55 -04:00
macos Upgrade to Flutter 3.47, update plugins, fix bugs, bump Android toolchain 2026-08-24 20:12:50 -04:00
test Persist frequent items, fix backup key mapping, name app 'Shopping List', add release guide 2026-08-25 11:04:40 -04:00
web Code was rebuilt and logic was added 2026-06-18 14:54:06 -04:00
windows Several updates to packages 2026-07-14 12:30:28 -04:00
.gitignore Code was rebuilt and logic was added 2026-06-18 14:54:06 -04:00
.metadata Code was rebuilt and logic was added 2026-06-18 14:54:06 -04:00
analysis_options.yaml Upgrade to Flutter 3.47, update plugins, fix bugs, bump Android toolchain 2026-08-24 20:12:50 -04:00
DEVELOPER_GUIDE.md Document built-in Kotlin (AGP 9) limitation in developer guide 2026-08-25 12:36:25 -04:00
devtools_options.yaml Code was rebuilt and logic was added 2026-06-18 14:54:06 -04:00
pubspec.lock Apply technical improvements: robust loading, UUID ids, lint cleanup, import hardening, more tests 2026-08-25 09:40:13 -04:00
pubspec.yaml Release 1.1.3: bump version and update release notes 2026-08-25 11:17:11 -04:00
README.md Add shopping list productivity features 2026-06-23 14:49:48 -04:00
skills-lock.json Update system was implemented for the app to receive updates 2026-06-19 12:26:16 -04:00
version.json Release 1.1.3: bump version and update release notes 2026-08-25 11:17:11 -04:00

Shopping List App

A personal Flutter shopping list app for keeping track of products, quantities, prices, tax, and totals.

The app is designed for personal sideloaded Android use and includes a lightweight in-app update check that can download a newer APK and open Android's installer.

Features

  • Create and switch between multiple shopping lists
  • Add products with:
    • Product name
    • Quantity selector
    • Price
  • Edit existing products
  • Mark products as purchased
  • Swipe products to delete them with undo support
  • Search and sort products
  • Clear the current list with confirmation
  • Calculate subtotal, purchased subtotal, tax, and final total automatically
  • Enter IVU/tax percentage
  • Set an optional budget and see remaining/over-budget status
  • Save lists, products, tax, budget, and theme preference locally
  • Responsive layout for phone, tablet, and desktop-sized windows
  • Settings/About screen with manual update check
  • Light, dark, and system theme modes
  • Android sideload update flow:
    • Checks version.json on startup
    • Prompts when a newer version is available
    • Downloads the APK directly
    • Opens Android's package installer
  • One-time “App Updated” message after a successful version upgrade

Tech Stack

  • Flutter / Dart
  • Provider for app state
  • flutter_slidable for swipe-to-delete actions
  • http for update/version checks
  • package_info_plus for reading the installed app version
  • path_provider for temporarily storing downloaded APKs
  • shared_preferences for local app persistence and theme settings
  • Android platform channel for launching the APK installer

Getting Started

Prerequisites

Install Flutter and confirm your environment is ready:

flutter doctor

Install dependencies

flutter pub get

Run the app

flutter run

Build an Android APK

flutter build apk

The APK is generated at:

build/app/outputs/flutter-apk/app-release.apk

Update System

This app is not distributed through Google Play. Instead, it uses a custom version.json file hosted in this repository:

https://raw.githubusercontent.com/SirSlader/shopping_list_app/main/version.json

Example version.json:

{
  "version": "1.0.2",
  "download_url": "https://github.com/SirSlader/shopping_list_app/releases/download/v1.0.2/shopping_list.apk",
  "release_notes": "Initial release"
}

When the app opens, it compares the installed version from pubspec.yaml with the remote version.json. If the remote version is newer, it shows an update dialog.

On Android, tapping Update Now downloads the APK into the app cache and opens Android's installer. Android still requires the user to confirm installation manually.

The Settings screen also includes a Check for updates action for manually checking the hosted version.json.

After a user installs an update and opens the app again, the app shows a one-time message confirming the installed version, for example:

Shopping List has been updated to version 1.0.3.

Android install permission

Because this is a sideloaded app, Android may ask the user to allow this app to install unknown apps:

Settings → Install unknown apps → Shopping List → Allow from this source

The app will open that settings screen automatically if permission is missing.

Release Workflow

For each new app release:

  1. Update the app version in pubspec.yaml:

    version: 1.0.3
    
  2. Build the release APK:

    flutter build apk
    
  3. Rename/copy the APK to the release filename:

    shopping_list.apk
    
  4. Create a GitHub Release with a matching tag, for example:

    v1.0.3
    
  5. Upload shopping_list.apk as a release asset.

  6. Update version.json:

    {
      "version": "1.0.3",
      "download_url": "https://github.com/SirSlader/shopping_list_app/releases/download/v1.0.3/shopping_list.apk",
      "release_notes": "Describe what changed"
    }
    
  7. Commit and push the pubspec.yaml and version.json changes.

Users with an older installed version will be prompted to update the next time they open the app.

Important Notes

  • Silent self-updates are not allowed for normal Android apps. The app can download the APK, but Android requires the user to approve installation.
  • Future APKs must use the same Android package name.
  • Future APKs must be signed with the same signing key as the installed version.
  • The version in version.json must be higher than the installed app version for the update prompt to appear.

Repository

GitHub: SirSlader/shopping_list_app