Flutter Notes
202 subscribers
82 photos
8 videos
1 file
168 links
Avval bajaring.
Keyin to'g'ri bajaring.
Undan keyin esa yaxshiroq bajaring.

Android Notes : @android_notes_bek

Muallif : @Otabek_Nabijonov
Download Telegram
Flutter dastur versiyasi.

Hech ahamiyat berganmisiz, yangi dastur yaratganingizda, pubspec.yaml fayl ichida, dasturimizning dastlabki versiyasi quyidagicha bo'ladi:

version : 1.0.0+1


Plus belgisidan chap tomondagi nuqta bilan ajratilgan 3 xonalik raqam bu versiya raqami, o'ng tomondagi esa build raqami.

Dasturimizning yangi versiyasini chiqarish uchun pubspec.yaml fayldan versiyani o'zgartirgandan so'ng, android uchun build qilish orqali, android fayl ichidagi local.properties fayldagi versiyalarni to'g'irlab olamiz.

Google Play dastur versionCode uchun ruhsat bergan limit : 2100000000.

Manba : Link

#Flutter
👍2
Dartda "Callable" obyektlar.

Dart-da barcha ma'lumot turlari (data types) class va obyektlardir. Biz "int" kalit so'zi bilan o'zgaruvchi yaratganda, aslida "int" class-ning obyektini yaratgan bo'lamiz.

Endi dart-dagi funksiyalarni ko'rib chiqaylik. Dartda ishlatadigan har bir funksiya asosan Function class-ning obyektidir. Ammo funksiya o'zining noyob xususiyatiga egaligi sabab biz bu funksiyani chaqira olamiz.

Biz yaratadigan funksiyalar obyekt bo'lsa, ularni qanday chaqiramiz ?

Buning javobi esa mahsus "call()" metodi.

Dart chaqiriladigan (callable) obyektlarni qo'llab-quvvatlaydi. Bu shuni anglatadiki, agar biron bir sinf ichida call metodi e'lon qilingan bo'lsa, siz ushbu sinf obyektini chaqirishingiz mumkin.

Manbalar:
1. Official doc : Link
2. Medium : Link
3. GFG : Link

#Dart
Dartda "trim", "trimLeft" va "trimRight" metodlari.

trim - matndagi boshlanuvchi (leading) va tugaydigan (trailing) barcha bo'sh joylarni kesadi.

trimLeft - matndagi boshlanuvchi barcha bo'sh joylarni kesadi.

trimRight - matndagi tugaydigan barcha bo'sh joylarni kesadi.

#Dart
#Savol

Quyidagi 2 ta class o'rtasidagi farq qanday va qay biri optimal yechim ?
Dartda anonim funksiyalar.

Anonim funksiyalar, shuningdek lambda funksiyalari yoki Callback deb ham ataladi, bu nomga ega bo'lmagan funksiyalardir. Ular Dart-dagi kuchli xususiyat bo'lib, yanada ixcham va moslashuvchan kodni yaratishga imkon beradi.

Bu funksiyalarda nom yo'qligi ularni qisqa, bir martalik foydalanish holatlari uchun ideal qiladi. Nol yoki undan ortiq parametrlarni qabul qilishlari mumkin.

Dartda funksiyalar birinchi darajali fuqaro (citizen)-lardir, ya'ni ular o'zgaruvchilarga tayinlanishi, argument sifatida berilishi yoki boshqa funksiyalardan qaytarilishi mumkin.

Manbalar:
1. Official doc : Link
2. Medium : Link
3. GFG : Link

#Dart
2👍1
Dartda StringBuffer haqida.

StringBuffer- satrlarni samarali birlashtirish uchun sinf.

write*() metodlaridan foydalangan holda string-ni bosqichma-bosqich qurishga ruxsat beradi. String-lar faqat "toString" chaqirilganda bitta satrga birlashtiriladi.

String bu bitta yoki qo'sh tirnoq ichiga olingan belgilar to'plami va u o'zgarmasdir (immutable). Bundan farqli o'laroq, StringBuffer ham bitta yoki qo'sh tirnoq ichiga olingan belgilar to'plamidir, lekin u o'zgaruvchan (mutable).

String sinfida har xil operatsiyalarni bajarganimizda, har safar xotirada yangi obyekt yaratiladi, u har bir bajarilgan operatsiya uchun xotirani sarflaydi. StringBuffer bilan bunday emas, har gal biz turli amallarni bajarganimizda, o'rniga bir xil obyekt o'zgartiriladi.

Manbalar:
1. Official doc : Link
2. Medium : Link

#Dart
🆒2
Forwarded from MobilDasturchi.Uz (Azizbek Asqaraliyev)
MaterialAppdagi title nima uchun kerakligini bilasizmi?

MaterialAppdagi title bu ilovaning boshqa oynaga swap qilishdagi oynada chiqadigan nomi hisoblanadi, shuning uchun "flutter demo" yozuvini alishtirib qo'yish kerak!


🤩 @dasturchiMobile
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Responsive vs Adaptive UI.

Responsive UI turli o'lchamlarga mos keladigan yagona tartib (layout)-ni saqlab, ekran o'lchamiga mos ravishda sozlanadi.

Adaptive UI har bir platformaning o'ziga xos xususiyatlaridan kelib chiqib, tajribani optimallashtiradigan turli qurilmalar uchun alohida layout-larni taqdim etadi.

Responsive UI qurish uchun paketlar : Link

Manbalar:
1. Official doc : Link
2. Medium : Link
3. GFG : Link

#Flutter
2
Flutterda "hot-reload" ichki jarayonlari.

1. Hot Reload tugmasi bosilganda.
Qayta yuklash (hot-reload) boshlanganda, Flutter uskuna (tool)-laridagi HotRunner klassi boshqaruvni o'z qo'liga oladi. Ushbu sinf butun jarayonni tartibga solish uchun javobgardir.

HotRunner birinchi navbatda ilovaning hot-reload-ga ruhsat berilgan holatda ekanligini tekshiradi. U oxirgi kompilyatsiyadan keyin qaysi fayllar o'zgartirilganligini aniqlaydi. U "VM Service Protocol" yordamida Dart VM bilan bog'lanadi.

2. Manba kodini yangilash (Dart VM code injection).
Dart VM yangilangan kodni oladi va uni ishlaydigan dasturga kiritadi.

VM o'zgartirilgan kutubxonalarning yangi versiyalarini yaratadi. Yangilanishlarni samarali boshqarish uchun u "copy-on-write" mexanizmidan foydalanadi. Kodning eski versiyalari, agar kerak bo'lsa, ortga qaytishga ruxsat berish uchun xotirada saqlanadi.

3. JIT yordamida kodni kompilyatsiya qilish.
Dart VM-ning JIT kompilyatori yangi kodni tezda kompilyatsiya qiladi.

U optimallashtirish uchun ichki keshlash (inline caching) va "type feedback" usullardan foydalanadi. Kompilyator jarayonni tezlashtirish uchun avvalgi kompilyatsiyani iloji boricha qayta ishlatishga harakat qiladi.

4. Eski va yangi vidjet daraxtlarini solishtirish.
Flutter framework, yangilanishi kerak bo'lgan narsalarni aniqlash uchun eski vidjet daraxtini yangisi bilan taqqoslaydi.

Bu jarayon Flutterning vidjet va render obyektlari oʻrtasidagi moslashtirish qatlami boʻlgan Element tree-dan foydalanadi. U vidjet identifikatori va holatini saqlashni boshqara oladigan samarali farqlash algoritmidan foydalanadi.

5. Ta'sir qilingan vidjetlarni aniqlash va qayta tiklash.
Taqqoslash asosida Flutter qaysi vidjetlarni qayta qurish kerakligini aniqlaydi va ularni rekonstruksiya qilishni rejalashtiradi.

BuildOwner klassi bu jarayonni boshqaradi va qayta qurish kerak bo'lgan elementlar ro'yxatini saqlaydi. Joriy ilova holatini saqlab qolish uchun iloji boricha state obyektlari saqlanadi.

6. Xotira va axlat yig'ish (garbage collector)-ni boshqarish.
Qayta yuklash jarayonida Flutter oqish (leak)-ning oldini olish va silliq ishlashini ta'minlash uchun xotirani diqqat bilan boshqarishi kerak.

Dart VM axlat yig'uvchisi endi kerak bo'lmagan narsalarni tozalash uchun ishlaydi. Ramka xotira buzilishini minimallashtirish uchun mavjud ob'ektlarni iloji boricha qayta ishlatishga harakat qiladi.

7. Real time-da UI-ni yangilash.
Va nihoyat, Flutter hot-reload paytida kiritilgan o'zgarishlarni aks ettirish uchun UI-ni yangilaydi.

RendererBinding klassi bu jarayonni tartibga solib, layout, painting va kompozitsiyani boshqaradi. Flutter saqlab qolgan renderlash tizimidan foydalanadi, bu unga UI-ni faqat o'zgargan qismlarini samarali yangilash imkonini beradi.

Manba : Link

#Flutter
👍2
Flutterda Platforma channel-lar haqida.

Flutter-da Platform channel-lar Dart kodi va platformaga xos kod (masalan, Java/Kotlin Android uchun yoki iOS uchun Swift, Objective-C) o'rtasida aloqa o'rnatish uchun muhim vositalardir. Ushbu channel-lar Flutter ilovalariga Dart orqali to'g'ridan-to'g'ri kirish imkoni bo'lmagan nativ funksiyalardan foydalanish imkonini beradi.

Method channel.
Asosan nativ tomonga bir martalik so'rovlar qilish uchun ishlatiladi. Bu sizga nativ platformada metodlarni chaqirish va javobni qaytib olish imkonini beradi. Method channel asinxron metodlarni qo'llab-quvvatlaydi, ya'ni Flutter ilovangiz nativ tomondan javob kutayotganda ishlashni davom etaveradi.

Event channel.
Bu nativ tomondan Flutterga ma'lumotlarni uzatish (stream) uchun mo'ljallangan. Bu sensor ma'lumotlari yoki real vaqtda bildirishnoma (notification)-lar kabi doimiy yangilanishlarni olishingiz kerak bo'lganda foydali. Event kanal Flutter-ga doimiy ravishda nativ tomondan ma'lumotlarni yuborish uchun oqim (stream)-lardan foydalanadi.

Flutterdagi Event va Metod channel-lari ham ikki tomonlama aloqani qo‘llab-quvvatlaydi, lekin ular ko‘pincha turli senariylarda qo‘llaniladi.

Manbalar:
1. Official doc : Link
2. Article : Link
3. Medium : Link
4. Example code : Link

#Flutter
👍4
Flutterda Expanded vs Flexible vidjetlari farqi.

Flexible (moslashuvchan).
Bu vidjet bola (child) vidjetiga ota vidjetining asosiy o‘qi (main axis) bo‘ylab mavjud bo‘sh joyni egallash imkonini beradi. Bola vidjetning boshqa moslashuvchan bola vidjletlarga nisbatan qancha joy egallashi kerakligini "flex" qiymat berish orqali belgilanadi, "fit" maydoni dastlabki holatda FlexFit.loose.

Expanded (kengaytirilgan).
Bu vidjet Flexible class-dan voris olgan va "fit" maydoniga FlexFit.tight berilgan bo‘lib, uning bolasi asosiy o‘q bo‘ylab bo‘sh joyni to‘ldirishga majbur bo‘ladi.

Manbalar:
1. Flexible: Link
2. Expanded: Link
3. Medium: Link
4. Linkedin: Link

#Flutter
👍1
print() vs debugPrint() vs log() ?

print().
Dart SDK da mavjud bo'lgan, terminal/console ga habar chiqarish uchun parametr sifatida Object? qabul qiladigan metod. Dastur ichidagi barcha print metod natijalarini "flutter logs" terminal kod orqali debug va release rejimida ko'rish mumkin.

Agar print-ga berilayotgan habar malum limitdan (4 * 1024) oshib ketsa, Android tomonidan bazi log qatorlari tashlab ketilishi mumkin. Faqat debug rejimida log-larni terminalga chiqarish uchun Flutter-ga tegishli kDebugMode maydon orqali tekshirish mumkin.

debugPrint().
Flutter SDK da mavjud bo'lgan, terminalga habar chiqarish uchun parametr sifatida faqat String qabul qiladigan metod. Odatda bu metod har bir operatsion tizimning chop etish (print) chegarasidan qochish uchun ishlatiladi. Bu release rejimida ham chop etiladi, lekin uni faqat debug rejimida ishlashi uchun sozlashingiz mumkin.

log().
Bu funksiya dart:developer kutubxonasining bir qismi boʻlib, tizimli log-lar uchun ishlatiladi. Bu sizga turli darajadagi (info, warning, error) xabarlarni log-ga kiritish imkonini beradi. print() va debugPrint() dan farqli o'laroq log() ko'pincha ishlab chiqarish (production) muhitida muhim voqea (event)-lar va xatolarni konsolni keraksiz chiqishlar bilan bezovta qilmasdan yozib olish uchun ishlatiladi.

Manbalar:
1. Official doc : Link
2. Article : Link
3. StackOverFlow : Link
4. Linkedin : Link

#Flutter
Dartda to'plamlar (collections).

Dartda asosiy to'plam turlari 3 ta, List, Set va Map interfeyslar.

List.
Bu dublikatlarni o'z ichiga olishi mumkin bo'lgan elementlarning tartiblangan to'plami. List-lar indekslanadi, ya'ni siz elementlarga ularning joylashuvi bo'yicha kirishingiz (access) mumkin.

Set.
Bu noyob elementlarning tartibsiz (unordered) to'plamidir. Set takroriy qiymatlarga ruxsat bermaydi, ya'ni bir qiymatning yagona (unique) bo'lishini taminlaydi.

Map.
Bu kalit-qiymat (key-value) juftliklari to'plami bo'lib, har bir kalit yagonadir (unique). Map-lar ma'lumotlarni qidirishni samarali qilish uchun qiymatlarni kalitlar bilan bog'lash imkonini beradi.

Dart shuningdek, "dart:collection" kutubxonasi orqali maxsus to'plamlar, Queue, LinkedList va boshqa to'plam interfeyslar bilan birlashgan class-larni taqdim etadi.

Manbalar:
1. Official doc: Link
2. Article: Link
3. Dart collection: Link
4. GFG: Link

#Dart
👍3
Ozgina kayfiyat )
🤣72😢1
Flutterda Dynamic island.

Dynamic Island - bu birinchi marta Apple tomonidan iPhone 14 Pro va Pro Max modellari bilan taqdim etilgan UI kontseptsiyasi. Bu UX (foydalanuvchi tajribasi)-ni to'xtatmasdan notification, alert va davom etayotgan harakatlarni ko'rsatishning uzluksiz usulini ta'minlash uchun mo'ljallangan.

Funksiya ekranning yuqori qismidagi tabletka shaklidagi kesmani ishlatadi va joriy faoliyat yoki bildirishnoma asosida uning hajmi va ichidagi kontentni dinamik ravishda o'zgartiradi.

Dinamik orolning asosiy xususiyatlari.
Jonli harakatlar: U musiqa tinglash, timer yoki sport natijalari kabi real vaqtda ma'lumotlarni ko'rsatishi mumkin, bu esa foydalanuvchilarga ilovalarni ochmasdan xabardor bo'lishni osonlashtiradi.

Bildirishnomalar: An'anaviy bildirishnoma banneri o'rniga foydalanuvchilar umumiy interfeysni yaxshilagan holda ogohlantirishlarni yanada integratsiyalashgan tarzda ko'rishlari mumkin.

Ko'p vazifa (multi-tasking): foydalanuvchilar bir vaqtning o'zida bir nechta ilovalar bilan ishlashlari mumkin, chunki Dinamik orol turli manbalardan ma'lumotlarni ko'rsatishi mumkin.

Manbalar:
1. Medium: Link
2. Medium: Link
3. Medium: Link
4. Video: Link
5. Video: Link

#Flutter
Dartdagi Loop-lar farqi.

Dartda eng keng tarqalgan iteratsiya mexanizmlari:

For Loop: chegara (range) ma'lum bo'lganda boshqariladigan iteratsiya uchun idealdir. Umuman olganda, for sikl Dartda eng tezidir, ayniqsa sikl o'zgaruvchisi sikldan tashqarida e'lon qilingan va qo'lda oshirilganda.

While Loop: Agar takrorlashlar soni oldindan ma'lum bo'lmaganda va holat (condition)-ga qarab boshqarishda ishlatiladi. While sikl For sikl kabi tezdir, ayniqsa iteratsiyalar soni oldindan belgilanmagan sharoitlarda foydalanilganda. Biroq, agar vaziyat murakkab bo'lsa yoki u ko'proq xarajat (overhead)-larni o'z ichiga olsa, ular biroz sekinroq bo'lishi mumkin.

Do-While Loop: while sikliga o'xshaydi, lekin kamida bitta bajarilishni kafolatlaydi, chunki shart sikldan keyin tekshiriladi.

For…in Loop: sikli to'plam (collection)-larni takrorlashning qisqacha usulini taklif qiladi, o'qish oson, lekin unumdorlik (performance)-da potentsial xarajatga ega.

forEach method: Bu metod to'plamlar bo'yicha funksional iteratsiyaga imkon beradi, ko'pincha o'qilishi osonligi uchun maqtovga sazovor. Bu metod For yoki While sikllariga qaraganda sekinroq, chunki u qoʻshimcha xarajatlarni qoʻshadigan funksiya chaqiruvlarini oʻz ichiga oladi.

Map method: Bu metod to'plamdagi har bir elementni o'zgartirib, yangi ro'yxat (List)-ni qaytaradi. Kollektsiyalarni funksional uslubda o'zgartirish uchun ishlatiladi. Bu metod For yoki While sikllariga qaraganda sekinroq, chunki u yangi to'plamlarni yaratadi va qo'shimcha jarayon (processing)-ni o'z ichiga oladi.

Manba : Link

#Dart
🆒1
Flutter 3.27 versiyasi.

Bu versiyada framework, engine va ekotizim bo‘yicha yangilanishlar, jumladan, Impeller bilan ishlash va Cupertino vidjetlarini yaxshilash bo‘yicha yangilanishlar bor. Bundan tashqari, DevTools-da qiziqarli yangi xususiyatlar taqdim etilgan.

O'zgarishlar:
1. Cupertino vidjetlarida yangilanishlar.
2. Yaxshilangan Material theme va ba'zi button-lardagi kichik o'zgarishlar.
3. CarouselView-da qo'shimcha xususiyatlar.
4. Yaxshilangan Text selection.
5. Row va Column bolalariga bo'sh joy (spacing) berish imkoniyati.
6. Yangi Android qurilmalari uchun Impleller, eskilari uchun Skia default holatda.
7. IOS qurilmalarida UI bilan bog'liq muammolar tuzatildi.
8. Web-ga oid bir qancha yangilanishlar.
9. "build.gradle.kts" fayllarini support qilish.
va boshqalar...

Manba : Link

#Flutter
1
Dartda List konstruktorlari.

1. List.filled - list hajmini oldindan berish, qaysi qiymat bilan to'ldirish va qiymat o'sib boruvchi bo'lish yoki yo'qligini begilash uchun.

List.filled(int length, E fill, {bool growable = false});

2. List.generate - filled kabi aniq hajmdagi listni yaratadi, farqli tomoni, har bir qiymatni "generator" funksiyasi orqali belgilash mumkin.

List.generate(int length, E generator(int index), {bool growable = true});

3. List.from - mavjud iteratsiya (list, map, set)-dan yangi list yaratadi, elementlar toifasidan kelib chiqib turni belgilaydi va har xil turdagi elementlarni qabul qilishi mumkin.

List.from(Iterable elements, {bool growable = true});

4. List.of - mavjud iteratsiyadan yangi list yaratadi, ko'rsatilgan turni talab qiladi. Bu barcha elementlarning shu turda bo'lishini belgilaydi va "type-safety" ni ta'minlaydi.

List.of(Iterable<E> elements, {bool growable = true});

5. List.unmodifiable - elementlarini o'zgartirib bo'lmaydigan list yaratadi.

List.unmodifiable(Iterable elements);

6. List.empty - bo'sh list yaratadi va growable parametriga ko'ra list uzunligini nazorat qilish mumkin.

List.empty({bool growable = false});

Manba: Link

#Dart
3