Modern Point of Sale System for Restaurant Management
Features β’ Tech Stack β’ Installation β’ Structure β’ API
RestoApp is a comprehensive mobile Point of Sale (POS) application designed for restaurants. Built with Flutter, it provides role-based access for different staff members including Admin, Waiter, Cashier, and Kitchen staff.
This mobile app connects to the RESTAUS backend system and shares the same MySQL database (restaus_db), enabling seamless integration between web and mobile platforms.
- Dashboard - Overview with stats (total menus, tables, today's orders, revenue)
- Menu Management - Full CRUD operations with search and category filter
- Table Management - Add, edit, delete tables with status management
- User Management - Staff account management with role assignment
- Settings - Restaurant configuration (coming soon)
- Table grid view with real-time status
- Order creation with menu catalog
- Cart system with special notes
- Order submission to kitchen
- Kitchen Display System (KDS)
- Order queue management
- Item status updates
- New order alerts
- Pending orders list
- Payment processing
- Multiple payment methods (Cash, QRIS, Debit)
- Receipt generation
- Secure login with JWT tokens
- Role-based access control
- Auto-login with session persistence
- Secure token storage
| Category | Technology |
|---|---|
| Framework | Flutter 3.x |
| Language | Dart 3.3+ |
| State Management | flutter_bloc 8.x |
| Dependency Injection | get_it + injectable |
| Routing | go_router 13.x |
| HTTP Client | Dio 5.x |
| Local Storage | flutter_secure_storage |
| Code Generation | freezed, json_serializable |
| Architecture | Clean Architecture |
lib/
βββ core/ # Core utilities and configurations
β βββ constants/ # App constants, API endpoints
β βββ di/ # Dependency injection setup
β βββ error/ # Exception and failure classes
β βββ network/ # Network info, connectivity
β βββ router/ # GoRouter configuration
β βββ theme/ # Colors, typography, spacing
β βββ utils/ # Logger, helpers
β
βββ data/ # Data layer
β βββ datasources/ # Remote data sources (API calls)
β βββ models/ # Data transfer objects
β βββ repositories/ # Repository implementations
β
βββ domain/ # Domain layer
β βββ entities/ # Business entities (freezed)
β βββ repositories/ # Repository interfaces
β βββ usecases/ # Business logic use cases
β
βββ presentation/ # Presentation layer
β βββ blocs/ # BLoC state management
β βββ pages/ # UI screens
β βββ widgets/ # Reusable components
β
βββ app.dart # App widget with MaterialApp
βββ main.dart # Entry point
- Flutter SDK 3.19.0 or higher
- Dart SDK 3.3.0 or higher
- Android Studio / VS Code with Flutter extensions
- Backend server running (RESTAUS API on port 3000)
-
Clone the repository
git clone https://github.com/yourusername/restoapp.git cd restoapp -
Install dependencies
flutter pub get
-
Generate code (freezed, json_serializable, injectable)
dart run build_runner build --delete-conflicting-outputs
-
Configure API endpoint
Edit
lib/core/constants/api_endpoints.dart:static const String baseUrl = 'http://localhost:3000/api'; // For Android emulator: 'http://10.0.2.2:3000/api' // For iOS simulator: 'http://localhost:3000/api' // For physical device: 'http://YOUR_IP:3000/api'
-
Run the app
# For Chrome (Web) flutter run -d chrome # For Android flutter run -d android # For iOS flutter run -d ios
The app connects to the RESTAUS backend API. Ensure the backend is running on http://localhost:3000.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/login |
User login |
| POST | /api/auth/register |
User registration |
| POST | /api/auth/logout |
User logout |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/menus |
Get all menus |
| GET | /api/menus/:id |
Get menu by ID |
| POST | /api/menus |
Create menu |
| PUT | /api/menus/:id |
Update menu |
| DELETE | /api/menus/:id |
Delete menu |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tables |
Get all tables |
| POST | /api/tables |
Create table |
| PUT | /api/tables/:id |
Update table |
| PATCH | /api/tables/:id/status |
Update status |
| DELETE | /api/tables/:id |
Delete table |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/users |
Get all users |
| POST | /api/users |
Create user |
| PUT | /api/users/:id |
Update user |
| PUT | /api/users/:id/password |
Reset password |
| DELETE | /api/users/:id |
Delete user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/categories |
Get all categories |
The app uses a custom orange-based Material Design theme:
| Color | Hex | Usage |
|---|---|---|
| Primary | #F57C00 |
Main brand color |
| Secondary | #4CAF50 |
Success states |
| Background | #FFF8F0 |
App background |
| Surface | #FFFFFF |
Cards, dialogs |
| Error | #E53935 |
Error states |
| Phase | Status | Completion |
|---|---|---|
| Phase 1: Foundation | β Complete | 100% |
| Phase 2: Authentication | β Complete | 100% |
| Phase 3: Admin Module | β Complete | 100% |
| Phase 4: Waiter Module | π Pending | 0% |
| Phase 5: Kitchen Module | π Pending | 0% |
| Phase 6: Cashier Module | π Pending | 0% |
| Phase 7: Receipt & Extras | π Pending | 0% |
| Phase 8: Polish & Testing | π Pending | 0% |
Overall Progress: 55%
# Run all tests
flutter test
# Run with coverage
flutter test --coverage
# Run specific test file
flutter test test/widget_test.dart- β Android (SDK 21+)
- β iOS (12.0+)
- β Web (Chrome, Edge, Firefox)
- β Windows
- β macOS
- β Linux
# Analyze code
flutter analyze
# Format code
dart format lib/
# Generate code (freezed, injectable)
dart run build_runner build --delete-conflicting-outputs
# Watch mode for code generation
dart run build_runner watch --delete-conflicting-outputs
# Clean build
flutter clean && flutter pub get- RESTAUS - Backend API (Node.js + Express + MySQL)
- restaus-app - Web Admin Dashboard (Next.js)
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
For support, open an issue in the repository or contact the development team.
Made with β€οΈ using Flutter