A Flutter Project - Cloud Inventory management app
A complete cloud web and Mobile app for Managing Inventory for custom order & schedules.
- If you like this project, please consider giving it a star (*) and follow me at GitHub & YouTube.
This project is a community version and is absolutely free for private use.
click here for Demo & Video tutorials
Frontend: Flutter
Backend: Firebase
- Healthcare Management app using Flutter
- Vaccine Distribution App
- Pandemic Contact Tracing, Visitor Management, Mobile Assets/Employee Attendance App
- CRM Cloud App
- Store millions of records with lightening fast data retrieval
- Live | real time inventory monitoring
- Match Exception processes
- Inventory sync
- Advance AI Predictive ML Analytics
- Real time Analytics
- Multi user, multi role, multi-device (web, mobile & desktop)
- Camera, hand held, AI counting, picture recognition, QR Code reader
- Paperless documentation, receipt, invoice & payments
- Working with Flutter UI, Material 3 design
- Social Authentication & Role based access, secured app
- complete customizable UI + CRUD
- Live Charts
- Phone/Handheld QR Code | Bar Code scan
- Phone auth, real time notifications, live alerts, SMS, EMAIL, WhatsAPP API (Pro)
- 2 -way authentication
- Live Approval workflow
- Payment API
- Live customer support chat | call | channel communications
- Doc sign
- Product Image recognition
- Vehicle license plate reader
- Employee Scan | time punching
- Install Flutter environment
- Download This GitHub repository
- install Flutter packages *pub get) and Flutter web -> Flutter create .
- Setup firebase account/project
- Copy Firebase Project Config settings and replace variable firebaseConfig at src/web/index.html
- enable Firebase social authentications
- update Firebase Rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /roles/{document} {
// fix this, anyone who is logged in, can read these document & passwords
// allow read: if isSignedIn();
allow read, write: if false;
}
match /users/{document} {
allow create: if true;
allow read : if isSignedIn() && (isDocOwner() || isAdmin());
allow update: if isSignedIn() && isDocOwner() && onlyContentChanged();
allow update, delete: if isAdmin();
}
match /person/{document=**} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Vaccine/{doc=**} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/OPD/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Lab/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Rx/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /person/{document}/Messages/{doc} {
allow create: if true;
// allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
// fix this later
allow read, update : if true;
allow delete : if isSignedIn() && isAdmin();
}
match /appointments/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /records/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
}
match /vaccine/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
}
match /purchase/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /msr/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /vendor/{document} {
allow create: if true;
allow read, update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /warehouse/{document} {
allow create: if true;
allow read: if isSignedIn()
allow update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
match /item/{document} {
allow create: if true;
allow read: if isSignedIn()
allow update : if isSignedIn() && (isDocOwner() || isAdmin());
allow delete : if isSignedIn() && isAdmin();
}
// helper functions
function isSignedIn() {
return request.auth.uid != null;
}
function onlyContentChanged() {
return request.resource.data.role == resource.data.role;
// make sure user is not signing in with any role or changin his role during update
}
function isDocOwner() {
return request.auth.uid == resource.data.author;
}
// function isDocCreater() {
// return request.auth.uid == request.resource.data.author;
// }
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "admin";
}
// function isEmployee() {
// return get(/databases/$(database)/documents/settings/$(request.auth.uid)).data.role == "employee";
// }
}
}
https://github.com/flutter/samples/tree/main/material_3_demo