pubspec.yaml — Flutter loyihasining asosiy konfiguratsiya fayli bo'lib, u metama'lumotlar, bog'liqliklar va ilova resurslarini belgilaydi. U YAML formatida yozilgan va Dart paket menejeri tomonidan qayta ishlanadi. Dart documentation, 2025 ma'lumotlariga ko'ra, ushbu faylning har bir satri qurish, nashr qilish va versiyalashga ta'sir qiladi. pubspec.yaml Flutter ekotizimida Podfile, build.gradle va Info.plist fayllarini almashtirib, ularning funksiyalarini yagona manifestda birlashtiradi.
Asosiy fikrlar
pubspec.yaml — YAML formatidagi manifest fayli bo'lib, pub paket menejeri Dart va Flutter loyihalarini boshqarish uchun foydalanadi. U loyihaning ildizida joylashgan va har bir flutter pub get buyrug'ida qayta ishlanadi. Konfiguratsiya bir nechta fayllarga tarqalgan boshqa platformalardan farqli o'laroq, Flutter barcha ehtiyojlar uchun bitta markazlashtirilgan manifestdan foydalanadi.
Fayl metama'lumotlarni o'z ichiga oladi: loyiha nomi, tavsifi, versiyasi, muallifi. Ushbu ma'lumotlar paketni pub.dev da nashr qilishda va App Store va Google Play uchun ilova qurishda ishlatiladi. description maydoni paket qidiruv natijalarida ko'rsatiladi, shuning uchun u ma'lumotli bo'lishi va boshqa dasturchilar kutubxonani topishi uchun kalit so'zlarni o'z ichiga olishi kerak.
To'g'ri pubspec.yaml bo'lmasa, Flutter loyihasi qurilmaydi. Sintaksis xatolar yoki noto'g'ri chekinishlar darhol Error on line X xabari bilan kompilyatsiya xatosiga olib keladi. YAML bo'shliqlarga sezgir: bitta ortiqcha bo'shliq ma'lumotlar strukturasini o'zgartiradi, tabulyatsiya esa sintaksis xatosini keltirib chiqaradi. Shuning uchun pubspec.yaml ni qo'lda tahrirlashda YAML sintaksisini ajratib ko'rsatadigan muharrirdan, masalan, Flutter uchun rasmiy kengaytmali VS Code dan foydalanish muhimdir.
pubspec.yaml majburiy va ixtiyoriy bo'limlardan iborat. Har bir bo'lim loyihaning ma'lum bir konfiguratsiya jihatiga javobgardir. Bo'limlarning tartibi muhim emas, lekin jamiyat konvensiyasiga ko'ra ierarxiya saqlanadi: metama'lumotlar, muhit, bog'liqliklar, resurslar, platformalar.
name maydoni paketning noyob identifikatorini snake_case formatida, faqat kichik lotin harflari, raqamlar va pastki chiziqlardan iborat qilib belgilaydi. description maydoni — pub.dev da nashr qilish uchun majburiy bo'lgan, 180 belgigacha bo'lgan loyihaning qisqa tavsifi. Tavsif paketning maqsadini tushuntirishi, nomni takrorlamasligi va repozitoriy qidiruv optimallashtirish uchun kalit so'zlarni o'z ichiga olishi kerak.
name: my_flutter_app
description: Flutter bilan vazifalarni boshqarish ilovasi
publish_to: 'none'
version maydoni semantik versiyalash major.minor.patch dan foydalanadi, ortiqcha belgisidan keyin ixtiyoriy qurish raqami bilan (1.0.0+1). environment bo'limi moslikni ta'minlash uchun Dart va Flutter SDK ning minimal va maksimal versiyalarini belgilaydi. Agar SDK ning yangi versiyasi loyiha kodi bilan mos kelmaydigan muhim o'zgarishlarni o'z ichiga olsa, kompilyatsiya tushunarli xato xabari bilan to'xtatiladi.
version: 1.0.0+1
environment:
sdk: '>=3.2.0 <4.0.0'
flutter: '>=3.16.0'
dependencies bo'limi ilova ishlashi uchun zarur bo'lgan paketlarni sanab o'tadi. dev_dependencies bo'limi test, kod generatsiyasi va ishlab chiqish uchun paketlarni o'z ichiga oladi — ular reliz qurilishiga kirmaydi. Bog'liqliklarning bo'linishi ishlash uchun juda muhimdir: dependencies dagi har bir paket yakuniy APK yoki IPA hajmini, shuningdek qo'shimcha kutubxonalarning ishga tushirilishi sababli ilovaning ishga tushish vaqtini oshiradi.
dependencies:
flutter:
sdk: flutter
http: ^1.2.0
provider: ^6.1.0
shared_preferences: ^2.2.0
cached_network_image: ^3.3.0
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ^5.4.0
build_runner: ^2.4.0
flutter bo'limi resurslar, shriftlar va platforma parametrlarini sozlash uchun kichik bo'limlarni o'z ichiga oladi. Resurslar aniq fayllar yoki butun kataloglar ko'rsatilgan paths massivi orqali ulanadi. Barcha yo'llar pubspec.yaml ga nisbatan emas, balki loyihaning ildiz katalogiga nisbatan ko'rsatiladi. Bu ko'pincha tajribasiz Flutter dasturchilarida chalkashlikka sabab bo'ladigan muhim nuance.
flutter:
uses-material-design: true
assets:
- assets/images/
- assets/icons/
- assets/config.json
- assets/data/translations/
fonts:
- family: RobotoMono
fonts:
- asset: fonts/RobotoMono-Regular.ttf
- asset: fonts/RobotoMono-Bold.ttf
weight: 700
- asset: fonts/RobotoMono-Italic.ttf
style: italic
Assets ni pubspec.yaml orqali ulash fayllarni runtime da AssetBundle orqali mavjud qiladi. Bu rasm, JSON, matn fayllari va boshqa resurslar uchun ishlaydi. Flutter turli ekran o'lchamlarini avtomatik qo'llab-quvvatlaydi: agar siz images/2x/ va images/3x/ ni joylashtirsangiz, Flutter qurilmaning device pixel ratio asosida rasmning tegishli versiyasini tanlaydi. Buning uchun assets da faqat images/ ildiz papkasini ko'rsatish kifoya.
Maxsus shriftlar family va shriftlar ro'yxati bilan fonts bo'limi orqali qo'shiladi. pubspec.yaml o'zgartirilgandan so'ng sozlamalarni qo'llash uchun flutter pub get bajarilishi kerak. Shriftlar MaterialApp mavzusida global, shuningdek, ma'lum vidjetlarda lokal ravishda ishlatilishi mumkin. Har bir shrift uchun weight (100-900) va style (normal, italic) belgilanishi mumkin, bu Flutter-ga kodda FontWeight va FontStyle dan foydalanganda shrift faylini to'g'ri tanlash imkonini beradi.
pub bog'liqlik manbalarini ko'rsatishning bir necha usullarini qo'llab-quvvatlaydi: pub.dev, Git repozitoriylari, lokal yo'llar va xususiy repozitoriylar. Manba tanlash ishlab chiqish bosqichiga bog'liq: barqaror versiyalar uchun pub.dev, fork va maxsus o'zgartirishlar uchun Git, parallel ishlab chiqilayotgan kutubxonalar uchun lokal yo'l ishlatiladi.
| Manba | Sintaksis | Misol |
|---|---|---|
| Pub.dev | ^1.0.0 | http: ^1.2.0 |
| Git | git: url | git: https://github.com/user/pkg.git |
| Lokal yo'l | path: ./lib | path: ../my_package |
| Hosted | hosted: name | hosted: my_private_repo |
^version operatori mos versiyani anglatadi: ^1.2.0 >=1.2.0 va <2.0.0 versiyalariga ruxsat beradi. Bu CocoaPods dagi ~> operatori va npm dagi Caret operatorining analogidir. pub barcha cheklovlarni qondiradigan versiya kombinatsiyasini topadigan SAT-hal qiluvchi algoritmi orqali Dependency Hell ni avtomatik hal qiladi. Agar bunday kombinatsiya mavjud bo'lmasa, pub ziddiyatli paketlarni ko'rsatadigan batafsil xabarni chiqaradi.
pubspec.lock fayli bog'liqliklarning aniq versiyalarini belgilaydi. Ilovalar uchun versiya nazorat tizimida saqlanishi kerak, bu jamoadagi barcha mashinalarda takrorlanadigan qurilishlarni ta'minlash uchun. Kutubxonalar uchun pubspec.lock repozitoriyga kiritilmaydi, chunki kutubxona foydalanuvchilari uni bog'liqliklarning turli versiyalari bilan ishlatish imkoniyatiga ega bo'lishlari kerak. flutter pub upgrade buyrug'i pubspec.yaml cheklovlariga muvofiq barcha bog'liqliklarni yangilaydi, flutter pub outdated esa qaysi paketlarni yangilash mumkinligini ko'rsatadi.
Ilovani pub.dev da nashr qilish uchun sozlamalar publish_to bo'limida ko'rsatiladi. 'none' qiymati paketning tasodifiy nashr qilinishini oldini oladi, bu ichki yoki ommaviy bo'lmagan loyihalar uchun muhimdir. Agar publish_to mavjud bo'lmasa, pub paketni standart pub.dev da nashr qilishga harakat qiladi, bu esa koddagi istalmagan sizib chiqishga olib kelishi mumkin.
flutter bo'limi platforma parametrlarini o'z ichiga oladi: platforma fayllarini avtomatik yaratish uchun generate va funksionallikni modulli yuklash uchun deferred-components. generate: true parametri Flutter-ga flutter create --platforms orqali yangi platformalar qo'shilganda platforma loyihalarini (iOS, Android, Web) avtomatik yaratish va yangilash imkonini beradi. Ushbu parametrsiz platforma papkalarining tuzilishi pubspec.yaml bilan sinxronlashuvni yo'qotishi mumkin.
flutter:
generate: true
deferred-components:
- name: photoEditor
libraries:
- package:photo_editor/library.dart
platforms bo'limi paket uchun maqsadli platformalarni belgilaydi. Ilovalar uchun u flutter create orqali ma'lum platforma qo'llab-quvvatlashi qo'shilganda avtomatik aniqlanadi. Platformalar pubspec.yaml tahrirlash orqali qo'lda qo'shilishi va olib tashlanishi mumkin. Deferred Components ilovaning qismlarini talab bo'yicha yuklash imkonini beradi, o'rnatish hajmini kamaytiradi — bu, ayniqsa, o'yinlar va kam ishlatiladigan kontenti ko'p bo'lgan ilovalar uchun dolzarbdir.
Paket nashr qilinganda pub pubspec.yaml ning barcha maydonlarini repozitoriy talablariga muvofiqligini tekshiradi. Majburiy name, version va description maydonlarining yo'qligi nashr qilishni rad etishga olib keladi. Qo'shimcha ravishda litsenziyaning to'g'riligi, README.md va CHANGELOG.md mavjudligi tekshiriladi. Kod analizatorining (dart analyze) xatolari bo'lgan paketlar ham validatsiyadan o'tmaydi. Muvaffaqiyatli nashrdan so'ng paket pub.dev da bir necha daqiqa ichida mavjud bo'ladi.
dependency_overrides bo'limi tranzitiv bog'liqliklardagi cheklovlarni e'tiborsiz qoldirib, paket versiyasini majburiy belgilash imkonini beradi. Bu kuchli, ammo xavfli mexanizm: noto'g'ri ishlatilsa, kutubxonalarning mos kelmasligiga olib kelishi mumkin. dependency_overrides ni faqat vaqtincha, konfliktlarni hal qilish yoki yangi versiyalarni sinash uchun ishlating. Asosiy bog'liqliklar tuzatilgandan so'ng, override uzoq muddatli istiqbolda loyihaning bog'liqlik grafigini buzmaslik uchun olib tashlanishi kerak.
executables bo'limi pubspec.yaml da paket faollashtirilganda pub PATH ga o'rnatadigan bajariladigan skriptlarni ko'rsatish imkonini beradi. Bu Dart da yozilgan CLI vositalari, masalan build_runner yoki dart_code_metrics uchun foydalidir. dart pub global activate buyrug'i paketni global o'rnatadi va executables da ko'rsatilgan skriptlarni terminaldan mavjud qiladi. Ilovalar uchun executables odatda ishlatilmaydi, chunki kirish nuqtasi lib/main.dart dagi main orqali aniqlanadi.
Ko'p beriladigan savollar
YAML formati chekinishlar uchun tabulyatsiya belgilarini taqiqlaydi. Har bir joylashtirish darajasi uchun to'liq ikki bo'shliqdan foydalaning. Chekinish xatosi flutter pub get ishga tushirilganda kutilmagan belgi haqidagi xabar bilan sintaksis xatosiga olib keladi. VS Code Flutter plagini bilan avtomatik ravishda to'g'ri chekinishlarni qo'yadi.
dependencies ilovaning yakuniy qurilishiga kiritiladi va foydalanuvchi qurilmalarida runtime da mavjud bo'ladi. dev_dependencies faqat ishlab chiqish va test bosqichida ishlatiladi — ular reliz APK yoki IPA ga kirmaydi. Misol: flutter_test ishlab chiqarish qurilishi hajmini oshirmaslik uchun faqat dev_dependencies da bo'lishi kerak.
flutter pub upgrade buyrug'i pubspec.yaml da ko'rsatilgan cheklovlarga muvofiq barcha bog'liqliklarni eng so'nggi versiyalarga yangilaydi. Bitta paketni yangilash uchun flutter pub upgrade
^ belgisi mos versiyalashni (caret) anglatadi. ^1.2.0 1.2.0 dan 2.0.0 gacha (2.0.0 kirmaydi) har qanday versiyani bildiradi. Bu pubspec.yaml da bog'liqliklarni ko'rsatish uchun standart operator bo'lib, API dagi katta o'zgarishlar xavfisiz tuzatishlar va kichik yangilanishlarni olishni kafolatlaydi.
Ha, ilovalar uchun pubspec.lock bir xil qurilishlarni ta'minlash uchun repozitoriyda majburiydir. Kutubxonalar uchun uni kiritmaslik tavsiya etiladi, shunda kutubxona foydalanuvchilari bog'liqliklarning eng so'nggi mos versiyalarini oladi. Bu Ruby dagi Gemfile.lock va Node.js dagi package-lock.json qoidalariga o'xshash konvensiyadir.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.