Tadamon App

Tadamon App Banner

An innovative Flutter application dedicated to supporting the Palestinian cause.
Built with Flutter, empowering users with tools for product scanning, local data management, and accessing vital information to make conscious consumer choices.

MotivationAboutFeaturesArchitectureTechnologiesGetting StartedRoadmapContributingLicense


🎯 Motivation

In a world where consumer choices have a global impact, the Tadamon App (Tadamon means "Solidarity" in Arabic) was created to empower individuals who wish to support the Palestinian cause through ethical consumption. The app provides a transparent and easy-to-use tool to identify products and understand their origins, helping users make informed decisions that align with their values.

Our goal is to foster a community of conscious consumers and provide a reliable resource for those who want to stand in solidarity with Palestine.


📖 About

Tadamon App is a comprehensive Flutter application designed for Android. It serves as a digital assistant for ethical shopping, offering robust product scanning capabilities, offline data access, and seamless cloud synchronization.

The app's core mission is to provide users with the information they need to support their chosen causes. With a clean, intuitive interface and a rich feature set, Tadamon is more than just a utility—it's a tool for making a difference.


✨ Features

Core Functionality

  • Barcode Scanning: Utilizes Google ML Kit for fast and accurate barcode scanning to instantly retrieve product information.
  • Offline First: Powered by a local Objectbox database, ensuring the app is fully functional even without an internet connection.
  • Cloud Sync: Seamlessly synchronizes the local database with Firebase Firestore to keep product information up-to-date.
  • PDF Export: Generate and export detailed reports of scanned products in PDF format for personal records or sharing.
  • User-driven Reporting: An integrated system for users to report new products or suggest corrections, helping to keep the database accurate and community-driven.
  • Dynamic Theming: A beautiful and responsive UI with full support for light and dark modes, as well as following the system theme.
  • Localization: Full support for multiple languages (starting with Arabic) to cater to a global user base.

🏗️ Architecture

The app is built using a feature-driven architecture, promoting a clean separation of concerns and scalability.

  • BLoC Pattern: State management is handled predictably and efficiently using the BLoC (Business Logic Component) pattern.
  • Repository Pattern: Abstracts data sources (local database and cloud services), making the app more modular and testable.
  • Dependency Injection: Core services like database access are provided throughout the app, ensuring loose coupling and maintainability.

Project Structure

lib/
├── core/               # Shared components: routing, theming, widgets, services
├── features/           # Individual feature modules (e.g., product_scanner, home_page)
├── generated/          # Auto-generated files for localization (l10n)
├── l10n/               # Localization files
├── main.dart           # Main application entry point
└── objectbox.g.dart    # Objectbox auto-generated binding files

🛠️ Technologies

This project leverages a modern and robust tech stack for high-quality mobile development:

Technology Description
🐦 Flutter & Dart The core framework and language for building beautiful, natively compiled applications.
🗃️ Objectbox A high-performance NoSQL database for local, offline-first data storage.
🔥 Firebase Firestore A flexible, scalable NoSQL cloud database for data synchronization.
🧱 flutter_bloc A predictable state management library that helps implement the BLoC pattern.
📄 pdf & open_file Libraries for creating, exporting, and opening PDF files.
📸 google_mlkit_barcode_scanning For fast and reliable barcode scanning via Google's ML Kit.
🌐 dio & connectivity_plus For handling network requests and monitoring network state.
🎨 flutter_screenutil For creating a responsive UI that adapts to different screen sizes.

🚀 Getting Started

You can get the Tadamon App up and running in two ways: by downloading a pre-built release or by building it from the source code.

Option 1: Download from GitHub Releases

For most users, the easiest way to install the app is by downloading the latest APK from the GitHub Releases page.

  1. Go to the Releases page of this repository.
  2. Under the latest release, find the app-release.apk file in the Assets section.
  3. Download the APK file to your Android device and install it. You may need to enable "Install from unknown sources" in your device's settings.

Option 2: Build from Source

If you are a developer and want to build the app from the source code, follow these steps.

Prerequisites

  • Flutter SDK (version 3.10.1 or higher)
  • Android Studio or VS Code with the Flutter extension.

Installation

  1. Clone the repository:
    git clone https://github.com/MostafaSensei106/Tadamon.git
    
  2. Navigate to the project directory:
    cd Tadamon
    
  3. Install dependencies:
    flutter pub get
    
  4. Run the code generator for Objectbox and other dependencies:
    dart run build_runner build --delete-conflicting-outputs
    
  5. Run the app on your connected Android device or emulator:
    flutter run
    

🖼️ Screenshots

Coming Soon! This section will be updated with screenshots of the app's main features.

Home Screen Scanning
(screenshot) (screenshot)
Log Page App Drawer
(screenshot) (screenshot)

🤝 Contributing

Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

Please read our (soon-to-be-added) Contributing Guidelines for more details.


📜 License

Distributed under the GPL-3.0 License. See the LICENSE file for more information.


Made with ❤️ by MostafaSensei106

Libraries

core/config/const/app_enums
core/config/const/sensei_const
core/config/const/shared_preferences_keys
core/config/fonts/fonts
core/config/theme/colors/dark_theme
core/config/theme/colors/light_theme
core/config/theme/colors/logic/cubit/theme_cubit
core/config/theme/colors/logic/cubit/theme_shared_preferences
core/config/theme/colors/logic/cubit/theme_state
core/config/theme/colors/logic/helper/theme_toggle_helper
core/controller/network_controller/network_controller
core/error/error_screen
core/error/no_routes
core/extensions/date_format_extension
core/helpers/font_weight_helper
core/logic/locals/cubit/locals_cubit
core/logic/locals/cubit/locals_event
core/logic/locals/cubit/locals_state
core/routing/app_router
core/routing/routes
core/services/export_services
core/services/object_box_services/object_box_service
core/services/pdf_export_services/pdf_export_services
core/services/share_Services/share_services
core/services/url_services/url_services
core/shared_preferences_global/shared_preferences_global
core/widgets/app_bar_component/action_drawer_icons
core/widgets/app_bar_component/app_bar
core/widgets/app_bar_component/app_bar_title
core/widgets/app_bar_component/side_page_app_bar
core/widgets/app_drawer/widgets/about_section
core/widgets/app_drawer/widgets/actions_section
core/widgets/app_drawer/widgets/data_management_section
core/widgets/app_drawer/widgets/drawer
core/widgets/app_drawer/widgets/drawer_header
core/widgets/app_drawer/widgets/theme_section
core/widgets/app_toast/app_toast
core/widgets/bottom_sheet/ui/model_bottom_sheet
core/widgets/bottom_sheet/widget/bottom_model_sheet_content
core/widgets/bottom_sheet/widget/sheet_header
core/widgets/button_components/elevated_button_components/elevated_button_component
core/widgets/button_components/elevated_button_components/elevated_icon_button_component
core/widgets/button_components/icon_button_components/icon_button_component
core/widgets/button_components/icon_button_components/icon_button_filled_component
core/widgets/button_components/icon_button_components/icon_button_filledtonal_component
core/widgets/button_components/textbutton_components/text_button_component
core/widgets/button_components/textbutton_components/text_icon_button_component
core/widgets/container_background_component/container_background_component
core/widgets/counter_items_component/counter_items_component
core/widgets/dialog_components/dialog_ask_user_components
core/widgets/dialog_components/dialog_component
core/widgets/dialog_components/dialog_waiting_component
core/widgets/divider
core/widgets/expansion_tile_component/expansion_tile_component
core/widgets/home_tool_component/home_tool_component
core/widgets/inkwell_component/inkwell_component
core/widgets/list_tile_components/list_tile_component
core/widgets/list_tile_components/list_tile_icon_component
core/widgets/list_tile_components/list_tile_widget_component
core/widgets/lottie_component/lottie_component
core/widgets/text_filed_component/text_filed_component
features/counter_manager/logic/counter_cubit
features/counter_manager/logic/counter_state
features/donation_palestine/widget/donation_sheet_content
features/edit_text/widgets/edit_text_sheet_content
features/pages/app_info_page/ui/page/app_info
features/pages/app_info_page/ui/widget/app_info_list
features/pages/app_info_page/ui/widget/app_info_title
features/pages/chat_with_dev_page/ui/page/chat_with_dev
features/pages/chat_with_dev_page/ui/widget/chat_bubble
features/pages/chat_with_dev_page/ui/widget/chat_dev_app_bar
features/pages/chat_with_dev_page/ui/widget/donation_for_dev_slider
features/pages/help_user_page/data/model/qna_model
features/pages/help_user_page/data/repositories/repositories
features/pages/help_user_page/logic/cubit/help_user_cubit
features/pages/help_user_page/logic/cubit/help_user_state
features/pages/help_user_page/logic/help_search_delegate
features/pages/help_user_page/ui/page/help_user_page
features/pages/help_user_page/ui/widget/help_user_page_view
features/pages/home_page/logic/cubit/home_cubit
features/pages/home_page/ui/page/home_page
features/pages/home_page/ui/widget/home_app_tools
features/pages/home_page/ui/widget/home_tip
features/pages/home_page/ui/widget/image_news
features/pages/home_page/ui/widget/items_counter
features/pages/log_page/data/models/scanned_logs_product_model
features/pages/log_page/logic/bloc/logs_bloc
features/pages/log_page/logic/bloc/logs_event
features/pages/log_page/logic/bloc/logs_state
features/pages/log_page/ui/page/log_page
features/pages/log_page/ui/widgets/logs_page_view
features/pages/log_page/ui/widgets/logs_search_content
features/pages/log_page/ui/widgets/productlogs_expansiontile_component
features/pages/main_page/logic/cubit/main_page_cubit
features/pages/main_page/logic/cubit/main_page_event
features/pages/main_page/logic/cubit/main_page_state
features/pages/main_page/ui/page/main_page
features/pages/main_page/ui/widget/google_nav_bar/google_nav_bar
features/pages/main_page/ui/widget/main_page_container
features/pages/onboarding_page/ui/page/onboarding_page
features/pages/onboarding_page/ui/widget/animated_triangles
features/pages/onboarding_page/ui/widget/dot_indicator_nav
features/pages/onboarding_page/ui/widget/onboarding_page_one
features/pages/onboarding_page/ui/widget/onboarding_page_two
features/pages/palestine_map_page/ui/page/palestine_map_page
features/pages/search_page/data/model/search_product_model
features/pages/search_page/logic/search_bloc
features/pages/search_page/logic/search_event
features/pages/search_page/logic/search_state
features/pages/search_page/ui/page/search_page
features/pages/search_page/ui/widget/product_expansion_tile
features/pages/search_page/ui/widget/search_page_view
features/pages/search_page/ui/widget/search_result_content
features/pages/terms_gate_page/terms_gate
features/pdf_export/logic/cubit/pdf_export_cubit
features/pdf_export/logic/cubit/pdf_export_state
features/pdf_export/widgets/export_logs_sheet_content
features/products_scanner/data/models/product_model
features/products_scanner/data/repository/fire_store_repositories
features/products_scanner/data/repository/objectbox_repositories
features/products_scanner/logic/barcode_scanner
features/products_scanner/logic/barcode_validator
features/products_scanner/logic/cubit/localdb_cubit/localdb_cubit
features/products_scanner/logic/cubit/product_scan_cubit/product_scan_cubit
features/products_scanner/logic/image_scanner
features/products_scanner/ui/widget/product_list_view
features/report_products/logic/bloc/report_product_cubit
features/report_products/logic/bloc/report_product_state
features/report_products/logic/services/report_service
features/report_products/widgets/report_products_seet_content/radio_selection_tile_component
features/report_products/widgets/report_products_seet_content/report_product_sheet_content
firebase_options
l10n/app_localizations
l10n/app_localizations_ar
l10n/app_localizations_en
main
objectbox.g
tadamon