Learning Flutter 📱💻
5 subscribers
117 photos
35 videos
3 files
67 links
Download Telegram
Flutter dasturchisi sifatida Google yoki boshqa yirik kompaniyaga ishga kirish uchun intervyu jarayonida beriladigan savollar turli xil bo‘lishi mumkin. Quyida junior Flutter dasturchisi uchun tayyorlanish kerak bo‘lgan savollarni kategoriyalar bo‘yicha taqdim etaman:


---

1. Dasturlash asoslari:

OOP (Object-Oriented Programming) asoslari:

Class, object, inheritance, polymorphism, encapsulation haqida tushuntirib bering.

Abstract class va Interface o‘rtasidagi farq nima?


Data structures:

Array, List, Set, Map haqida bilasizmi?

Stack va Queue haqida tushuntiring.


Algorithms:

Binary search qanday ishlaydi?

Sorting algoritmlarini tushuntirib bering (Bubble sort, Quick sort).




---

2. Dart dasturlash tili:

Future va Stream nima va ular qanday ishlatiladi?

Dart’da Null Safety qanday ishlaydi?

final, const, va var o‘rtasidagi farq nima?

async/await bilan ishlash prinsiplari.

fromJson va toJson funksiyalarini yozib bering.



---

3. Flutter asoslari:

Flutter’ning asosiy widgetlari haqida gapirib bering:

StatelessWidget va StatefulWidget o‘rtasidagi farq nima?

Column, Row, ListView, GridView qanday ishlaydi?


Flutter’da Navigator qanday ishlatiladi?

State management haqida bilasizmi? (e.g., Provider, Riverpod, BLoC, Redux)

Animatsiya bilan ishlash bo‘yicha savollar:

AnimatedContainer, Hero, va CustomPainter haqida gapiring.




---

4. Mahalliy va tashqi ma'lumotlar bilan ishlash:

API bilan ishlash:

HTTP so‘rovlarini qanday amalga oshirasiz (http yoki Dio package)?

JSON parsing qanday qilinadi?


Local Storage:

SharedPreferences va Hive o‘rtasidagi farq nima?

Mahalliy ma’lumotlarni saqlash uchun qanday texnologiyalardan foydalanasiz?




---

5. UI/UX va dizayn prinsiplari:

Responsive dizaynni qanday amalga oshirasiz?

Material Design va Cupertino Design o‘rtasidagi farq nima?

Custom Widgets qanday yaratasiz?

Adaptive layoutlarni yaratish bo‘yicha savollar.



---

6. Debugging va testing:

Debug jarayonida qanday vositalardan foydalanasiz (Flutter DevTools, Dart Analyzer)?

Unit test, Widget test va Integration test nima va qachon ishlatiladi?



---

7. Yaxshi amaliyotlar va umumiy savollar:

Kodni optimallashtirish uchun qanday strategiyalardan foydalanasiz?

Modular kodlash bo‘yicha nima bilasiz?

Flutter’da ishlash paytida qanday muammolarga duch kelganingiz va ularni qanday hal qilganingiz haqida gapiring.



---

Qo‘shimcha maslahatlar:

1. Portfolio: Tayyorlagan ilovangiz yoki loyihalaringizni portfolioningizga qo‘shing.


2. Github: Kodlaringizni Github’da joylashtiring.


3. Mock interviews: Intervyu mashqlarini bajarib ko‘ring.



Agar ushbu savollarning biror qismi bo‘yicha qo‘shimcha tushuncha yoki yordam kerak bo‘lsa, menga xabar bering!
1. typedef nima?

typedef — bu funksiya turlarini aniqlash uchun ishlatiladi. U funksiyaning imzosini (parametrlari va qaytaradigan qiymatini) belgilash imkonini beradi. Bu orqali kodni qayta-qayta yozishdan qochasiz va bir xil turdagi funksiyalarni boshqarish osonlashadi.

2. Foydalanish sabablari:

Kodingizni tushunarliroq qilish.

Murakkab funksiya turlarini boshqarish.

Bir xil turdagi funksiyalarni boshqarishni soddalashtirish.



---

3. Oddiy misol:

typedef MyFunction = int Function(int a, int b);

int add(int a, int b) => a + b;
int subtract(int a, int b) => a - b;

void main() {
MyFunction operation;

operation = add;
print('Add: ${operation(5, 3)}'); // Natija: Add: 8

operation = subtract;
print('Subtract: ${operation(5, 3)}'); // Natija: Subtract: 2
}

Bu yerda:

typedef MyFunction = int Function(int a, int b); — bu imzo bo‘lib, u ikki int parametrni oladigan va int qiymat qaytaradigan funksiyalarni belgilaydi.

operation o‘zgaruvchisi orqali turli xil funksiyalarni chaqira olamiz.



---

4. Flutter va typedef:

Flutterda ko‘pincha typedef callback funksiyalar bilan ishlatiladi. Masalan:

typedef OnPressedCallback = void Function();

class MyButton {
final OnPressedCallback onPressed;

MyButton({required this.onPressed});

void press() {
onPressed();
}
}

void main() {
final button = MyButton(onPressed: () {
print('Button pressed!');
});

button.press(); // Natija: Button pressed!
}

Bu yerda:

OnPressedCallback turidagi funksiya MyButton sinfida qo‘llanilgan.

onPressed funksiyasi chaqirilganida, kerakli kod ishga tushadi.



---

5. Generic bilan typedef:

Dart tilida typedef generic turlar bilan ham ishlaydi.

typedef Transformer<T> = T Function(T value);

String toUpperCase(String value) => value.toUpperCase();
int doubleValue(int value) => value * 2;

void main() {
Transformer<String> stringTransformer = toUpperCase;
Transformer<int> intTransformer = doubleValue;

print(stringTransformer('dart')); // Natija: DART
print(intTransformer(10)); // Natija: 20
}


---

6. typedef va anonym funksiyalar:

Ko‘pincha typedef anonym funksiyalar bilan ishlatiladi:

typedef MathOperation = int Function(int x, int y);

void main() {
final MathOperation multiply = (x, y) => x * y;
print(multiply(4, 5)); // Natija: 20
}


---

Agar sizda typedef bo‘yicha qo‘shimcha savollar bo‘lsa, bemalol so‘rang!
Dart tilida konsolga yozuvlarni rangli qilib chiqarish uchun ANSI escape codes yordamida ishlatiladigan rang kodlari ro'yxatini taqdim etaman. Bu kodlar asosan terminalda ishlaydi va ranglarni faollashtirish uchun moslashgan bo'lishi kerak.

Rang kodlari
Quyidagi ro'yxat ranglarning ANSI escape kodlarini o'z ichiga oladi:

Rang nomi Kod
Qizil (Red) \x1B[31m
Yashil (Green) \x1B[32m
Sariq (Yellow) \x1B[33m
Ko'k (Blue) \x1B[34m
Binafsha (Purple) \x1B[35m
Moviy (Cyan) \x1B[36m
Oq (White) \x1B[37m
Qora (Black) \x1B[30m
Standart (Reset) \x1B[0m
Masalaning yechimi
Quyida Dartda rangli matnni terminalga chiqarish uchun misol keltirilgan:

dart
Kodni nusxalash
void main() {
// Rang kodlari
const String reset = '\x1B[0m'; // Reset
const String red = '\x1B[31m'; // Qizil
const String green = '\x1B[32m'; // Yashil
const String yellow = '\x1B[33m'; // Sariq
const String blue = '\x1B[34m'; // Ko'k
const String purple = '\x1B[35m'; // Binafsha
const String cyan = '\x1B[36m'; // Moviy
const String white = '\x1B[37m'; // Oq

// Rangli matnlarni chiqarish
print('${red}Bu qizil matn$reset');
print('${green}Bu yashil matn$reset');
print('${yellow}Bu sariq matn$reset');
print('${blue}Bu ko\'k matn$reset');
print('${purple}Bu binafsha matn$reset');
print('${cyan}Bu moviy matn$reset');
print('${white}Bu oq matn$reset');
}
Muhim eslatma
ANSI rang kodlari barcha terminallarda ishlamasligi mumkin. Masalan, ba'zi Windows terminallari qo'shimcha sozlashni talab qiladi.
Ranglarni ishlatishdan oldin terminalingizda ANSI kodlari qo'llab-quvvatlanishini tekshiring.
Agar qo'shimcha savollaringiz bo'lsa, bemalol so'rang! 😊
Foydali snippetlar
Qanday laptop olsam ekan dep yurganlarga Flutter dasturlash uchun yuqori samarali va uzoq batareya muddati bilan ta'minlangan noutbuk izlayotgan ekansiz. Quyidagi modellardan birini ko‘rib chiqishingizni tavsiya etaman:
Tanlovingizda quyidagi omillarni hisobga oling:
Protsessor: Eng yangi Intel Core i7 yoki i9, yoki Apple M2 Pro/Max chiplariga ega modellarga e'tibor bering.
Operativ xotira (RAM): Kamida 16 GB, yaxshisi 32 GB bo'lgan modellarga ustunlik bering.
Saqlash joyi: Tezkor NVMe SSD bilan kamida 512 GB yoki undan ko'proq hajmni tanlang.
Displey: Yuqori aniqlikdagi (Full HD yoki undan yuqori) ekran ko'zlarni kamroq charchatadi va dasturlashda qulaylik yaratadi.
Batareya muddati: Ishlash uslubingizga mos ravishda uzoq batareya muddatiga ega modellarga e'tibor bering.
Shuningdek, Tashkent shahridagi mahalliy elektronika do'konlarida ushbu modellarning mavjudligini va narxlarini tekshirishni tavsiya etaman.
Flutter da ekranni aniqlsh
MediaQuery.of(context).size orqali ekranning kengligini va bo‘yini tekshirib, Chrome va Android uchun mos sharoit yaratish mumkin.

Muammo sabablari:

1. Chrome-da web ishlash sharoiti boshqacha: Masalan, ba’zi UI elementlari webda farqli ishlashi mumkin.


2. Ekran o‘lchami noto‘g‘ri aniqlanayotgani: Chrome va Android ekran o‘lchamlari farqli bo‘lishi mumkin, shuning uchun moslashuv kerak.


3. Platformaga qarab harakat qilish kerak: Web va Android uchun alohida kod ishlatish mumkin.




---

Yechim:

1. kIsWeb bilan tekshirish
Flutter’da kIsWeb orqali web yoki Android ekanligini bilib olish mumkin.
import 'package:flutter/material.dart';
import 'dart:io' show Platform; // Platform tekshirish uchun
import 'package:flutter/foundation.dart' show kIsWeb;

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('MediaQuery Test')),
body: Center(
child: LayoutBuilder(
builder: (context, constraints) {
double width = MediaQuery.of(context).size.width;

String platform = kIsWeb
? 'Web'
: Platform.isAndroid
? 'Android'
: 'Boshqa Platforma';

return Container(
width: width * 0.5, // Ekranning 50% ini egallaydi
height: 100,
color: Colors.blue,
child: Center(
child: Text('Platforma: $platform\nWidth: $width'),
),
);
},
),
),
),
);
}
}

---

Tushuntirish:

1. kIsWeb → Agar web bo‘lsa, "Web" deb qaytaradi.


2. Platform.isAndroid → Android ekanligini tekshiradi.


3. MediaQuery.of(context).size.width orqali ekranning kengligi olinadi.


4. LayoutBuilder → Ba’zan MediaQuery noto‘g‘ri ishlashi mumkin, shunda LayoutBuilder yaxshi yordam beradi.




---

Xulosa

Agar Chrome-da xatolik berayotgan bo‘lsa, birinchi navbatda kIsWeb yordamida web muhit ekanligini tekshirib, mos kod yozish kerak. Shuningdek, MediaQuery yoki LayoutBuilder orqali o‘lchamlarni tekshirish ham muammoni hal qilishga yordam beradi.
textField orab turuvchi Form widgeti bu Bir nechta shakl maydoni vidjetlarini (masalan, TextField vidjetlari) guruhlash uchun ixtiyoriy konteyner .

Har bir alohida shakl maydoni FormField vidjetiga o'ralgan bo'lishi kerak , Form vidjeti ularning barchasining umumiy ajdodi sifatida. Ushbu shaklning avlodi bo'lgan har bir FormFieldni saqlash, qayta o'rnatish yoki tasdiqlash uchun FormState- da qo'ng'iroq usullari . FormState ni olish uchun siz Form.of dan ajdodi Shakl bo'lgan kontekst bilan foydalanishingiz yoki GlobalKey ni Form konstruktoriga o'tkazib , GlobalKey.currentState ga qo'ng'iroq qilishingiz mumkin .
TextFromField bu TextFieldni orab turuvchi widget va uni boshqarishda kerak boladi
focusNode classi klaviatura focusini olish va uni boshqarishda kerak boladi
#hosting #netlify #webhost #heroku

Qanday qilib yaratgan saytingizni internetga bepul joylash mumkin?

🔗 netlify.com
🔗 000webhost.com
🔗 heroku.com

Mana shu saytlar orqali siz saytingizni bepul internetga qo'ysangiz bo'ladi 😉


💻 @dasturlash_hayoti — bir xatoni tuzatib, ikkinchisiga tayyorlanish! 😅
Please open Telegram to view this post
VIEW IN TELEGRAM
Hoziroq boshlang hatto:
Tajribasiz bo‘lsangiz ham.
Ishonchingiz kam bo‘lsa ham.
Resurslar yetarli bo‘lmasa ham.
Tushkunlikka tushsangiz ham.
Qo‘llab quvvatlanmasangiz ham.
Uorren Baffet
Intervyu savollariga tayyorlanish bo‘yicha yo‘l xaritasi

1. O‘zingiz haqingizdagi savollarga tayyorlaning
Intervyu oluvchilar eng avvalo sizni shaxs sifatida tushunishni xohlashadi:

🔘Qayerda o‘qigansiz, nimalarni o‘rgandingiz?

🔘Nega aynan dasturlashni tanladingiz?

🔘Qanday loyihalarda qatnashgansiz?

🔘 Maslahat: O‘zingiz haqingizda qisqa va mazmunli gapirishga mashq qiling.

2. Texnik bilimlaringizni mustahkamlang
Quyidagi mavzular eng ko‘p so‘raladigan yo‘nalishlardan hisoblanadi:

🔘Internet va brauzer qanday ishlaydi?

🔘HTTP, REST API, DNS, WebSocket tushunchalari

🔘Dasturlash asoslari: OOP, SOLID, DRY, Clean Code

🔘Ma’lumotlar bazasi: SQL, NoSQL, query yozish

🔘 Maslahat: Har bir tushuncha uchun oddiy misol toping va uni o‘z so‘zlaringizda tushuntirishga harakat qiling.

3. Amaliy tajribani ko‘rsating

🔘GitHub profiliga loyihalaringizni joylashtiring

🔘Portfolio saytingiz bo‘lsa, ko‘rsatib o‘ting

🔘Hattoki kichik loyihalar ham ko‘p narsa haqida ma’lumot beradi

🔘 Maslahat: Loyihalarda qanday muammolarni hal qilganingizni tushuntirishga tayyor bo‘ling.

4. Intervyu mashqlari qiling

🔘Savollar ro‘yxatini tuzing va yozma javoblar tayyorlang

🔘Internetda mavjud mock-intervyularni ko‘rib chiqing

🔘 Maslahat: Ovoz yozib, o‘zingizni eshitib ko‘rish ham foydali bo‘ladi.

5. Hujjatlarni o‘qish odatini rivojlantiring

🔘Rasmiy dokumentatsiyalar sizga aniq va ishonchli bilim beradi

🔘API, kutubxona yoki framework’lar bo‘yicha o‘z manbalarini o‘rganing

🔘 Maslahat: Har kuni kamida 15 daqiqa ingliz tilidagi texnik matn o‘qing.

Ushbu yo‘l xaritasi orqali siz intervyuga puxta tayyorgarlik ko‘rib, o‘zingizga ishonch bilan qatnashishingiz mumkin.

👉 Esda tuting — asosiy narsa bilganingizni sodda, tushunarli va ishonchli tarzda ifodalay olishdir.

#IntervyuTayyorgarlik

💻 @jonibek_turapov
Please open Telegram to view this post
VIEW IN TELEGRAM
Flutter da go_routerda Push va Go o'ratasidagi farq
go() metodi haqida

GoRouter.of(context).go('/modal');

Yuqoridagi kod Stackda turgan sahifani replace qiladi desak boladi Navigator.pushReplacement() ga o'xshatsak boladi
Stackni tozalab yangi sahifani qo'shadi misol uchun
HomePage >> DetailPage>> .... va boshqa pagelar bor bunda GoRouter.of(context).go() orqali navigatsiyani amalga oshirganimizda stack da doim 1 dona page qoladi va ortga qaytish imkoni bo'lmaydi buni sinab ko'rishingiz ham mumkin
Learning Flutter 📱💻
Flutter da go_routerda Push va Go o'ratasidagi farq go() metodi haqida GoRouter.of(context).go('/modal'); Yuqoridagi kod Stackda turgan sahifani replace qiladi desak boladi Navigator.pushReplacement() ga o'xshatsak boladi Stackni tozalab yangi sahifani…
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

/// navigator
final goRouter = GoRouter(
initialLocation: '/',
routes: [
GoRoute(path: "/", builder: (context,state)=>const Home()),
GoRoute(path: "/detail", builder: (context,state)=>const Detail()),

]);

///>>>##############################<<<
void main() => runApp(SimpleGo());

class SimpleGo extends StatelessWidget {
const SimpleGo({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp.router(routerConfig: goRouter);
}
}

class Home extends StatelessWidget {
const Home({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Home"),),
body: Center(
child: ElevatedButton(
onPressed: () =>context.go('/detail'),
child: const Text("Go To Detail Page"),
),
),
);
}
}

class Detail extends StatelessWidget {
const Detail({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Detail"),leading: BackButton(),), /// bu button ishlamaydi chunki stackda faqat 1 ta page mavjud
body: Center(
child: ElevatedButton(
onPressed: () =>context.pop(), /// bu button ishlamaydi chunki stackddaa faqat 1 ta page mavjud
child: const Text("Go To Home Page"),
),
),
);
}
}
push() metodi esa aksincha ishlaydi misol uchun
HomePage >>> DetailPage >>> ProductPage >>> HomePage.... hozirda stackda 4 ta page bo'ladi bunda pop qilish imkoni mavjud

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

/// navigator
final goRouter = GoRouter(
initialLocation: '/',
routes: [
GoRoute(path: "/", builder: (context,state)=>const Home()),
GoRoute(path: "/detail", builder: (context,state)=>const Detail()),
GoRoute(path: "/product", builder: (context,state)=>const Product()),

]);

///>>>##############################<<<
void main() => runApp(SimpleGo());

class SimpleGo extends StatelessWidget {
const SimpleGo({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp.router(routerConfig: goRouter);
}
}

class Home extends StatelessWidget {
const Home({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Home"),),
body: Center(
child: ElevatedButton(
onPressed: () =>context.push('/detail'),
child: const Text("Go To Detail Page"),
),
),
);
}
}

class Detail extends StatelessWidget {
const Detail({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Detail"),leading: BackButton(),),
body: Center(
child: ElevatedButton(
onPressed: () =>context.push('/product'),
child: const Text("Go To Product Page"),
),
),
);
}
}

class Product extends StatelessWidget {
const Product({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Product"),leading: BackButton(),),
body: Center(
child: ElevatedButton(
onPressed: () =>context.pop(),
child: const Text("Go To Home Page"),
),
),
);
}
}