Widget: یہ کیا ہے، iOS WidgetKit اور Android پر ویجٹ

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

Widget iOS یا Android کی ہوم اسکرین پر ایک کمپیکٹ یوزر انٹرفیس عنصر ہے جو ایپ کھولے بغیر متعلقہ معلومات دکھاتا ہے۔ ویجٹ iOS 14 (2020) میں SwiftUI پر WidgetKit فریم ورک کے ساتھ ظاہر ہوئے اور Android میں ورژن 1.5 سے Kotlin یا Java پر AppWidgetProvider کے ذریعے موجود ہیں۔ یہ صارف کو براہ راست ہوم اسکرین پر موسم، زر مبادلہ کی شرح، کیلنڈر، نوٹس یا کاموں کی حیثیت دیکھنے کی اجازت دیتے ہیں، وقت بچاتے ہیں اور تعامل کو آسان بناتے ہیں۔ Apple کے مطابق، صارفین اوسطاً دن میں 4–6 بار ویجٹ کے ساتھ تعامل کرتے ہیں، اور ہوم اسکرین پر ویجٹ رکھنے سے ایپ کی مصروفیت 20–30% بڑھ جاتی ہے۔ Android کے لیے یہ اعداد و شمار مقابلatable ہیں۔ آئیے کوڈ مثالوں کے ساتھ دیکھتے ہیں کہ دونوں پلیٹ فارمز پر ویجٹ کیسے کام کرتے ہیں۔

اہم نکات

  • Widget — مرکزی ایپ چلائے بغیر فوری معلومات دیکھنے کے لیے ہوم اسکرین پر ایک منی ایپلیکیشن
  • iOS WidgetKit (iOS 14+) SwiftUI پر تین سائز اور TimelineProvider کے ذریعے اپ ڈیٹ کے ساتھ بنایا گیا ہے
  • Android AppWidgetProvider API level 3 سے موجود ہے اور RemoteViews استعمال کرتا ہے — علیحدہ عمل میں Views کا محدود سیٹ
  • ڈیٹا اپ ڈیٹ iOS پر — تاریخوں کے ساتھ timeline کے ذریعے، Android پر — updateIntervalMillis یا WorkManager کے ذریعے
  • Smart Stack iOS پر اور Android پر ویجٹ اسٹیک ایک سلاٹ میں متعدد ویجٹ کو گروپ کرنے کی اجازت دیتے ہیں

Widget کیا ہے

Widget ایک کمپیکٹ یوزر انٹرفیس عنصر ہے جو موبائل ڈیوائس کی ہوم اسکرین پر رکھا جاتا ہے تاکہ کسی ایپ سے متعلقہ معلومات دکھائی جا سکے۔ مکمل ایپلیکیشن کے برعکس، ویجٹ کو لانچ کرنے کی ضرورت نہیں ہوتی — صارف اسکرین انلاک کرنے کے فوراً بعد ڈیٹا دیکھتا ہے۔ یہ تصور ڈیسک ٹاپ OS (macOS Dashboard، Windows Sidebar) سے آیا ہے، اور موبائل ماحول میں، Android نے اپنی پہلی ریلیز (Android 1.5 Cupcake، 2009) سے ویجٹ سپورٹ متعارف کرایا، جبکہ Apple نے صرف iOS 14 میں انہیں شامل کیا۔

تکنیکی نفاذ پلیٹ فارم کے مطابق مختلف ہوتا ہے۔ iOS ویجٹ Xcode میں ایک علیحدہ target ہے، جو Widget Extension کے طور پر compile ہوتا ہے اور اپنے عمل میں چلتا ہے۔ Android ویجٹ ایک BroadcastReceiver ہے جو AppWidgetProvider کو بڑھاتا ہے اور RemoteViews کے ذریعے لے آؤٹ پیش کرتا ہے۔ دونوں پلیٹ فارم کارکردگی اور میموری پر سخت پابندیاں لگاتے ہیں: حدود سے تجاوز کرنے پر سسٹم ویجٹ کو ہٹا سکتا ہے۔ iOS ویجٹ کو 30–50 MB اور timeline بنانے کے وقت کو 10 سیکنڈ تک محدود کرتا ہے۔ Android — updatePeriodMillis کے ذریعے 30 منٹ سے زیادہ کا وقفہ نہیں اور onUpdate پھنسنے پر جبری خاتمہ۔

Smart Stack iOS پر اور Android پر اسٹیک صارف کو ہوم اسکرین سلاٹ میں متعدد ویجٹ گروپ کرنے کی اجازت دیتے ہیں۔ ڈیوائس دن کے وقت، مقام یا صارف کی سرگرمی کی بنیاد پر دکھائے جانے والے ویجٹ کو خود بخود تبدیل کرتی ہے۔ مثال کے طور پر، صبح کیلنڈر دکھایا جاتا ہے، دن میں — موسم، شام کو — نوٹس۔ ڈویلپرز کے لیے، اس کا مطلب ہے کہ ویجٹ کو اسٹیک کے حصے کے طور پر صحیح طریقے سے کام کرنا چاہیے اور مسلسل ڈسپلے پر انحصار نہیں کرنا چاہیے۔

iOS WidgetKit: SwiftUI اور TimelineProvider

WidgetKit iOS 14+، iPadOS 14+ اور macOS 11+ پر ویجٹ بنانے کے لیے Apple کا فریم ورک ہے۔ ویجٹ SwiftUI اور مواد کی اپ ڈیٹ کے لیے TimelineProvider میکانزم کا استعمال کرتے ہوئے Swift میں لکھے جاتے ہیں۔ WidgetKit آرکیٹیکچر میں تین اجزاء شامل ہیں: TimelineProvider — ایک ڈیٹا ماخذ جو اندراجات کے ساتھ ٹائم لائن بناتا ہے؛ Widget Entry View — ایک SwiftUI View جو اندراج کی بنیاد پر مواد دکھاتی ہے؛ Widget Configuration — ویجٹ کی قسم، سائز اور خاندانوں کی تفصیل۔

WidgetKit اپ ڈیٹس کو خود بخود منظم کرتا ہے — ڈویلپر سسٹم کی اجازت سے زیادہ بار ویجٹ اپ ڈیٹ کرنے پر مجبور نہیں کر سکتا۔ Apple ڈیوائس پر تمام ویجٹ کے درمیان تقسیم کردہ اپ ڈیٹ بجٹ استعمال کرتا ہے۔ کم از کم وقفہ 15–30 منٹ ہے۔ اہم ڈیٹا (مثلاً ترسیل کی حیثیت) کے لیے، push-to-refresh استعمال کیا جاتا ہے — متعلقہ مستقبل کی تاریخ کے ساتھ ایک push اطلاع بھیجنا، جس کے بعد WidgetKit ایک نئی ٹائم لائن کی درخواست کرتا ہے۔ iOS 17 سے، ویجٹ App Intents کے ذریعے انٹرایکٹیویٹی کو سپورٹ کرتے ہیں — صارف ایپ کھولے بغیر ویجٹ کے اندر بٹن دبا سکتے ہیں۔

سائزiOS (pt)مواد
Small170 × 1701–2 میٹرکس: درجہ حرارت، زر مبادلہ کی شرح
Medium360 × 1702–4 میٹرکس: 5 دن کی پیشن گوئی، فہرست
Large360 × 3805–10 میٹرکس: کیلنڈر، خبروں کی فیڈ

Android AppWidgetProvider: RemoteViews

AppWidgetProvider Android پر ویجٹ بنانے کے لیے بنیادی کلاس ہے، جو API level 3 سے Android SDK کا حصہ ہے۔ Android ویجٹ ایک BroadcastReceiver ہے جو سسٹم سے اپ ڈیٹ، فعال اور غیر فعال کرنے کے واقعات وصول کرتا ہے۔ iOS کے برعکس، جہاں ویجٹ اپنے انجن پر SwiftUI کے ساتھ پیش کیا جاتا ہے، Android RemoteViews استعمال کرتا ہے — سسٹم کے عمل (لانچر) میں پیش کردہ View اجزاء کا محدود سیٹ۔ کسٹم Views، پیچیدہ اینیمیشنز یا UI لائبریریاں استعمال نہیں کی جا سکتیں۔

Android ویجٹ کا ورک فلو چار مراحل پر مشتمل ہے۔ کنفیگریشن — اسکرین پر ویجٹ شامل کرتے وقت، سسٹم ایک کنفیگریشن Activity شروع کر سکتا ہے جہاں صارف ترتیبات منتخب کرتا ہے۔ اپ ڈیٹ — سسٹم ایک مقررہ وقفے (کم از کم 30 منٹ) پر یا WorkManager کے ذریعے ایپ سے سگنل پر onUpdate() کال کرتا ہے۔ رینڈرنگ — فراہم کنندہ موجودہ ڈیٹا کے ساتھ RemoteViews بناتا ہے اور انہیں AppWidgetManager کے ذریعے منتقل کرتا ہے۔ ٹچ ہینڈلنگ — ویجٹ بٹن کے لیے PendingIntent کو سپورٹ کرتا ہے: کلک کرنے سے Activity کھلتی ہے یا کارروائی ہوتی ہے۔ Android 12 سے، ویجٹ کو گول کونوں، انکولی Material You رنگوں اور متحرک سائز کی تبدیلی کی سپورٹ ملی۔

iOS پر WidgetKit کے ساتھ ویجٹ بنانا

آئیے WidgetKit اور SwiftUI کا استعمال کرتے ہوئے Swift میں موسم کا ویجٹ بناتے ہیں۔ پروجیکٹ میں Widget Extension target شامل ہونا چاہیے، جو Xcode میں File → New → Target → Widget Extension کے ذریعے شامل کیا جاتا ہے۔

swift
import WidgetKit
import SwiftUI

// 1. ویجٹ کے لیے ڈیٹا ماڈل
struct WeatherEntry: TimelineEntry {
    let date: Date
    let temperature: Int
    let condition: String
}

// 2. TimelineProvider — ڈیٹا فراہم کنندہ
struct Provider: TimelineProvider {
    func placeholder(in context: Context) -> WeatherEntry {
        WeatherEntry(date: Date(), temperature: 22, condition: "دھوپ")
    }

    func getSnapshot(in context: Context, completion: @escaping (WeatherEntry) -> Void) {
        let entry = WeatherEntry(date: Date(), temperature: 22, condition: "دھوپ")
        completion(entry)
    }

    func getTimeline(in context: Context, completion: @escaping (Timeline<WeatherEntry>) -> Void) {
        let now = Date()
        let entry = WeatherEntry(date: now, temperature: 20, condition: "ابر آلود")
        let nextUpdate = Calendar.current.date(byAdding: .hour, value: 3, to: now)!
        let timeline = Timeline(entries: [entry], policy: .after(nextUpdate))
        completion(timeline)
    }
}

// 3. ڈسپلے کے لیے SwiftUI View
struct WeatherWidgetEntryView: View {
    var entry: WeatherEntry

    var body: some View {
        VStack(alignment: .leading) {
            Text("موسم").font(.caption).foregroundColor(.secondary)
            HStack {
                Text("\(entry.temperature)°").font(.largeTitle).fontWeight(.bold)
                Spacer()
                Text(entry.condition).font(.body)
            }
        }.padding()
    }
}

// 4. ویجٹ کنفیگریشن
@main
struct WeatherWidget: Widget {
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: "WeatherWidget", provider: Provider()) { entry in
            WeatherWidgetEntryView(entry: entry)
        }
        .configurationDisplayName("موسم")
        .description("موجودہ درجہ حرارت دکھاتا ہے")
        .supportedFamilies([.systemSmall, .systemMedium])
    }
}

اہم نکات: TimelineProvider یہ طے کرتا ہے کہ کب اور کون سا ڈیٹا دکھانا ہے؛ getTimeline .after(nextUpdate) اپ ڈیٹ پالیسی کے ساتھ ٹائم لائن بناتا ہے؛ StaticConfiguration فراہم کنندہ کو View سے جوڑتا ہے۔ متحرک ڈیٹا کے لیے، کسٹم پیرامیٹرز کے ساتھ IntentConfiguration استعمال کیا جاتا ہے۔

Android پر AppWidgetProvider کے ساتھ ویجٹ بنانا

آئیے AppWidgetProvider اور RemoteViews کے ساتھ Kotlin میں اسی طرح کا موسمی ویجٹ نافذ کرتے ہیں۔

kotlin
// WeatherWidgetProvider.kt
class WeatherWidgetProvider : AppWidgetProvider() {

    override fun onUpdate(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetIds: IntArray
    ) {
        for (appWidgetId in appWidgetIds) {
            updateAppWidget(context, appWidgetManager, appWidgetId)
        }
    }

    override fun onAppWidgetOptionsChanged(
        context: Context,
        appWidgetManager: AppWidgetManager,
        appWidgetId: Int,
        newOptions: Bundle
    ) {
        updateAppWidget(context, appWidgetManager, appWidgetId)
    }

    companion object {
        fun updateAppWidget(
            context: Context,
            appWidgetManager: AppWidgetManager,
            appWidgetId: Int
        ) {
            val temperature = 20
            val condition = "ابر آلود"
            val views = RemoteViews(
                context.packageName, R.layout.widget_weather
            ).apply {
                setTextViewText(R.id.tv_temperature, "$temperature°")
                setTextViewText(R.id.tv_condition, condition)
                setOnClickPendingIntent(
                    R.id.widget_root, PendingIntent.getActivity(
                        context, 0,
                        Intent(context, MainActivity::class.java),
                        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
                    )
                )
            }
            appWidgetManager.updateAppWidget(appWidgetId, views)
        }
    }
}

// AndroidManifest — فراہم کنندہ رجسٹریشن
<receiver android:name=".WeatherWidgetProvider" android:exported="true">
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_weather_info" />
</receiver>

widget_weather_info.xml فائل کم از کم سائز، وقفہ اور لے آؤٹ سیٹ کرتی ہے: minWidth 160dp، minHeight 80dp، updatePeriodMillis 3600000 (1 گھنٹہ)۔ RemoteViews صرف معاون اجزاء استعمال کرتا ہے: LinearLayout، TextView، ImageView۔ کسٹم Views اور ConstraintLayout Android 5.0 سے دستیاب ہیں۔ GlanceLayout — RemoteViews کے لیے ایک تجرباتی Compose-based طریقہ — Android 15 میں ظاہر ہوا۔

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

iOS اور Android پر Widget میں کیا فرق ہے؟

iOS WidgetKit تین مقررہ سائز (small، medium، large) اور سسٹم بجٹ کے ساتھ TimelineProvider کے ذریعے اپ ڈیٹ پیش کرتا ہے۔ Android AppWidgetProvider لچکدار سیل پر مبنی سائز، رینڈرنگ کے لیے RemoteViews اور updatePeriodMillis یا WorkManager کے ذریعے اپ ڈیٹ استعمال کرتا ہے۔

Widget کتنی بار اپ ڈیٹ ہوتا ہے؟

iOS پر، سسٹم اپ ڈیٹس کو کنٹرول کرتا ہے — کم از کم وقفہ 15–30 منٹ ہے، اہم ڈیٹا کے لیے push-to-refresh استعمال کیا جاتا ہے۔ Android پر، وقفہ updatePeriodMillis (کم از کم 30 منٹ) میں یا پس منظر کے کاموں کے لیے WorkManager کے ذریعے سیٹ کیا جاتا ہے۔

Widget کن سائز کو سپورٹ کرتا ہے؟

iOS small (170x170pt)، medium (360x170pt) اور large (360x380pt) کو سپورٹ کرتا ہے۔ Android ایک لچکدار سیل گرڈ استعمال کرتا ہے: 2x1 سے 5x5 تک، سائز لانچر اور OS ورژن پر منحصر ہے۔

کیا Widget میں اینیمیشن شامل کی جا سکتی ہے؟

iOS پر، ویجٹ کے اندر اینیمیشنز دستیاب نہیں ہیں — یہ جامد عناصر ہیں۔ Android RemoteViews setFloat() اور ViewPropertyAnimator کے ذریعے بنیادی اینیمیشنز کو سپورٹ کرتا ہے، لیکن پیچیدہ اینیمیشنز دستیاب نہیں ہیں۔

کیا Widget ڈیوائس کی کارکردگی کو کم کرتا ہے؟

صحیح نفاذ کے ساتھ — نہیں۔ سسٹم ویجٹ وسائل کو سختی سے محدود کرتا ہے: iOS پر — اپ ڈیٹ اور میموری بجٹ (30–50 MB)، Android پر — کم از کم اپ ڈیٹ وقفہ۔ مسئلہ والے ویجٹ سسٹم کے ذریعے جبری طور پر ختم کر دیے جاتے ہیں۔

خلاصہ

  • Widget — ایپ کھولے بغیر ڈیٹا تک فوری رسائی کے لیے ہوم اسکرین کا کمپیکٹ عنصر
  • iOS WidgetKit تین مقررہ سائز اور SwiftUI کے ساتھ TimelineProvider کے ذریعے اپ ڈیٹ کو سپورٹ کرتا ہے
  • Android AppWidgetProvider لچکدار سیل سائز کے ساتھ BroadcastReceiver اور RemoteViews کے ذریعے کام کرتا ہے
  • ڈیٹا اپ ڈیٹ دونوں پلیٹ فارمز پر سسٹم محدود ہے: iOS — اپ ڈیٹ بجٹ، Android — کم از کم 30 منٹ
  • انٹرایکٹیویٹی iOS 17 (App Intents) اور Android 12 (متحرک رنگ، بٹن) پر ظاہر ہوئی
  • Smart Stack iOS پر اور Android پر اسٹیک خودکار سوئچنگ کے ساتھ متعدد ویجٹ کو گروپ کرنے کی اجازت دیتے ہیں
  • کارکردگی اہم ہے — حدود سے تجاوز کرنے پر سسٹم مسئلہ والے ویجٹ کو جبری طور پر ختم کرتا ہے

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

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

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

مزید پڑھیں