FieldLens is an offline-first Flutter application for conducting dilapidation surveys in the field. It allows inspectors to capture defect details, attach photos, log condition issues, and export professional reports without requiring internet access.
Built for mobile use in real-world site conditions, FieldLens focuses on speed, reliability, and usability in environments with limited connectivity, poor lighting, or high-glare conditions.
- Overview
- Key features
- Architecture
- Project structure
- Prerequisites
- Getting started
- Usage guide
- Database schema
- Exporting reports
- Security and offline-first design
- Testing
- Deployment
- Contributing
- License
- Contact
FieldLens helps inspectors record dilapidation defects efficiently and consistently. The app keeps all inspection data locally on the device and supports quick workflows for:
- creating a user profile and signing in
- starting a new inspection
- adding defect information with code, category, and notes
- attaching photos from the camera or gallery
- exporting reports in PDF or Excel format
This is designed for field teams that need dependable reporting even when connectivity is unavailable.
- Full inspection workflow works without internet connectivity
- Local SQLite storage for inspection data and user records
- No server dependency for day-to-day inspection work
- Local signup and login flow
- Secure password hashing with SHA-256 and salt
- Session persistence for returning users
- Photo capture or attachment
- Item numbering and location tagging
- Defect classification such as crack, bent, and damage
- Impact category selection: Minor, Moderate, Major
- Quick-comment presets and free-text notes
- Inspector dashboard with summary data
- Recent inspection history
- Quick actions for new inspections and exports
- Profile access and logout support
- PDF report output with structured inspection tables
- Excel export for sharing and spreadsheet analysis
- Device-friendly export flow for email, messaging, and local storage
- Mobile-first responsive layout
- Material 3 design
- High-contrast, touch-friendly interface for outdoor use
The application follows a lightweight Clean Architecture structure:
- Core layer: database logic, models, providers, and utilities
- UI layer: screens, widgets, and navigation
- State management: Provider
This separation helps keep the app easier to maintain and easier to extend as the inspection workflow grows.
fieldlens/
├── android/ # Android project files
├── ios/ # iOS project files
├── lib/
│ ├── core/
│ │ ├── database/ # SQLite operations
│ │ ├── models/ # User and inspection data models
│ │ ├── providers/ # Provider-based state management
│ │ └── utils/ # Helpers and hashing utilities
│ ├── ui/
│ │ ├── screens/ # Auth, dashboard, assessment, export screens
│ │ └── widgets/ # Reusable UI widgets
│ ├── main.dart # App entry point
│ └── ...
├── test/ # Test suite
├── analysis_options.yaml
├── LICENSE
├── pubspec.yaml
├── README.md
├── ARCHITECTURE.md
├── QUICKSTART.md
└── ...
Before running the project, make sure you have:
- Flutter SDK 3.5.0 or newer
- Android Studio for Android development, or Xcode for iOS development
- Git
- An Android or iOS emulator, or a physical device
git clone https://github.com/aishzy/fieldlens.git
cd fieldlensflutter pub getflutter runAndroid:
- Minimum SDK: Android 5.0 (API 21)
- Target SDK: Android 14 (API 34)
- Ensure required runtime permissions are granted for camera and storage
iOS:
- Minimum iOS: 12.0
- Add camera and photo usage descriptions in
Info.plist
- Launch the app.
- Create an account with your name, username, email, password, and inspector ID.
- Sign in and open the dashboard.
- Tap New Inspection.
- Capture or attach a photo.
- Add the item number and location.
- Select the defect type and code.
- Choose the impact category.
- Add notes or quick comments.
- Save the inspection record.
- Open the dashboard.
- Select Export Report.
- Choose PDF or Excel.
- Save or share the generated file.
The app stores critical data in local SQLite tables.
CREATE TABLE users (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
username TEXT NOT NULL UNIQUE,
inspector_id TEXT NOT NULL,
password_hash TEXT NOT NULL,
created_at TEXT NOT NULL
);CREATE TABLE inspection_reports (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
item_number TEXT NOT NULL,
photo_path TEXT NOT NULL,
defect_type TEXT NOT NULL,
defect_code TEXT NOT NULL,
location TEXT NOT NULL,
inspector_comments TEXT NOT NULL,
impact_category TEXT NOT NULL,
timestamp TEXT NOT NULL,
is_synced INTEGER DEFAULT 0,
FOREIGN KEY(user_id) REFERENCES users(id)
);FieldLens supports generating both PDF and Excel exports.
- professional table-based inspection layout
- inspector details included in header
- suitable for handover and formal reporting
.xlsxoutput for spreadsheet workflows- compatible with Excel, Google Sheets, and LibreOffice
- useful for data analysis and archive purposes
FieldLens is designed to store inspection data securely on-device.
- Passwords are hashed using SHA-256 with salt
- User credentials are not stored in plaintext
- Inspection records stay local to the device by default
- No cloud sync is required for core inspection tasks
- All essential workflows remain available without network access
Run the unit tests with:
flutter testFor app-level tests or device testing, use the Flutter driver flow if required by your setup.
flutter build apk --releaseor
flutter build appbundle --releaseflutter build ios --releaseContributions are welcome.
- Fork the repository.
- Create a feature branch.
- Make your changes.
- Add or update tests if relevant.
- Open a pull request with a clear summary.
Please keep changes focused, follow Dart style conventions, and document meaningful behavior changes.
This project is licensed under the MIT License.
See LICENSE for the full text.
- Email: amalirfanshaha@gmail.com
- GitHub: https://github.com/aishzy/fieldlens
- Issues: open an issue in this repository for bugs, feature requests, or support questions
Built for reliable field inspections, even without connectivity.