Ishtopchi - Flutter asosida ishlab chiqilgan mobil ilova bo‘lib, ish beruvchilar va ish qidiruvchilar uchun mo‘ljallangan. Ish beruvchilar vakansiya e‘lonlarini joylashtirishi, ish qidiruvchilar esa mos keladigan ishlarni qidirish, filtrlar orqali natijalarni toraytirish va yoqtirgan e‘lonlarni saqlash imkoniyatiga ega. Ilovaga Google Account yoki Telegram OTP orqali kirish mumkin. Ilova zamonaviy, foydalanuvchilarga qulay interfeys orqali ish topish va e‘lon joylash jarayonini soddalashtiradi.
Ilova quyidagi funksiyalarni taqdim etadi:
- Ish e‘lonlari joylash:
- Ish beruvchilar vakansiya e‘lonlarini yaratishi, tavsif, maosh, joylashuv va boshqa detallarni kiritishi mumkin.
- Rasm yuklash (
image_picker) va joylashuvni xaritada belgilash (flutter_map,geolocator).
- Qidiruv va filtrlar:
- E‘lonlarni viloyat, tuman, ish turi, bandlik turi (To‘liq kunlik, Vaqtincha, Masofaviy, Kunlik ish, Loyihaviy asosda, Amaliyot) va narx oralig‘i bo‘yicha filtrlash.
- Kalit so‘zlar orqali qidiruv (
http,dio).
- Yoqtirganlar ro‘yxati:
- Foydalanuvchilar yoqtirgan e‘lonlarni saqlab qo‘yishi mumkin (
get_storage).
- Foydalanuvchilar yoqtirgan e‘lonlarni saqlab qo‘yishi mumkin (
- Autentifikatsiya:
- Google Account orqali kirish (
google_sign_in,firebase_auth). - Telefon raqami orqali Telegram OTP tasdiqlash (
mask_text_input_formatter,pin_code_fields).
- Google Account orqali kirish (
- Interaktiv UI:
- Moslashuvchan dizayn (
flutter_screenutil). - Animatsiyali kartochkalar (
flutter_staggered_animations). - Yuklashda skeleton effekti (
shimmer) va pull-to-refresh (pull_to_refresh_flutter3).
- Moslashuvchan dizayn (
- Xarita integratsiyasi:
- Ish joylashuvini xaritada ko‘rsatish (
flutter_map,latlong2). - Geolokatsiya xizmatlari (
geolocator,permission_handler).
- Ish joylashuvini xaritada ko‘rsatish (
- Keshlangan rasmlar:
- E‘lon rasmlarini tezkor yuklash uchun keshlash (
cached_network_image).
- E‘lon rasmlarini tezkor yuklash uchun keshlash (
- Kirish sahifasi:
- Foydalanuvchilarni ilova bilan tanishtirish uchun interaktiv sahifa (
introduction_screen).
- Foydalanuvchilarni ilova bilan tanishtirish uchun interaktiv sahifa (
Ilova quyidagi kutubxonalar va texnologiyalardan foydalanadi (pubspec.yaml asosida):
- Framework: Flutter (Dart, SDK ^3.7.2)
- State boshqaruvi:
get(^4.7.2) - Reaktiv holat boshqaruvi. - Ma‘lumotlar saqlash:
get_storage(^2.1.1) - Mahalliy saqlash. - Autentifikatsiya:
google_sign_in(^6.3.0) - Google orqali kirish.firebase_auth(^5.5.3) - Firebase autentifikatsiyasi.firebase_core(^3.13.0) - Firebase integratsiyasi.mask_text_input_formatter(^2.9.0) vapin_code_fields(^8.0.1) - Telefon raqami va OTP kiritish.
- API va tarmoq:
dio(^5.8.0+1) vahttp(^1.4.0) - REST API so‘rovlari.
- UI va dizayn:
flutter_screenutil(^5.9.3) - Moslashuvchan UI.lucide_icons_flutter(^3.0.0) vaicons_plus(^5.0.0) - Ikonkalar.dropdown_button2(^2.3.9) - Kengaytirilgan dropdown menyular.shimmer(^3.0.0) - Skeleton loading effekti.flutter_staggered_animations(^1.1.1) - Animatsiyali ro‘yxatlar.pull_to_refresh_flutter3(^2.0.2) - Yuklash/yangilash funksiyasi.introduction_screen(^3.1.14) - Kirish sahifasi.sign_in_button(^3.2.0) - Kirish tugmalari.
- Xarita va geolokatsiya:
flutter_map(^8.1.1) vaflutter_map_animations(^0.9.0) - Xarita ko‘rsatish.latlong2(^0.9.1) - Joylashuv kordinatalari.geolocator(^14.0.2) vapermission_handler(^12.0.1) - Geolokatsiya va ruxsatlar.
- Rasmlar va fayllar:
image_picker(^1.1.2) - Rasm tanlash.cached_network_image(^3.4.1) - Keshlangan tarmoq rasmlari.path_provider(^2.1.5) - Fayl tizimi bilan ishlash.
- Boshqa:
url_launcher(^6.3.1) - Tashqi havolalarni ochish.
- Flutter SDK: >=3.7.2
- Dart: >=2.17.0
- Android Studio yoki VS Code
- Internet aloqasi (API so‘rovlari uchun)
- Firebase loyihasi (Google Sign-In va Firebase Auth uchun)
- Telegram Bot API (OTP tasdiqlash uchun)
-
Repozitoriyani klonlash:
git clone https://github.com/To-Rex/ishTopchi.git cd ishTopchi -
Bog‘liqliklarni o‘rnatish:
pubspec.yamlfaylida quyidagi kutubxonalar mavjud:dependencies: flutter: sdk: flutter cupertino_icons: ^1.0.8 google_sign_in: ^6.3.0 sign_in_button: ^3.2.0 introduction_screen: ^3.1.14 get: ^4.7.2 get_storage: ^2.1.1 firebase_core: ^3.13.0 lucide_icons_flutter: ^3.0.0 icons_plus: ^5.0.0 dio: ^5.8.0+1 firebase_auth: ^5.5.3 url_launcher: ^6.3.1 mask_text_input_formatter: ^2.9.0 pin_code_fields: ^8.0.1 dropdown_button2: ^2.3.9 image_picker: ^1.1.2 path_provider: ^2.1.5 http: ^1.4.0 flutter_map: ^8.1.1 flutter_map_animations: ^0.9.0 latlong2: ^0.9.1 geolocator: ^14.0.2 permission_handler: ^12.0.1 cached_network_image: ^3.4.1 flutter_staggered_animations: ^1.1.1 pull_to_refresh_flutter3: ^2.0.2 flutter_screenutil: ^5.9.3 shimmer: ^3.0.0
Bog‘liqliklarni o‘rnatish:
flutter pub get
-
Sozlamalar:
- Firebase sozlamalari:
- Firebase loyihasi yarating va
google-services.json(Android) vaGoogleService-Info.plist(iOS) fayllariniandroid/appvaios/Runnerjildlariga qo‘shing. main.dartda Firebase’ni ishga tushiring:void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); ScreenUtil.init( BoxConstraints(maxWidth: 414, maxHeight: 896), designSize: Size(414, 896), ); runApp(MyApp()); }
- Firebase loyihasi yarating va
- Telegram OTP:
- Telegram Bot API tokenini va OTP tasdiqlash endpointini
ApiControllerda sozlang (masalan,/auth/otp). - Telefon raqami formati
+998bilan boshlanishini ta’minlang.
- Telegram Bot API tokenini va OTP tasdiqlash endpointini
- Xarita:
flutter_mapuchun xarita provayderi (masalan, OpenStreetMap) API kalitini sozlang.
- Ruxsatlar:
- Android uchun
AndroidManifest.xml:<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
- iOS uchun
Info.plist:<key>NSLocationWhenInUseUsageDescription</key> <string>Ish joylashuvini aniqlash uchun ruxsat kerak</string> <key>NSPhotoLibraryUsageDescription</key> <string>E‘lon uchun rasm tanlash</string> <key>NSCameraUsageDescription</key> <string>E‘lon uchun rasm olish</string>
- Android uchun
- Firebase sozlamalari:
-
Ilovani ishga tushirish:
flutter run
-
Kirish:
- Google Account:
sign_in_buttonorqali Google bilan kirish. - Telegram OTP: Telefon raqamini kiritish (
mask_text_input_formatter) va OTP kodini tasdiqlash (pin_code_fields). - Kirish ma‘lumotlari
get_storageda saqlanadi.
- Google Account:
-
E‘lonlarni ko‘rish:
- Asosiy ekranda e‘lonlar grid shaklida ko‘rinadi (
flutter_staggered_animations). - Qidiruv maydoni orqali kalit so‘zlar bo‘yicha qidirish (
http,dio). - Yuklanayotganda skeleton effekti (
shimmer) va pull-to-refresh (pull_to_refresh_flutter3).
- Asosiy ekranda e‘lonlar grid shaklida ko‘rinadi (
-
Filtrlash:
- Filtr dialogida (
dropdown_button2):- Viloyat va Shahar/Tuman: API orqali dinamik yuklanadi.
- Narx oralig‘i:
min_pricevamax_pricekiritish. - Ish turi: Kategoriyalar (masalan, IT, Marketing).
- Bandlik turi: To‘liq kunlik, Vaqtincha, Masofaviy, Kunlik ish, Loyihaviy asosda, Amaliyot.
- “Qo‘llash” tugmasi filtrlangan e‘lonlarni yuklaydi, “Tozalash” filtrlarni olib tashlaydi.
- Filtr dialogida (
-
Yoqtirganlar ro‘yxati:
- E‘lon kartochkasidagi “Yoqtirish” tugmasi orqali saqlash (
get_storage). - Saqlangan e‘lonlar maxsus bo‘limda ko‘rinadi.
- E‘lon kartochkasidagi “Yoqtirish” tugmasi orqali saqlash (
-
E‘lon joylash:
- Ish beruvchilar e‘lon yaratishda rasm (
image_picker), joylashuv (flutter_map,geolocator) va boshqa detallarni kiritadi. - Ma‘lumotlar API orqali serverga yuboriladi (
dio).
- Ish beruvchilar e‘lon yaratishda rasm (
-
Xarita va geolokatsiya:
- Ish joylashuvi xaritada ko‘rsatiladi (
flutter_map,flutter_map_animations). - Foydalanuvchi joylashuvi
geolocatororqali aniqlanadi.
- Ish joylashuvi xaritada ko‘rsatiladi (
-
Kirish sahifasi:
- Yangi foydalanuvchilar uchun interaktiv kirish sahifasi (
introduction_screen).
- Yangi foydalanuvchilar uchun interaktiv kirish sahifasi (
ishTopchi/
├── lib/
│ ├── common/
│ │ └── widgets/
│ │ └── refresh_component.dart
│ ├── config/
│ │ └── theme/
│ │ ├── app_colors.dart
│ │ └── app_dimensions.dart
│ ├── controllers/
│ │ ├── api_controller.dart
│ │ └── funcController.dart
│ ├── core/
│ │ ├── models/
│ │ │ ├── post_model.dart
│ │ │ ├── user_me.dart
│ │ │ └── wish_list.dart
│ │ └── utils/
│ │ └── responsive.dart
│ ├── modules/
│ │ └── main/
│ │ ├── views/
│ │ │ ├── main_content.dart
│ │ │ ├── show_filter_dialog.dart
│ │ │ └── skeleton_post_card.dart
│ │ └── widgets/
│ │ └── post_card.dart
├── assets/
├── pubspec.yaml
└── README.md
- API ulanmadi:
ApiControllerda server URL va endpointlarini tekshiring (masalan,https://api.ishtopchi.uz). - Google Sign-In xatosi:
google-services.jsonvaGoogleService-Info.plistfayllari to‘g‘ri joylashtirilganligini tekshiring.- Android uchun SHA-1 kalitini Firebase konsolida qo‘shing.
- Telegram OTP ishlamayapti:
- Telefon raqami formati (
+998901234567) va server tasdiqlash endpointini tekshiring.
- Telefon raqami formati (
- Xarita ko‘rinmayapti:
flutter_mapuchun API kaliti (masalan, OpenStreetMap) sozlanganligiga ishonch hosil qiling.permission_handlerorqali joylashuv ruxsatlari so‘ralganligini tekshiring.
- UI noto‘g‘ri ko‘rinishda:
flutter_screenutilsozlamalarini tekshiring vaScreenUtil.initmain.dartda chaqirilganligiga ishonch hosil qiling:ScreenUtil.init( BoxConstraints(maxWidth: 414, maxHeight: 896), designSize: Size(414, 896), );
Loyihaga hissa qo‘shmoqchi bo‘lsangiz:
- Repozitoriyani fork qiling: https://github.com/To-Rex/ishTopchi.
- Yangi branch yarating (
git checkout -b feature/your-feature). - O‘zgarishlarni kiriting va commit qiling (
git commit -m "Yangi funksiya qo‘shildi"). - Push qiling (
git push origin feature/your-feature). - Pull Request oching.
Bu loyiha MIT Litsenziyasi ostida tarqatiladi. Batafsil ma‘lumot uchun LICENSE faylini ko‘ring.
Savollar yoki takliflar uchun:
- Email: support@ishtopchi.uz
- Telegram: @IshtopchiSupport