Flutter mobile app for BeeNext, a student-focused campus marketplace for browsing, listing, editing, and deleting secondhand items inside the BINUS community.
Built with Flutter, Dart, BLoC, and a REST API integration with the BeeNext backend.
- Auth - login, signup, persistent JWT session, and logout
- Home Feed - fresh campus listings with product cards and notifications preview
- Search Catalog - search listings and filter by product category
- Product Detail - view image, price, status, seller, notes, and contact flow
- Create Listing - add product details and upload up to 5 images
- Edit Listing - update owned listing details and optionally replace photos
- Delete Listing - remove owned listing from the backend
- My Listings - manage active products from the profile flow
- Profile - view account data, update password, and change phone number
- Notifications - view marketplace activity and product-related messages
- Framework: Flutter
- Language: Dart SDK
^3.8.1 - State Management:
flutter_bloc+equatable - Networking:
httpwrapped byApiClient - Environment:
flutter_dotenv - Session Storage:
shared_preferences - Media Picker:
image_picker - Permissions:
permission_handler - External Links:
url_launcher - UI Assets: SVG/logo assets and
GoogleSansFlex
- Flutter SDK with Dart
^3.8.1 - Android emulator, iOS simulator, or physical device
- Running BeeNext backend or deployed backend URL
Check local setup:
flutter doctorflutter pub getCreate a .env file from the example file:
copy .env.example .envConfigure the backend URLs:
API_BASE_URL=https://beenext-backend-production.up.railway.app/api
API_ASSET_BASE_URL=https://beenext-backend-production.up.railway.appFor Android emulator with a local backend, use a host like:
API_BASE_URL=http://10.0.2.2:3000/api
API_ASSET_BASE_URL=http://10.0.2.2:3000# Development
flutter run
# Analyze code
flutter analyze
# Run tests
flutter test# Android APK
flutter build apk --release
# Android App Bundle
flutter build appbundle --release
# iOS
flutter build ipa --releaseMOBILE_BeeNext/
|-- assets/
| |-- fonts/ # GoogleSansFlex font
| |-- icons/ # BeeNext logos and app icons
| `-- illustrations/ # Landing page visuals
|-- lib/
| |-- bloc/ # BLoC state management
| | |-- auth_bloc/
| | |-- home_feed_bloc/
| | |-- listing_create_bloc/
| | |-- my_listings_bloc/
| | |-- product_detail_bloc/
| | |-- profile_bloc/
| | `-- search_catalog_bloc/
| |-- data/
| | |-- models/ # Session and user models
| | `-- services/ # API clients, data sources, repositories
| |-- helpers/
| | |-- api_settings/ # API constants
| | |-- di/ # Repository providers
| | |-- errors/ # AppException and error handling
| | |-- routes/ # Route generator
| | |-- theme/ # App theme
| | `-- utils/ # Shared helpers
| |-- pages/
| | |-- auth/ # Login, signup, load pages
| | |-- marketplace/ # Home, search, add/edit, detail, listings
| | `-- profile/ # Profile page
| |-- widgets/
| | |-- marketplace/ # Marketplace UI components
| | |-- profile/ # Profile modals
| | `-- shared/ # Shared UI components
| |-- app.dart # Root MaterialApp
| `-- main.dart # App entry point
|-- pubspec.yaml
`-- test/
- API calls live in
lib/data/services/marketplace_remote_data_source.dartandauth_remote_data_source.dart. - Product create and edit use
multipart/form-data. - Shared image rendering is handled by
AppNetworkImageso product cards keep consistent image sizing. - Most user-facing flows are driven by BLoC events and states under
lib/bloc/.