Endüstriyel saha ekipmanlarının (HMI, LED Panel, LCD, Endüstriyel PC) arıza tespit ve bakım süreçlerini dijitalleştirmek amacıyla geliştirilmiş, kurumsal standartlarda bir cross-platform Flutter uygulamasıdır.
Sistem, rol tabanlı erişim kontrolü (Role-Based Access Control) mimarisine sahip olup iki temel kullanıcı rolüne göre özelleştirilmiştir:
| Rol | Sistem Yetkileri & Operasyon Kapsamı |
|---|---|
| Saha Personeli (Personnel) | Envanterdeki cihazları listeler, anlık renk kodlu sağlık durumlarını günceller (Working / Faulty / Missing), arıza durumlarında dahili kamera ile fotoğraf kanıtı çeker ve sisteme real-time rapor gönderir. |
| Yönetici (Admin) | Sahadan gelen tüm arıza bildirimlerini kronolojik canlı akışla izler, fotoğraf kanıtlarını inceler, envanter sağlık metriklerini grafiklerle takip eder ve mevcut oturumunu kapatmadan sisteme yeni kullanıcı (Admin/Personel) ekler. |
- Gereksinimler
- Kurulum & Lokalde Ayağa Kaldırma
- Firebase Yapılandırma Adımları
- Test Hesapları & Yetkilendirme (Admin Access)
- Kullanım Kılavuzu & Ekran Görüntüleri (Usage)
- Proje Mimarisi & Klasör Yapısı
- CI/CD Otomasyon Boru Hattı (Pipeline)
Uygulamayı yerel ortamınızda sorunsuz şekilde ayağa kaldırmak için aşağıdaki bağımlılıkların ve SDK sürümlerinin kurulu olması gerekmektedir:
- Flutter SDK:
v3.10.1veya üzeri (Dart SDK^3.10.1) - Firebase CLI:
v12.0.0veya üzeri (npm install -g firebase-toolsile yüklenebilir) - Android SDK: API Level 33 ve üzeri (Android derlemeleri için)
- Xcode:
v14.0veya üzeri (iOS derlemeleri için - macOS gereklidir) - Aktif bir Firebase Projesi
git clone <repository-url>
cd digital_maintenance_tracker
flutter pub get
Proje, kurumsal kod mimarisine ve katı lint kurallarına tam uyumlu olarak sıfır uyarı (zero warnings) politikasıyla geliştirilmiştir. Kod kalitesini doğrulamak için:
flutter analyze
flutter test
flutter run
Uygulamanın bulut tabanlı servislerle eşzamanlı çalışabilmesi için bir Firebase projesine bağlanması şarttır.
Firebase Console üzerinden yeni bir proje oluşturun ve sol menüden şu 3 servisi aktif edin:
- Authentication (Kimlik Doğrulama):
Build > Authentication > Sign-in methodsekmesinden Email/Password sağlayıcısını aktif edin. - Cloud Firestore (NoSQL Veritabanı):
Build > Firestore Databasesekmesinden veritabanını Start in test mode olarak oluşturun. - Cloud Storage (Medya Deposu):
Build > Storagesekmesinden depolama alanını test modunda aktif edin.
# 1. Firebase hesabınızla giriş yapın
firebase login
# 2. FlutterFire CLI aracını global etkinleştirin
dart pub global activate flutterfire_cli
# 3. Proje kök dizininde çalıştırın
flutterfire configure
Bu komut tamamlandığında lib/firebase_options.dart dosyası tüm platform anahtarlarıyla otomatik olarak üretilecektir.
Önemli Güvenlik Bilgisi: Sistem güvenliği ve rol suistimallerini engellemek adına, uygulamada dışarıya açık serbest bir "Yönetici (Admin) Kayıt Ol" ekranı bulunmamaktadır. İnceleme ekibinin platformlar arası anlık (real-time) veri akışını ve rol hiyerarşisini kesintisiz deneyimleyebilmesi için aşağıdaki gerçek hesaplar Firebase üzerinde hazır tanımlanmıştır:
| Kullanıcı Rolü | E-posta (Email) | Şifre (Password) | Önerilen Test Senaryosu |
|---|---|---|---|
| Yönetici (Admin 1) | admin@test.com |
123456 |
Rapor akışını canlı izleme, anlık fotoğraf kontrolü, envanter istatistik takibi ve yeni personel ekleme. |
| Yönetici (Admin 2) | admin2@test.com |
123456 |
Eşzamanlı çoklu yönetici takibi ve bulut senkronizasyon doğrulamaları. |
| Saha Personeli | user@test.com |
123456 |
Cihaz durum güncelleme işlemleri, kameradan kanıt yükleme ve bildirim gönderme akışı. |
Kullanıcı giriş yaptığında, uygulama Firebase Auth servisinden dönen UID değerini alır ve Firestore'daki users/{uid} dokümanındaki role alanını sorgular:
role == "admin" → Yönetici Konsolu (Admin Dashboard) paneline yönlendirilir.
role == "personnel" → Saha Personeli (Field Portal) ekranına yönlendirilir.
Uygulamanın işlevsel akış adımları, dökümandaki tüm isterleri eksiksiz karşılayacak şekilde aşağıda ekran görüntüleriyle desteklenerek senaryolaştırılmıştır:
Uygulama başlatıldığında kullanıcıyı premium indigo-dark temalı bir giriş arayüzü karşılar. Başarılı girişte rol kontrolü arka planda tamamlanarak doğru ekrana yönlendirme yapılır.
Saha personeli hesabı (user@test.com) ile giriş yapıldığında, envanter listesi renk kodlu sağlık durumlarıyla gelir.
- Arıza Bildirim Akışı: Personel listeden bir cihaza dokunduğunda alttan işlem paneli (
BottomSheet) açılır. Durum Faulty (Arızalı) seçildiği an cihaz kamerası tetiklenir, çekilen arıza fotoğrafı bytes formatında işlenerek Firebase Storage'a yüklenir ve rapora eklenir.
Yöneticiler, saha operasyonlarının tüm çıktılarını ve kullanıcı yönetimini tek bir ekrandan, üst sekmeler (TabBar) aracılığıyla eşzamanlı (real-time) olarak izler.
| 3.1. Canlı Rapor Akışı | 3.2. Envanter Sağlık Metrikleri | 3.3. Kesintisiz Kullanıcı Tanımlama |
|---|---|---|
| Personelin sahadan anlık gönderdiği fotoğraflı ve zaman damgalı tüm arıza bildirimleri kronolojik sırada en üstte canlı akar. | Sistem genelindeki çalışan, arızalı ve eksik cihaz sayısal dağılımlarını kartlarla özetler. Test için demo veri yükleme butonuna sahiptir. | Yönetici, kendi oturumunu kapatmak zorunda kalmadan sisteme yeni admin veya personel tanımlayabilir. Arka planda ikincil Firebase instance'ı yönetilir. |
Proje, sürdürülebilir temiz kod prensiplerine (Clean Code) uygun olarak katmanlı yapıda kurgulanmıştır:
lib/
├── main.dart # Uygulama giriş noktası, tema yönetimi ve ilk yönlendirme
├── firebase_options.dart # FlutterFire CLI tarafından üretilen yapılandırma dosyası
├── models/ # Veri Yapıları Katmanı
│ ├── device.dart # Endüstriyel cihaz veri modeli
│ ├── maintenance_log.dart # Sahadan gelen arıza/bakım kayıt modeli
│ └── user_model.dart # Kullanıcı hesap ve rol modeli
├── providers/ # Durum Yönetimi (State Management)
│ └── auth_provider.dart # Oturum kontrolü ve rollerin reaktif yönetimi
├── screens/ # Arayüz Bileşenleri (UI Katmanı)
│ ├── login_screen.dart # Oturum açma ekranı
│ ├── admin_screen.dart # Yönetici konsolu (3 fonksiyonel sekmeli ana gövde)
│ └── personnel_screen.dart # Saha personeli listeleme ve kamera ekranı
└── services/ # Altyapı Servisleri (Infrastructure)
└── firebase_service.dart # Firebase Auth, Firestore ve Storage motoru
| Paket Adı | Sürüm | Kullanım Amacı |
|---|---|---|
firebase_core |
^4.10.0 | Firebase çekirdek servislerinin uygulamada başlatılması. |
firebase_auth |
^6.5.2 | Güvenli e-posta/şifre tabanlı kimlik doğrulama işlemleri. |
cloud_firestore |
^6.5.0 | Canlı (real-time) NoSQL veri senkronizasyonu ve akışları (Streams). |
firebase_storage |
^13.4.2 | Çekilen arıza fotoğraflarının bulut ortamında depolanması. |
image_picker |
^1.2.2 | Cihaz kamerasına erişim ve fotoğraf çekim süreçleri. |
provider |
^6.1.5+1 | Reaktif UI güncellemeleri ve merkezi state takibi. |
intl |
^0.20.2 | Zaman damgalarının (Timestamp) tarih/saat formatına çevrilmesi. |
Projede, dökümandaki istek doğrultusunda otomatize edilmiş bir entegrasyon ve dağıtım hattı kurulmuştur. Yapılandırma dosyasına .github/workflows/firebase-app-distribution.yml adresinden erişilebilir.
- Repository Checkout: Proje kaynak kodları sanal makineye çekilir.
- Setup Java JDK 17: Android derleme süreçleri için Java 17 ortamı kurulur.
- Setup Flutter SDK: Flutter kararlı (
stable) SDK kanalı kurulur. - Get Dependencies:
flutter pub getile bağımlılıklar önbelleğe alınır. - Static Code Analysis:
flutter analyzeile kod kalitesi denetlenir. - Execute Unit Tests:
flutter testile yazılmış birim testler çalıştırılır. - Build Release APK: Analizlerden geçen kod üretim çıktısı üretir:
flutter build apk --release. - Automated Firebase App Distribution: Derlenen APK dosyası, test ekibine ulaştırılmak üzere Firebase App Distribution platformuna otomatik olarak dağıtılır.
GitHub Actions pipeline adımının Firebase'e erişebilmesi için GitHub projenizin Settings -> Secrets and Variables -> Actions sekmesinden şu iki anahtarı tanımlamanız gerekmektedir:
FIREBASE_APP_ID: Firebase Android uygulama panelinden alınan benzersiz Uygulama Kimliği.FIREBASE_TOKEN:firebase login:cikomutuyla üretilen kurumsal CI erişim token'ı.