Jetpack Compose میں LazyRow — یہ کیا ہے، خصوصیات اور یہ کیسے کام کرتا ہے

مصنف: IT Sectr اشاعت: 2026-06-29 مطالعے کا وقت: 10 منٹ

LazyRow — Jetpack Compose میں عناصر کی سست لوڈنگ کے ساتھ افقی فہرستیں بنانے کے لیے ایک کمپوزیبل فنکشن ہے۔ Row کے برعکس، LazyRow صرف نظر آنے والے عناصر بناتا ہے اور افقی اسکرولنگ کے دوران انہیں دوبارہ استعمال کرتا ہے۔ Google Android Documentation, 2025 کے مطابق، LazyRow LazyColumn کا افقی ہم منصب ہے اور موبائل ایپلیکیشنز میں کیروسلز، گیلریوں اور افقی مینوز کے لیے موثر ہے۔

اہم نکات

  • LazyRow — سست لوڈنگ کے ساتھ Jetpack Compose کی افقی فہرست، افقی اسکرولنگ کے دوران صرف نظر آنے والے عناصر بناتی ہے۔
  • horizontalArrangement عناصر کی افقی ترتیب کو منظم کرتا ہے، جبکہ contentPadding کنٹینر کے کناروں پر پیڈنگ شامل کرتا ہے۔
  • LazyListState افقی اسکرول پوزیشن کو ٹریک کرتا ہے اور animateScrollToItem کے ذریعے پروگراماتی کنٹرول فراہم کرتا ہے۔
  • LazyRow موبائل انٹرفیس میں امیج کیروسلز، زمرہ جات کی فہرستوں، افقی گیلریوں اور ٹیبز کے لیے موثر ہے۔
  • contentType اور key LazyRow میں عناصر کے دوبارہ استعمال کو بہتر بناتے ہیں، اسکرولنگ کے دوران دوبارہ تشکیل کو کم کرتے ہیں۔

Jetpack Compose میں LazyRow کیا ہے

LazyRow — ایک کمپوزیبل فنکشن ہے جو عناصر کی سست لوڈنگ کے ساتھ ایک افقی اسکرول ایبل فہرست کو نافذ کرتا ہے۔ Row کے برعکس، جو ایک ساتھ تمام ذیلی عناصر کو رینڈر کرتا ہے، LazyRow صرف دیکھنے کے علاقے میں نظر آنے والے عناصر بناتا ہے۔

LazyRow LazyColumn جیسے ہی اصول پر کام کرتا ہے، لیکن عناصر کو افقی طور پر ترتیب دیتا ہے۔ بائیں یا دائیں اسکرول کرنے پر، دیکھنے کے علاقے سے باہر نکلنے والے عناصر نئے عناصر کو دکھانے کے لیے دوبارہ استعمال ہوتے ہیں۔ یہ بہت ساری تصاویر والی گیلریوں یا طویل زمرہ جات کی فہرستوں کے لیے انتہائی اہم ہے۔

Android Developers Blog, 2024 کے مطابق، LazyRow LazyColumn جیسی LazyList آرکیٹیکچر استعمال کرتا ہے، جس میں LazyListState، Pool کے ذریعے دوبارہ استعمال کا طریقہ کار اور مختلف عناصر کی اقسام کے لیے سپورٹ شامل ہے۔ زیادہ سے زیادہ کارکردگی عناصر کی مقررہ اونچائی کے ساتھ حاصل کی جاتی ہے۔

LazyRow کا بنیادی دستخط

LazyRow پیرامیٹرز modifier، state، contentPadding، reverseLayout، horizontalArrangement اور verticalAlignment قبول کرتا ہے۔ مواد LazyColumn کی طرح DSL فنکشنز items اور item کے ذریعے بیان کیا جاتا ہے۔

kotlin
@Composable
fun SimpleLazyRow() {
    val items = (1..50).toList()
    LazyRow(
        modifier = Modifier.fillMaxWidth().height(100.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp),
        contentPadding = PaddingValues(start = 16.dp, end = 16.dp)
    ) {
        items(items) { item ->
            Box(
                modifier = Modifier.size(80.dp).background(Color.Gray)
            ) {
                Text(text = "$item", modifier = Modifier.align(Alignment.Center))
            }
        }
    }
}

LazyRow کی خصوصیات: horizontalArrangement اور contentPadding

horizontalArrangement LazyRow کے اندر افقی محور کے ساتھ عناصر کی تقسیم کو منظم کرتا ہے۔ Row کی طرح Arrangement کی وہی قدریں دستیاب ہیں: Start، Center، End، SpaceBetween، SpaceEvenly، SpaceAround اور حسب ضرورت فاصلے کے ساتھ spacedBy۔

contentPadding LazyRow کنٹینر کے کناروں پر پیڈنگ شامل کرتا ہے۔ Modifier.padding کے برعکس، contentPadding کو اسکرولنگ کے دوران مدنظر رکھا جاتا ہے: پہلے عنصر میں بائیں کنارے سے پیڈنگ ہوگی، آخری میں دائیں کنارے سے۔ Material Design Guidelines, 2025 کے مطابق، کیروسلز اور گیلریوں کے لیے contentPadding لازمی ہے تاکہ پہلا اور آخری عنصر اسکرین کے کنارے سے چپک نہ جائیں۔

verticalAlignment LazyRow کے اندر عناصر کو عمودی طور پر سیدھ میں لاتا ہے۔ ڈیفالٹ طور پر Alignment.Top استعمال ہوتا ہے۔ مختلف اونچائیوں کے عناصر کو مرکز میں رکھنے کے لیے Alignment.CenterVertically استعمال کریں، جو مختلف تناسب کی تصاویر والے کیروسلز کے لیے مفید ہے۔

LazyRow پیرامیٹرز کا جدول

پیرامیٹرتفصیلڈیفالٹ ویلیو
horizontalArrangementعناصر کی افقی تقسیمArrangement.Start
contentPaddingکنٹینر کے کناروں پر پیڈنگPaddingValues(0.dp)
verticalAlignmentعمودی سیدھAlignment.Top
reverseLayoutعناصر کی الٹی ترتیبfalse
userScrollEnabledصارف اسکرولنگ فعال کریںtrue

LazyListState کے ساتھ افقی اسکرول کا انتظام

LazyListState LazyRow کے لیے LazyColumn کی طرح کام کرتا ہے: یہ پہلے نظر آنے والے عنصر، آفسیٹ اور مجموعی اسکرول پوزیشن کو ٹریک کرتا ہے۔ حالت rememberLazyListState() کے ذریعے بنائی جاتی ہے اور state پیرامیٹر میں منتقل کی جاتی ہے۔

LazyRow کا پروگراماتی اسکرول کنٹرول اسی طریقوں سے کیا جاتا ہے: ہموار اینیمیشن کے لیے animateScrollToItem اور فوری اسکرولنگ کے لیے scrollToItem۔ دونوں کو کوروٹین کے اندر بلایا جاتا ہے۔ یہ آگے/پیچھے بٹن والے کیروسلز یا خودکار اسکرولنگ کے لیے مفید ہے۔

Android Developers, 2024 کے مطابق، LazyRow SnapFlingBehavior کو بھی سپورٹ کرتا ہے — تیز اسکرولنگ کے لیے رویہ جو عناصر کے درمیان نہیں بلکہ قریب ترین عنصر پر رکتا ہے۔ یہ کیروسلز اور گیلریوں کے لیے ایک اسنیپ اثر پیدا کرتا ہے۔

kotlin
@Composable
fun CarouselWithSnap() {
    val listState = rememberLazyListState()
    val scope = rememberCoroutineScope()
    val items = listOf("A", "B", "C", "D", "E")

    Column {
        LazyRow(
            state = listState,
            flingBehavior = SnapFlingBehavior(listState),
            horizontalArrangement = Arrangement.spacedBy(8.dp)
        ) {
            items(items) { item ->
                Card(modifier = Modifier.width(150.dp)) {
                    Text(text = item, modifier = Modifier.padding(16.dp))
                }
            }
        }

        Row(modifier = Modifier.fillMaxWidth()) {
            Button(onClick = {
                scope.launch {
                    listState.animateScrollToItem(0)
                }
            }) { Text("شروع کرنے کے لیے") }
        }
    }
}

انٹرفیس میں LazyRow کے استعمال کی مثالیں

پہلی مثال — پیش نظارہ کے ساتھ تصویری گیلری کے لیے LazyRow۔ ہر عنصر ایک Box ہے جس میں ایک تصویر اور کیپشن ہے۔ LazyRow درجنوں اور سینکڑوں تصاویر کو موثر طریقے سے ہینڈل کرتا ہے، صرف نظر آنے والی تصاویر لوڈ کرتا ہے۔

kotlin
@Composable
fun ImageGallery(images: List<String>) {
    LazyRow(
        contentPadding = PaddingValues(start = 16.dp, end = 16.dp),
        horizontalArrangement = Arrangement.spacedBy(12.dp)
    ) {
        items(images, key = { it }) { url ->
            AsyncImage(
                model = url,
                contentDescription = "Image",
                modifier = Modifier.size(120.dp)
            )
        }
    }
}

دوسری مثال — آئیکنز کے ساتھ زمرہ جات کی فہرست کے لیے LazyRow۔ زمرہ جات چپس کے طور پر ظاہر ہوتے ہیں اور صارف انہیں افقی طور پر اسکرول کر سکتا ہے۔ spacedBy اور contentPadding کے ساتھ LazyRow زمرہ جات کے درمیان اور کناروں پر فاصلہ بناتا ہے۔

kotlin
@Composable
fun CategoryChips(categories: List<String>) {
    LazyRow(
        contentPadding = PaddingValues(horizontal = 16.dp),
        horizontalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        items(categories, key = { it }) { category ->
            AssistChip(
                onClick = {},
                label = { Text(category) }
            )
        }
    }
}

LazyRow بمقابلہ Row: کب کیا انتخاب کریں

LazyRow اور Row کے درمیان انتخاب عناصر کی تعداد پر منحصر ہے۔ Row 5–10 عناصر کے لیے موزوں ہے جو ہمیشہ اسکرین پر نظر آتے ہیں۔ LazyRow اس وقت ضروری ہے جب بہت سے عناصر ہوں یا ان کی تعداد متغیر ہو۔

Row ایک ساتھ تمام عناصر کو رینڈر کرتا ہے، جس سے بڑی تعداد میں عناصر کے ساتھ تاخیر ہوتی ہے۔ LazyRow صرف نظر آنے والے عناصر کو رینڈر کرتا ہے، جو اسے اسکرول ایبل فہرستوں کے لیے ترجیحی بناتا ہے۔ Android Developers Blog, 2024 کے مطابق، حد تقریباً 10 عناصر ہے: اگر زیادہ عناصر ہوں تو LazyRow استعمال کریں۔

LazyRow اینیمیشن، SnapFlingBehavior اور جداکاروں کے ذریعے گروپنگ کو بھی سپورٹ کرتا ہے، جو اسے پیچیدہ انٹرفیس کے لیے زیادہ لچکدار بناتا ہے۔ Row آسان ہے اور LazyListState کی ضرورت نہیں ہے، لیکن لمبی فہرستوں کے لیے بہتر نہیں ہے۔

  • Row — اسکرول کے بغیر 5–10 جامد عناصر کے لیے
  • LazyRow — افقی اسکرول کے ساتھ 10+ عناصر کے لیے
  • LazyRow — کیروسلز، گیلریوں، متغیر فہرستوں کے لیے

اکثر پوچھے گئے سوالات

LazyRow LazyColumn سے کیسے مختلف ہے؟

LazyRow افقی طور پر اسکرول ہوتا ہے اور عناصر کو بائیں سے دائیں ترتیب دیتا ہے، جبکہ LazyColumn عمودی طور پر اوپر سے نیچے اسکرول ہوتا ہے۔ دونوں سست لوڈنگ کے ایک ہی اصول، LazyListState اور DSL items فنکشنز استعمال کرتے ہیں۔

LazyRow میں SnapFlingBehavior کیسے شامل کریں؟

SnapFlingBehavior(listState) کو LazyRow کے flingBehavior پیرامیٹر میں پاس کریں۔ SnapFlingBehavior LazyRow کو عناصر کے درمیان نہیں بلکہ قریب ترین عنصر پر رکنے پر مجبور کرتا ہے، جو کیروسلز کے لیے اسنیپ اثر پیدا کرتا ہے۔

لامحدود اسکرولنگ کے ساتھ LazyRow کیسے بنائیں؟

LazyListState.layoutInfo کے ذریعے آخری نظر آنے والے عنصر کو ٹریک کریں اور جب آخری عنصر فہرست کے آخر کے قریب پہنچے تو نیا ڈیٹا لوڈ کریں۔ چکر دار اسکرولنگ کے لیے عناصر کی نقل کے ساتھ حسب ضرورت نفاذ استعمال کریں۔

کیا LazyRow کو LazyColumn کے اندر استعمال کیا جا سکتا ہے؟

جی ہاں، LazyRow کو LazyColumn کے اندر نیسٹ کیا جا سکتا ہے۔ یہ عمودی فہرست کے اندر افقی کیروسلز کے ساتھ پیچیدہ صفحات بنانے کا ایک معیاری نمونہ ہے۔ صحیح کام کرنے کے لیے ہر LazyRow کی ایک مقررہ اونچائی ہونی چاہیے۔

کیسے پتہ چلے کہ LazyRow آخر تک اسکرول ہو گیا ہے؟

LazyListState.layoutInfo.visibleItemsInfo استعمال کریں اور آخری نظر آنے والے عنصر کے انڈیکس کا کل تعداد سے ایک کم کر کے موازنہ کریں۔ جب یہ قدریں مماثل ہوں، LazyRow فہرست کے آخر میں ہے۔

خلاصہ

  • LazyRow — سست لوڈنگ کے ساتھ افقی فہرست، بڑے ڈیٹا کو موثر طریقے سے ہینڈل کرنے کے لیے اسکرولنگ کے دوران صرف نظر آنے والے عناصر بناتی اور دوبارہ استعمال کرتی ہے۔
  • horizontalArrangement عناصر کی افقی تقسیم کو منظم کرتا ہے، جبکہ contentPadding Material Design میں درست ڈسپلے کے لیے کناروں پر پیڈنگ شامل کرتا ہے۔
  • LazyListState animateScrollToItem کے ذریعے پروگراماتی اسکرول کنٹرول فراہم کرتا ہے اور عناصر پر اسنیپ کرنے کے لیے SnapFlingBehavior کو سپورٹ کرتا ہے۔
  • LazyRow موبائل انٹرفیس میں امیج کیروسلز، گیلریوں، زمرہ جات کی فہرستوں، ٹیبز اور افقی مینوز کے لیے موثر ہے۔
  • contentType اور key اہم اصلاحی ٹولز ہیں جو دوبارہ تشکیل کو کم کرتے ہیں اور LazyRow میں عناصر کے دوبارہ استعمال کو بہتر بناتے ہیں۔
  • Row 5–10 جامد عناصر کے لیے موزوں ہے، LazyRow — اسکرول کے ساتھ متغیر یا لمبی افقی فہرستوں کے لیے۔
  • LazyRow کو عمودی فہرست کے اندر افقی کیروسلز کے ساتھ پیچیدہ لے آؤٹ بنانے کے لیے LazyColumn میں نیسٹ کیا جا سکتا ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں