A Flutter-based classified marketplace application inspired by platforms such as Divar, designed for browsing, searching, and discovering product listings through a modern mobile interface.
Aviz is a mobile marketplace application developed with Flutter and Dart.
The application provides users with a platform for discovering classified advertisements, browsing promotional and recent listings, searching for products, and interacting with marketplace content.
The project uses a feature-based architecture with separate data sources, repositories, BLoC state management, and presentation layers. It also integrates REST APIs, local data storage, online payment services, and deep linking capabilities.
- Browse classified advertisements
- View hot and promotional listings
- Browse recent advertisements
- Search for listings
- Filter and discover marketplace content
- View product and advertisement information
- REST API integration
- Network image loading and caching
- Local data persistence
- Online payment integration
- Deep linking support
- Responsive mobile UI
- Custom typography and Material Design components
- Flutter & Dart — Cross-platform mobile application development
- BLoC / Flutter BLoC — State management
- Dio — HTTP client and REST API communication
- Dartz — Functional error handling with
Either - GetIt — Dependency injection
- Hive — Local data storage
- ZarinPal — Online payment integration
- Uni Links — Deep linking
- Cached Network Image — Network image caching
- Intl — Number and date formatting
- Material Design — UI components and application theming
- Dana — Custom application font
The project follows a feature-based structure that separates presentation, business logic, and data-access responsibilities.
The main data flow is organized around:
UI
↓
BLoC
↓
Repository
↓
Data Source
↓
REST API
Dependency injection is handled using GetIt, while Dio is used as the HTTP client for communicating with backend services.
The data layer is organized into separate components:
- Data Sources — Responsible for communicating with remote services
- Repositories — Provide an abstraction over data sources
- Models — Represent application data
- Dartz Either — Used for representing successful and failed data operations
BLoC is used to manage application state and separate business logic from the presentation layer.
For example, the Home feature handles:
- Initial state
- Loading state
- Successful data requests
- Hot promotion data
- Latest promotion data
lib/
├── Constants/
│ ├── color_constants.dart
│ └── string_constants.dart
│
├── DI/
│ └── di.dart
│
├── Features/
│ ├── Home/
│ │ ├── bloc/
│ │ ├── data/
│ │ │ ├── datasource/
│ │ │ ├── model/
│ │ │ └── repository/
│ │ └── view/
│ │
│ └── Search/
│ ├── bloc/
│ ├── data/
│ │ ├── datasource/
│ │ └── repository/
│ └── view/
│
├── NetworkUtil/
│ ├── api_exception.dart
│ └── dio_provider.dart
│
├── source/
│ ├── home_source/
│ └── search_source/
│
├── Util/
│ └── number_extention.dart
│
└── Widgets/
├── aviz_custom_textfiled.dart
├── chached_network_image.dart
├── hot_promotion_card.dart
└── normal_promotion_card.dart
GetIt is used to manage dependencies and provide application services through a centralized dependency injection container.
The application registers the Dio HTTP client, remote data sources, and repositories during application startup.
locator.registerSingleton<Dio>(DioProvider.createDio());
locator.registerFactory<IHomeDatasource>(
() => HomeRemoteDatasource(locator.get()),
);
locator.registerFactory<IHomeRepository>(
() => HomeRepository(locator.get()),
);This approach keeps dependencies separated from the UI and makes the data layer easier to maintain and test.
Dio is used as the primary HTTP client for communicating with remote APIs.
The networking layer contains:
- Dio configuration
- API exception handling
- Remote data sources
- Repository abstractions
This structure keeps API-related responsibilities separated from the presentation layer.
Hive is included for local data persistence, providing lightweight local storage for application data.
The project also uses Hive's Flutter integration and code generation support.
The application includes ZarinPal integration for handling online payment functionality.
Uni Links is used to provide deep linking capabilities, allowing the application to respond to links that can navigate users into specific parts of the application.
Make sure you have the following installed:
- Flutter SDK
- Dart SDK
- Android Studio or VS Code
- Git
Clone the repository:
git clone https://github.com/CodeminTech/aviz-marketplace.gitNavigate to the project directory:
cd aviz-marketplaceInstall dependencies:
flutter pub getRun the application:
flutter runThe application is developed with Flutter and is structured for mobile platforms.
- Android
- iOS
This project was developed to demonstrate the implementation of a real-world marketplace application using Flutter.
It focuses on modular application structure, API integration, state management, dependency injection, local persistence, payment integration, and reusable UI components.
CodemonTech
Flutter Developer | Mobile Application Developer
🔗 GitHub: GitHub: https://github.com/CodeminTech
