Flutter Organization
Статистика- Последний пост
- 15 апр. 2025 г.
- Последнее чтение
- 13 авг.
- Постов за неделю
- 0
- Всего постов
- 14
- Тип
- открытый
- Язык
- und
- В каталоге с
- 13 авг.
- 1/24сутки в ленте
- —
- 1/48двое суток
- —
- 1/72трое суток
- —
Оценка по просмотрам недавних постов: пост набирает почти всё за первые сутки.
Посты
🌀 Dart'da Future va async/await — nima, qanday ishlaydi, va qanday ishlatilmasligi kerak? 💡 Dastur ishlayotgan paytda ba'zida natija hoziroq emas, kelajakda tayyor bo'lishi mumkin. Masalan: 📡 serverdan ma'lumot kelishi, 🗂 fayl o'qilishi, 🌐 internet orqali so‘rov yuborilishi... Shunday holatlarda Future ishlatiladi. 🔹 Future — bu nima? Future — bu “kelajakdagi natija”. U hozircha yo‘q, lekin bir payt kelib tayyor bo‘ladi — yoki xatolik bilan tugaydi. Future<String> getUserName() { return Future.delayed(Duration(seconds: 2), () => 'Alimardon'); } 👉 Bu funksiya 2 sekunddan keyin 'Alimardon' qiymatini qaytaradi. 🔹 Async/Await — bu qanday ishlaydi? async funksiyani asinxron qiladi — ya’ni uning ichida await ishlatish mumkin bo'ladi. Future<void> greetUser() async { final name = await getUserName(); print('Salom, $name!'); } ➡️ await — Future'ni kutadi. U holda kod “pauza” qiladi, lekin UI muzlamaydi. ⚠️ Nima qilmaslikni maslahat beraman? 🚫 Future ichidagi then() bilan callbacklar zanjiri yasab, kodni spaghetti holga keltirmang: getUserName().then((name) { getUserAge().then((age) { print('Name: $name, Age: $age'); }); }); Bu o‘qish qiyin, debug qilish ham charchatadi. ✅ Nima qilishingiz mumkin? ✅ async/await dan foydalaning. Kodingiz toza, tushunarli va maintainable bo‘ladi: Future<void> showUserData() async { final name = await getUserName(); final age = await getUserAge(); print('Name: $name, Age: $age'); } 📌 Yodda tuting: • await faqat async funksiyada ishlaydi. • Future<void> bu “natijasiz” Future. • Har bir await UI ni muzlatmaydi, lekin kod oqimini kutdiradi. • try/catch bilan xatoliklarni tuting: try { final data = await fetchData(); } catch (e) { print('Xatolik: $e'); } Agar ushbu post foydali bo‘lsa, ulashing, savollaringiz bo‘lsa kommentda yozing @alixr @flutterorg
Flutter Optimization Hack: const bilan rebuild’larni kamaytiring Nega const muhim? const o‘zgaruvchilar va vidjetlar Flutter’da bir marta yaratiladi va qayta ishlatiladi, bu esa: ✅ CPU yuklamasini kamaytiradi ✅ Rebuild’larni minimallashtiradi ✅ UI’ning tezroq ishlashiga yordam beradi Qanday ishlaydi? ❌ Yomon yondashuv: Text( "Hello, Flutter!", style: TextStyle(fontSize: 16), ) Har safar build() chaqirilganda, TextStyle obyekti qayta yaratiladi. ✅ Yaxshi yondashuv: const Text( "Hello, Flutter!", style: TextStyle(fontSize: 16), ) Bu yerda TextStyle obyekti const bo‘lgani uchun Flutter uni qayta ishlatadi va keraksiz rebuild’larning oldi olinadi. Qachon const ishlatish kerak? • O‘zgarmas (immutable) vidjetlar bilan (Text, Icon, SizedBox, Padding, etc) • build() metodi tez-tez ishlaydigan joylarda • Statik va o‘zgarmas matn yoki ikonka elementlarida • Stateless vidjetlarda imkon qadar ko‘proq @alixr @flutterorg
без подписи
Flutter Performance Tip: keepAlive bilan silliqroq skroll qilish Nega keepAlive muhim? Agar keepAlive ishlatilmasa, ekrandan chiqib ketgan vidjetlar dispose bo‘lib, qayta skroll qilinganda yana build bo‘ladi. Bu quyidagi muammolarga olib keladi: • Scroll pozitsiyasi yo‘qoladi • Keraksiz rebuild’lar yuz beradi • Kontent titraydi yoki miltillaydi • Animatsiyalar to‘xtab qoladi ✅ keepAlive dan foydalaning, agar: • Element ichki holat (state) saqlab qolishi kerak bo‘lsa • Vidjet initsializatsiyasi og‘ir (expensive) bo‘lsa • UI animatsiyalar yoki transition’lar ishlatsa • Foydalanuvchi eski elementlarga qayta skroll qilish ehtimoli yuqori bo‘lsa ❌ keepAlive dan foydalanmang, agar: • Ro‘yxatda yuzlab yoki minglab elementlar bo‘lsa • Elementlar juda oddiy va stateless bo‘lsa • Xotira (memory) muammosi bo‘lsa @alixr @flutterorg
Ramadan Kareem mubarak 🌙✨
Senior Flutter dasturchi uchun savollar: https://capricious-kettledrum-e25.notion.site/Interview-preparation-Flutter-7b9b1d9070b946f195c0f24d2810eb3f?pvs=4
Kimda qanday natija bõlgan? Bilaman, kõplar topshirib, reject olgan ekan )
~ EPAMda intervyu jarayoni haqida yozgan edik. ~ Ikkinchi marta intervyuga kirgandan keyin esa boshqa savollar tushganini kòrdim. Boshqalar bilan maslahatlashib bildimki, har xil intervyu oluvchi developerlar har xil savollar berar ekan. Hindlar bilan interyvu qilishdan õzi asrasin 😁. ~ Men ba'zi savollar va ularga javoblarni notionda yozib qóygan edim. Ammo, qarasam, barbir intervyuda biror qolib yõq. Oxiri barbir tajriba va bilimga borib uriladi.
#tests #flutter_tests * Ancha vaqtdan beri deyarli hech narsa yozilmagan ekan. Inshaalloh yaqin orada ko'pchiligimiz qilishdan qochadigan, ko'p vaqt oladi deb o'zimizni ishontirib qo'ygan mavzu - testing bo'yicha darslik chiqarmoqchiman. * Unda testlarning…
EPAMda intervyu jarayoni: 1) Dastlab, Òzbekistonda yashashimni bilgani uchun qaysi tilda gapirishimni afzal kòrishimni sòradi ( rus yoki ingliz ). 2) Bòladigan intervyu haqida qisqacha ma'lumot berib òtildi. Unga kòra, intervyu uch qismga: tanishish, texnik intervyu va kod yozish qismlariga bòlinishi aytildi. ~ Tanishuv qismi: 3) Qayerlarda ishlaganim, qanday proyektlarda qatnashganim ( agar proyektlar maxfiy saqlanishi kerak bòlgan bòlsa, aytsangiz tushunishadi ), Flutterni nega tanlaganim va Software Engineering bilan qancha vaqtdan beri shuğullanishimni sòrashdi. Proyektlarda mening ahamiyatim, kim sifatida qatnashishim, jamoada va yolģiz ishlaganda qanday ishlashim haqida qiziqishdi. ~ Texnik Intervyu 4) Test Driven Development: - Testlarning proyektdagi ahamiyati - Test qachon yozilishi kerakligi - Mockito - Unit Test va Widget Test orasidagi farq 5) Static Alaysys ( Linter rules ) - ahamiyati, qanday ishlatilishi, undagi qoidalar. Masalan, info, warning, erro va hokazo 6) Git. - Git haqida - merge va rebase orasidagi asosiy farq 7) State Managements - BLoC, Provider va GetX haqida fikrimni sòrashdi ( agar middle kerak bòlsa, GetX haqida ular istayotgan narsani ayting ) 8) REST Api, GraphQL, WebSocket 9) Dio va http package'lar haqida 10) Dio va http orasidagi farq. Qaysi biri afzalroq va buning sabablari haqida 11) Retrofit 12) Interceptors 13) Packages for local database. SharedPreference, SQFlite, ObjectBox, Hive. 14) Relational va NoSQL database'lar orasidagi farq. 15) Deeplinks. Navigator 2.0 orqali deeplinking qilishning yòli haqida 16) Implementing Native Code -> Method Channels, Event Channels 17) App LifeCycle for deeplinking ( foreground, background, cool restart ) 18) Flutterni mobile ilovalardan boshqa maqsadlarda foydalanish haqida 19) SOLID haqida 20) Dependency Inversion va Dependency Injection orasidagi farq 😅 21) Statefull Widget Lifecycle. 22) Statefull Widget Lifecycle step by step explanation ( rebuilding times and so on ) Qolgan texnik savollar esimda emas. ~ Koding qismi: 1) Data member'lari hashlanmagan class'lar orasida compering ( equations ) 2) Future, Future microtask, async await, sync vs async kodlash, logging qilish Qolgan savollar aniq esimda emas. Yodimdan kòtarilibdi. Recruiter menga yuborgan xabardan parcha: "Hello! Thank you for taking time to pass a technical interview in our company. Our expert have estimated you as a middle Flutter developer. Unfortunately, now we are looking for senior+ developers and can not make you an offer. Let's be in touch so that in the future we will be able to connect with and offer an interesting position for you!!!" ( 2022 yil, Iyul oyi )
#tests #flutter_tests * Ancha vaqtdan beri deyarli hech narsa yozilmagan ekan. Inshaalloh yaqin orada ko'pchiligimiz qilishdan qochadigan, ko'p vaqt oladi deb o'zimizni ishontirib qo'ygan mavzu - testing bo'yicha darslik chiqarmoqchiman. * Unda testlarning turlari, ahamiyati, testlar aslida vaqt oluvchi emas, uni ancha tejovchi ekani haqida ba'zi bilimlarni bo'lishib o'tmoqchiman. * Video darslik davomida "Weather App" qilib ko'rsatishni rejalashtirdim. Unda biror-bir yerning ob-havosini aniqlash, o'z lokatsiyasi orqali kerakli ob-havoni olib kelish, ob-havoni keshlash va internetsiz ishlatish haqida, interceptorlarni ishlatish, SOLID, GRASP va ba'zi Design Patternlar haqida ham qo'limdan kelgancha ma'lumot berib o'tmoqchiman. App kichkina bo'lishi mumkin, ammo kattaroq app uchun ishlatishga kerakli barcha bilimlarni berishga yetarli bo'ladi deb umid qilaman.
Prefer widget composition over functions ( Widget classlarni funksiyalardan afzal biling ) Kõpchilik biladiki, kod duplikatsiya yaxshi emas. Flutterda ishlash davomida esa biz kòpincha qayta ishlatiladigan widgetlar yaratamiz. Misol uchun, ilovada kòp ishlatilishi mumkin bòlgan CustomButton. Ammo, biz bu widgetni ikki xil yôl bilan yaratishimiz mumkin: 1) Widget class'lar orqali 2) Widget return type'iga ega funksiyalar orqali Ammo, siz hech qachon widget class yaratish imkoniyati turganda widget qaytaruvchi funksiya yozmasligingiz tavsiya qilinadi. Buning sabablari quyidagilar: 1) Aniqki, funksiyalarda const constructor mavjud emas 2) Flutter funksiya orqali qaytarilgan widgetlarni har doim qayta build qilishga majbur. Sababi, u funksiya haqida hech qanday ma'lumotga ega emas. 3) Class'lar Widget tree'da òz òrinlariga egalar. Ammo, funksiyalarda bunday emas! Shu sababli, ularda BuildContext ham mavjud emas. ———————————————————— P.s: const constructor'larga rahmat deymiz, sababi widget class'larni keshlasa bòladi, ammo funksiyalar keshlanmaydi. Shu sababli, funksiyalar har doim qayta ishga tushadi.
#flutter #hot_reload "Hot reload" kòp hollarda tõģri ishlaydi, ammo ba'zi qismlarda ilovani butunlay tòxtatib, qaytadan "run" qilishingiz kerak("Hot Restart"). Ushbu holatlar: 1) Qachonki siz, initState() metodiga òzgartirish kiritsangiz 2) Qachonki siz, class'ni enum'ga almashtirsangiz, yoki aksi bõlsa 3) Qachonki siz class'dagi static òzgaruvchilarni qiymatini òzgartirsangiz 4) Qachonki siz " void main(){} " ichidagi kodni òzgartirsangiz... ———————————————————— P.s: Easy_localization ishlatuvchi dòstlarimning ba'zilarida lifecycle'lar haqida yetarlicha bilim bòlmasa, sòzlarni tarjima qilish uchun kerak bòladigan "tr()" funksiyasini initState() ichida yozib ketish ehtimoli bor ( ba'zan òzgaruvchilarni initState ichida "initialize" qilamiz ). Ammo, initState() widget lifecycle'ida faqat bir martagina ishga tushishini hisobga olsak, til òzgartirgandan keyin tepada ta'kidlagan widget'lardagi string qiymatlarni òzgarmagan holda topasiz. Sababi, bu widgetdagi initState qayta ishlashi uchun bu widget asosiy "widget tree"da qayta paydo bòlishi kerak bòladi.
Channel created