Forwarded from MobilDasturchi.Uz (Azizbek Asqaraliyev)
🇺🇿 Flutter dasturchilar — Android’ning yashirin harakatlaridan ehtiyot bo‘ling!
Mana sizni hayratda qoldirishi mumkin bo‘lgan holat:
🚨 Android ilovani o‘chirib tashlash har doim ham ma’lumotlarni tozalamaydi!
Flutter ilovalarimdan birida test o‘tkazayotganimda, ilovani qayta o‘rnatganimda SharedPreferences va SQLite ma’lumotlari hanuzgacha joyida ekanini sezib qoldim. 😳
🔎 Ma’lum bo‘lishicha, Android avtomatik tarzda ilova ma’lumotlarini (masalan, lokal saqlash va sozlamalarni) foydalanuvchining Google akkauntiga zaxiralab qo‘yadi — va keyin bu ilova yana o‘rnatilganda, jimgina qayta tiklaydi.
🧯 Buni o‘chirib, har safar toza o‘rnatishni ta’minlamoqchimisiz?
Unda AndroidManifest.xml faylida quyidagicha yozing:
✅ Bu avtomatik zaxira qilishni o‘chiradi — ayniqsa test versiyalarida yoki foydalanuvchiga butunlay yangilangan holatda ilovani taqdim qilmoqchi bo‘lsangiz juda foydali.
💬 Flutter dasturchilar: Android tizimi orqasida qanday ishlar sodir bo‘layotganini osonlikcha e’tiborsiz qoldirish mumkin. Faqat bir necha qator konfiguratsiya sizni soatlab xatolik izlashdan qutqaradi.
Mana sizni hayratda qoldirishi mumkin bo‘lgan holat:
🚨 Android ilovani o‘chirib tashlash har doim ham ma’lumotlarni tozalamaydi!
Flutter ilovalarimdan birida test o‘tkazayotganimda, ilovani qayta o‘rnatganimda SharedPreferences va SQLite ma’lumotlari hanuzgacha joyida ekanini sezib qoldim. 😳
🔎 Ma’lum bo‘lishicha, Android avtomatik tarzda ilova ma’lumotlarini (masalan, lokal saqlash va sozlamalarni) foydalanuvchining Google akkauntiga zaxiralab qo‘yadi — va keyin bu ilova yana o‘rnatilganda, jimgina qayta tiklaydi.
🧯 Buni o‘chirib, har safar toza o‘rnatishni ta’minlamoqchimisiz?
Unda AndroidManifest.xml faylida quyidagicha yozing:
<application
android:allowBackup="false"
android:fullBackupContent="false">
</application>
✅ Bu avtomatik zaxira qilishni o‘chiradi — ayniqsa test versiyalarida yoki foydalanuvchiga butunlay yangilangan holatda ilovani taqdim qilmoqchi bo‘lsangiz juda foydali.
💬 Flutter dasturchilar: Android tizimi orqasida qanday ishlar sodir bo‘layotganini osonlikcha e’tiborsiz qoldirish mumkin. Faqat bir necha qator konfiguratsiya sizni soatlab xatolik izlashdan qutqaradi.
👍8👏4
AGP vs Gradle farqlari.
Gradle - bu umumiy maqsadli qurilishni avtomatlashtirish vositasi (build automation tool). U Java/Kotlin va Android kabi ko'plab tillar va platformalar uchun kodni kompilyatsiya qilish, qurish (build), bog'liqliklarni boshqarish va paketlash uchun ishlatiladi.
AGP (Android Gradle Plugin) - bu Gradle uchun plagin bo'lib, Android ilovalarini yaratish uchun zarur boʻlgan mantiq va vazifalarni taqdim etadi, masalan, resurslarni kompilyatsiya qilish, APK-larni imzolash (signing apk), AndroidManifest faylni boshqarish va boshqalar.
AGP va Gradle versiyalari bir-biriga mos bo'lishi juda muhim. Quyidagi sahifa orqali mos versiyalarni ko'rishingiz mumkin.
Gradle va AGP versiyalari quyidagi fayllarda ko'rsatilgan bo'ladi:
Gradle:
AGP:
Flutter ikkalasini ham ishlatadi. Flow esa quyidagicha:
Qo'shimcha manbalar:
1. Gradle - Link
2. AGP - Link
3. Article - Link
#Flutter
Gradle - bu umumiy maqsadli qurilishni avtomatlashtirish vositasi (build automation tool). U Java/Kotlin va Android kabi ko'plab tillar va platformalar uchun kodni kompilyatsiya qilish, qurish (build), bog'liqliklarni boshqarish va paketlash uchun ishlatiladi.
AGP (Android Gradle Plugin) - bu Gradle uchun plagin bo'lib, Android ilovalarini yaratish uchun zarur boʻlgan mantiq va vazifalarni taqdim etadi, masalan, resurslarni kompilyatsiya qilish, APK-larni imzolash (signing apk), AndroidManifest faylni boshqarish va boshqalar.
AGP va Gradle versiyalari bir-biriga mos bo'lishi juda muhim. Quyidagi sahifa orqali mos versiyalarni ko'rishingiz mumkin.
Gradle va AGP versiyalari quyidagi fayllarda ko'rsatilgan bo'ladi:
Gradle:
// gradle/wrapper/gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
AGP:
// build.gradle (Project-level)
classpath 'com.android.tools.build:gradle:8.1.4'
Flutter ikkalasini ham ishlatadi. Flow esa quyidagicha:
Flutter (calls) → Gradle (uses) → AGP (builds Android)
Qo'shimcha manbalar:
1. Gradle - Link
2. AGP - Link
3. Article - Link
#Flutter
🔥2
Flutterda Deep Link.
Deep Link (custom URI schemes)
Bu havolalar ilovangizni ochish va muayyan sahifalarga yo'naltirish uchun "myapp://profile?id=123" kabi maxsus URI sxemalaridan foydalanadi.
Androidda bu Deep link deb ataladi, iOS-da esa maxsus URL sxemasi (custom URL scheme) deb ataladi. Agar siz domenga ega bo'lmasangiz, lekin deep link kuchidan foydalanmoqchi bo'lsangiz, bu usul qulay.
Ilovangizda o'zingizga yoqqan har qanday maxsus sxemani tanlashingiz mumkin. Ammo salbiy tomoni shundaki, u xavfsizligi past, chunki har qanday ilova sizning shaxsiy sxemangizni o'g'irlashi va havolalaringizni ochishga urinishi mumkin.
Web Link (Android App Link / IOS Universal Link).
Android-da App Link va iOS-da Universal Link sifatida tanilgan bu usul mobil ilovangizga Deep Link yordamini qo'shishning eng xavfsiz usulini ta'minlaydi.
Bu sizdan domenga ega bo'lishingizni va ikkala tomondan tekshirishni amalga oshirishingizni talab qiladi. Domeningizni ilova kodi (Androiddagi manifest fayli va iOSʼdagi Associated Domains) ichida roʻyxatdan oʻtkazishingiz va server tomonida mobil ilovangizni tasdiqlashingiz kerak.
Ushbu vazifani bajarish orqali ilovangiz domenni taniydi va domen ilovangizni tasdiqlaydi. Ushbu ikki tomonlama tekshirish Deep Link-larning yaxlitligi va haqiqiyligini ta'minlaydi va uni xavfsiz qiladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Article: Link
#Flutter
Deep Link (custom URI schemes)
Bu havolalar ilovangizni ochish va muayyan sahifalarga yo'naltirish uchun "myapp://profile?id=123" kabi maxsus URI sxemalaridan foydalanadi.
Androidda bu Deep link deb ataladi, iOS-da esa maxsus URL sxemasi (custom URL scheme) deb ataladi. Agar siz domenga ega bo'lmasangiz, lekin deep link kuchidan foydalanmoqchi bo'lsangiz, bu usul qulay.
Ilovangizda o'zingizga yoqqan har qanday maxsus sxemani tanlashingiz mumkin. Ammo salbiy tomoni shundaki, u xavfsizligi past, chunki har qanday ilova sizning shaxsiy sxemangizni o'g'irlashi va havolalaringizni ochishga urinishi mumkin.
Web Link (Android App Link / IOS Universal Link).
Android-da App Link va iOS-da Universal Link sifatida tanilgan bu usul mobil ilovangizga Deep Link yordamini qo'shishning eng xavfsiz usulini ta'minlaydi.
Bu sizdan domenga ega bo'lishingizni va ikkala tomondan tekshirishni amalga oshirishingizni talab qiladi. Domeningizni ilova kodi (Androiddagi manifest fayli va iOSʼdagi Associated Domains) ichida roʻyxatdan oʻtkazishingiz va server tomonida mobil ilovangizni tasdiqlashingiz kerak.
Ushbu vazifani bajarish orqali ilovangiz domenni taniydi va domen ilovangizni tasdiqlaydi. Ushbu ikki tomonlama tekshirish Deep Link-larning yaxlitligi va haqiqiyligini ta'minlaydi va uni xavfsiz qiladi.
Manbalar:
1. Official doc: Link
2. Medium: Link
3. Article: Link
#Flutter
Learning to write clean code is hard work. It requires more than just the knowledge of principles and patterns. You must sweat over it. You must practice it yourself, and watch yourself fail. You must watch others practice it and fail. You must see them stumble and retrace their steps. You must see them agonize over decisions and see the price they pay for making those decisions the wrong way.
Robert C. Martin "Clean Code"
Forwarded from Sardor Dushamov | PHP - tengi yo'q til!
- Junior deb uylangan lekin to'ydan keyin senior chiqqan kelin😂
- Kelinim pythonchi chiqdi
- To'ydan keyin bagi chiqqan kelin)
https://t.me/joseph_uz/220
- Kelinim pythonchi chiqdi
- To'ydan keyin bagi chiqqan kelin)
https://t.me/joseph_uz/220
Telegram
Muhammad Yusuf
Axaxa boplashipti 😁
Sizda qanday idea bor 😂
Credits by Adam Abdul
@joseph_uz
Sizda qanday idea bor 😂
Credits by Adam Abdul
@joseph_uz
😁5🤣1🤨1
The first rule of functions is that they should be small. The second rule of functions is that they should be smaller than that. This is not an assertion that I can justify. I can't provide any references to research that shows that very small functions are better. What I can tell you is that for nearly four decades I have written functions of all different sizes. I've written several nasty 3,000-line abominations. I've written scads of functions in the 100 to 300 line range. And I've written functions that were 20 to 30 lines long. What this experience has taught me, through long trial and error, is that functions should be very small.
Robert C. Martin "Clean Code"
🔥1
Biometrik barmoq izi haqida.
Biometrik barmoq izi (biometric fingerprinting) - bu barmoq izlarida topilgan noyob naqshlar asosida shaxslarni aniqlash va autentifikatsiya qilish usuli. Bu biologik (jismoniy) yoki xulq-atvor xususiyatlariga ko'ra shaxslarni avtomatlashtirilgan tanib olishni nazarda tutuvchi biometrikaning kichik to'plamidir. Barmoq izlari biometrik identifikatorning bir ko'rinishi hisoblanadi, chunki har bir odamda barmoq izlari yagona naqshga ega, hatto egizaklarda ham.
Qisqacha tarix va evolyutsiya.
Barmoq izlari qadimgi Xitoy, Bobil va Forsda kamida miloddan avvalgi 1000 yildan beri identifikatsiya qilish uchun ishlatilgan. Barmoq izlarini ilmiy tadqiq qilish 17-19-asrlarda, Marcello Malpigi va Yoxannes Evangelista Purkinjening asosiy hissalari bilan boshlangan.
Barmoq izi skanerlarining bir nechta turlari mavjud, ularning har biri o'z ish printsiplariga ega:
Optik skaner: Barmoq izining 2D vizual tasvirini olish uchun yorug'likdan foydalanadi. Raqamli tasvirni yaratish uchun barmoq shisha plastinka ustiga qo'yiladi, yoritiladi va aks ettirilgan yorug'lik olinadi.
Kondensatorli skaner (capacitive scanner): Elektr zaryadlari farqlari asosida barmoq izi tizma va do'ngliklarini sezish uchun bir qator kichik kondensatorlardan foydalanadi. Bu smartfonlar va noutbuklarda keng tarqalgan.
Ultrasonik skaner: teriga kirib boradigan yuqori chastotali tovush to'lqinlarini chiqaradi va barmoq izi, jumladan, tizma chuqurligi va ter teshiklari haqida batafsil 3D ma'lumotlarini oladi. Ular firibgarlikka nisbatan ancha chidamli va iflos yoki nam barmoqlar bilan ham yaxshi ishlaydi.
Termal skaner: barmoq izi tizmalari va do'ngliklari orasidagi harorat farqlarini aniqlaydi.
Radiochastota (RF) skaner: Subdermal qatlamdan barmoq izi namunasini olish uchun RF signallaridan foydalanadi, bu ularni sirt shikastlanishi yoki ifloslanishiga juda chidamli qiladi.
Mobil qurilmalarda barmoq izining matematik ko'rinishi (template) qurilmaning maxsus ichki komponentasida saqlanadi va hech kim va hech qaysi dastur unga kira olmaydi, hattoki OS ham (Android-da Trusted Execution Environment, IOS-da Secure Enclave).
Biometrik barmoq izi (biometric fingerprinting) - bu barmoq izlarida topilgan noyob naqshlar asosida shaxslarni aniqlash va autentifikatsiya qilish usuli. Bu biologik (jismoniy) yoki xulq-atvor xususiyatlariga ko'ra shaxslarni avtomatlashtirilgan tanib olishni nazarda tutuvchi biometrikaning kichik to'plamidir. Barmoq izlari biometrik identifikatorning bir ko'rinishi hisoblanadi, chunki har bir odamda barmoq izlari yagona naqshga ega, hatto egizaklarda ham.
Qisqacha tarix va evolyutsiya.
Barmoq izlari qadimgi Xitoy, Bobil va Forsda kamida miloddan avvalgi 1000 yildan beri identifikatsiya qilish uchun ishlatilgan. Barmoq izlarini ilmiy tadqiq qilish 17-19-asrlarda, Marcello Malpigi va Yoxannes Evangelista Purkinjening asosiy hissalari bilan boshlangan.
Barmoq izi skanerlarining bir nechta turlari mavjud, ularning har biri o'z ish printsiplariga ega:
Optik skaner: Barmoq izining 2D vizual tasvirini olish uchun yorug'likdan foydalanadi. Raqamli tasvirni yaratish uchun barmoq shisha plastinka ustiga qo'yiladi, yoritiladi va aks ettirilgan yorug'lik olinadi.
Kondensatorli skaner (capacitive scanner): Elektr zaryadlari farqlari asosida barmoq izi tizma va do'ngliklarini sezish uchun bir qator kichik kondensatorlardan foydalanadi. Bu smartfonlar va noutbuklarda keng tarqalgan.
Ultrasonik skaner: teriga kirib boradigan yuqori chastotali tovush to'lqinlarini chiqaradi va barmoq izi, jumladan, tizma chuqurligi va ter teshiklari haqida batafsil 3D ma'lumotlarini oladi. Ular firibgarlikka nisbatan ancha chidamli va iflos yoki nam barmoqlar bilan ham yaxshi ishlaydi.
Termal skaner: barmoq izi tizmalari va do'ngliklari orasidagi harorat farqlarini aniqlaydi.
Radiochastota (RF) skaner: Subdermal qatlamdan barmoq izi namunasini olish uchun RF signallaridan foydalanadi, bu ularni sirt shikastlanishi yoki ifloslanishiga juda chidamli qiladi.
Mobil qurilmalarda barmoq izining matematik ko'rinishi (template) qurilmaning maxsus ichki komponentasida saqlanadi va hech kim va hech qaysi dastur unga kira olmaydi, hattoki OS ham (Android-da Trusted Execution Environment, IOS-da Secure Enclave).
🎉3
Kompyuter ekranida bir paytda bir nechta oyna ochsangiz, u qotishni boshlaydi.
Inson miyasi ham xuddi shunday.
Yakuniga yetmagan ishlar orqada “qalashib yotsa”, samarali ishlashga xalaqit beradi.
Bunday holat Zeygarnik effekti deb ataladi.
Batafsil.
Inson miyasi ham xuddi shunday.
Yakuniga yetmagan ishlar orqada “qalashib yotsa”, samarali ishlashga xalaqit beradi.
Bunday holat Zeygarnik effekti deb ataladi.
Batafsil.
👍7💯1
Flutterda State restoration.
Agar user mobil ilovani ishga tushirsa va keyin boshqa ilovaga o'tsa, birinchi ilova orqa fonga ko‘chiriladi. Operatsion tizim (iOS va Android) xotirani bo'shatish va oldingi o'rinda ishlayotgan ilovaning ish faoliyatini yaxshilash uchun orqa fondagi ilovani o'ldirishi (kill) mumkin.
Agar user dasturni yana tanlaganida, uni yana birinchi o'ringa olib chiqsa, OS uni qayta ishga tushiradi. Ammo, agar siz ilovaning o'ldirilishidan oldingi holatini saqlab qolish usulini o'rnatmasangiz, siz holatni yo'qotasiz va dastur noldan boshlanadi.
Bu muammoga Flutter quyidagicha yechim beradi:
RestorationManager.
Bu engine-ga state ma'lumotlarini taqdim etadi va umumiy state-ni tiklash jarayonlarini boshqaradi.
RestorationBucket.
Bu ilovaning bir qismidagi qayta tiklanishi kerak bo'lgan state ma'lumotlarini kalit-qiymat (key-value) ko'rinishida saqlaydi. Qiymat StandardMessageCodec qo'llab-quvvatlaydigan istalgan qiymat bo'lishi mumkin. Ildizi rootBucket-da joylashgan va RestorationManager tomonidan boshqariladigan daraxt irarxiyasida tashkil etilgan.
RestorationMixin.
StatefulWidget-ga qo'llanilishi mumkin bo'lgan va bu orqali siz vidjet holatini saqlash va tiklash imkoniga ega bo'lasiz.
RestorationScope.
Qaysi holat tiklanishi boshqariladigan chegarani belgilaydigan vidjet.
Ba'zi platformalar tiklash ma'lumotlarining hajmini cheklaydi. Shu sababli bucket-larda saqlangan ma'lumotlar imkon qadar kichik bo'lishi kerak.
Qo'shimcha manbalar:
1. Medium: Link
2. Article: Link
3. Article: Link
#Flutter
Agar user mobil ilovani ishga tushirsa va keyin boshqa ilovaga o'tsa, birinchi ilova orqa fonga ko‘chiriladi. Operatsion tizim (iOS va Android) xotirani bo'shatish va oldingi o'rinda ishlayotgan ilovaning ish faoliyatini yaxshilash uchun orqa fondagi ilovani o'ldirishi (kill) mumkin.
Agar user dasturni yana tanlaganida, uni yana birinchi o'ringa olib chiqsa, OS uni qayta ishga tushiradi. Ammo, agar siz ilovaning o'ldirilishidan oldingi holatini saqlab qolish usulini o'rnatmasangiz, siz holatni yo'qotasiz va dastur noldan boshlanadi.
Bu muammoga Flutter quyidagicha yechim beradi:
RestorationManager.
Bu engine-ga state ma'lumotlarini taqdim etadi va umumiy state-ni tiklash jarayonlarini boshqaradi.
RestorationBucket.
Bu ilovaning bir qismidagi qayta tiklanishi kerak bo'lgan state ma'lumotlarini kalit-qiymat (key-value) ko'rinishida saqlaydi. Qiymat StandardMessageCodec qo'llab-quvvatlaydigan istalgan qiymat bo'lishi mumkin. Ildizi rootBucket-da joylashgan va RestorationManager tomonidan boshqariladigan daraxt irarxiyasida tashkil etilgan.
RestorationMixin.
StatefulWidget-ga qo'llanilishi mumkin bo'lgan va bu orqali siz vidjet holatini saqlash va tiklash imkoniga ega bo'lasiz.
RestorationScope.
Qaysi holat tiklanishi boshqariladigan chegarani belgilaydigan vidjet.
Ba'zi platformalar tiklash ma'lumotlarining hajmini cheklaydi. Shu sababli bucket-larda saqlangan ma'lumotlar imkon qadar kichik bo'lishi kerak.
Qo'shimcha manbalar:
1. Medium: Link
2. Article: Link
3. Article: Link
#Flutter
🔥2