إنشاء بيئة التشغيل
هي الوحدات الأساسية التي يستند إليها نموذج البرمجة وإدارة الحالة في Compose، بالإضافة إلى وقت التشغيل الأساسي الذي يستهدفه المكوِّن الإضافي Compose Compiler Plugin.
التعديل الأخير الإصدار المستقر سحب المرشح الإصدار التجريبي إصدار أولي
26 يونيو 2024 1.6.8 - 1.7.0-beta04 -

البنية

الإنشاء عبارة عن مزيج من 7 معرّفات مجموعات Maven ضمن androidx. تحتوي كل مجموعة على مجموعة فرعية مستهدفة من الوظائف، ولكل منها مجموعة خاصة من ملاحظات الإصدار.

يوضح هذا الجدول المجموعات والروابط لكل مجموعة من ملاحظات الإصدار.

مجموعةالوصف
compos.animationيمكنك إنشاء صور متحركة في تطبيقات Jetpack Compose لإثراء تجربة المستخدم.
compose.compilerيمكنك تحويل دوال @Composable وتفعيل التحسينات باستخدام المكون الإضافي لبرنامج التحويل البرمجي لـ Kotlin.
composation.foundationيمكنك كتابة تطبيقات Jetpack Compose باستخدام الوحدات الأساسية الجاهزة للاستخدام وتوسيع الأساس لإنشاء أجزاء نظام التصميم الخاصة بك.
compose.materialيمكنك إنشاء واجهات المستخدم في Jetpack Compose باستخدام عناصر التصميم المتعدد الأبعاد. وهي نقطة الدخول ذات المستوى الأعلى في Compose، والتي تم تصميمها لتوفير مكونات تطابق العناصر المذكورة في www.material.io.
compose.material3يمكنك إنشاء واجهات المستخدم في Jetpack Compose باستخدام مكونات Material Design 3، وهي المراحل المتطوّرة التالية في Material Design. تتضمّن المادة 3 تصاميم ومكوّنات محدّثة وميزات تخصيص Material You مثل الألوان الديناميكية، وهي مصممة لتكون متوافقة مع النمط المرئي الجديد في Android 12 وواجهة مستخدم النظام.
compose.runtimeهي الوحدات الأساسية التي يستند إليها نموذج البرمجة وإدارة الحالة في Compose، بالإضافة إلى وقت التشغيل الأساسي الذي يستهدفه المكوِّن الإضافي Compose Compiler Plugin.
compos.uiيجب استخدام المكونات الأساسية لواجهة مستخدم الإنشاء للتفاعل مع الجهاز، بما في ذلك التنسيق والرسم والإدخال.

إعلان التبعيات

لإضافة تبعية إلى Compose، يجب إضافة مستودع Google Maven إلى مشروعك. يمكنك الاطّلاع على مستودع Maven من Google للحصول على مزيد من المعلومات.

أضِف العناصر الاعتمادية الخاصة بالعناصر التي تحتاج إليها في ملف build.gradle لتطبيقك أو وحدتك:

رائع

dependencies {
    implementation "androidx.compose.runtime:runtime:1.6.8"
    implementation "androidx.compose.runtime:runtime-livedata:1.6.8"
    implementation "androidx.compose.runtime:runtime-rxjava2:1.6.8"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.runtime:runtime:1.6.8")
    implementation("androidx.compose.runtime:runtime-livedata:1.6.8")
    implementation("androidx.compose.runtime:runtime-rxjava2:1.6.8")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.14"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

لمزيد من المعلومات حول العناصر الاعتمادية، يُرجى الاطّلاع على إضافة تبعيات الإصدار.

ملاحظات

تساعدنا ملاحظاتك في تحسين Jetpack. أخبرنا إذا اكتشفت مشكلات جديدة أو كانت لديك أفكار لتحسين هذه المكتبة. يُرجى الاطّلاع على المشاكل الحالية في هذه المكتبة قبل إنشاء مكتبة جديدة. يمكنك إضافة تصويتك إلى مشكلة حالية من خلال النقر على زر النجمة.

إنشاء عدد جديد

راجِع مستندات "أداة تتبُّع المشاكل" للحصول على مزيد من المعلومات.

الإصدار 1.0 من تتبُّع وقت التشغيل

الإصدار 1.0.0-beta01

29 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-beta01. يحتوي الإصدار 1.0.0-beta01 على عمليات التنفيذ هذه.

الإصدار 1.0.0-alpha05

15 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • تثبيت التبعيات على أدنى الإصدارات الثابتة المتوافقة (مثل com-runtime وtracing-perfetto) - إصلاح المشكلة حيث يؤدي إنشاء "التتبع في وقت التشغيل" إلى إصدار أحدث من وقت تشغيل إنشاء الرسالة في التطبيق.

الإصدار 1.0.0-alpha04

23 آب (أغسطس) 2023

تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-alpha04. يحتوي الإصدار 1.0.0-alpha04 على عمليات التنفيذ هذه.

الميزات الجديدة

  • يتوافق هذا العرض مع أحدث إصدارَين من أداة Benchmark and Tracing Perfetto، ما يتيح استخدام ميزة "تتبُّع التكوين" عند بدء تشغيل التطبيق (البداية الباردة)، على سبيل المثال في AndroidX Benchmark وAndroid Studio (بدءًا من الإصدار التجريبي من Hedgehog 2).

التغييرات في واجهة برمجة التطبيقات

  • تمت إعادة تسمية "androidx.tracing.perfetto.Trace" إلى "androidx.tracing.perfetto.PerfettoSdkTrace". (I44af8)
  • الحفاظ على اتّساق واجهات برمجة التطبيقات Tracing Perfetto SDK مع "android.os.Trace" (I73ba0، b/282199917)
  • المتطلّبات الأساسية للتتبّع عند بدء تشغيل التطبيق (Iad890)
  • ملفات واجهة برمجة تطبيقات تجريبية وعامة تم دمجها (I0f2e1 وb/278769092)

الإصدار 1.0.0-alpha02

8 شباط (فبراير) 2023

تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على عمليات التنفيذ هذه.

الميزات الجديدة

  • ما مِن تغييرات في الوظائف. تحسينات متعددة للأداء في اعتماديات ما بعد بيع المنتج androidx.tracing:tracing-perfetto*.

الإصدار 1.0.0-alpha01

7 أيلول (سبتمبر) 2022

تم طرح androidx.compose.runtime:runtime-tracing:1.0.0-alpha01. يحتوي الإصدار 1.0.0-alpha01 على عمليات التنفيذ هذه.

الميزات الجديدة

  • androidx.compose.runtime:runtime-tracing هي مكتبة تتيح، في حال توفُّر أدوات متوافقة معها (قريبًا)، إمكانية التتبّع الممتد في تطبيق Compose. هذا الإصدار الأولي هو 1.0.0-alpha01.

الإصدار 1.7

الإصدار 1.7.0-beta04

26 يونيو 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-beta04. يحتوي الإصدار 1.7.0-beta04 على عمليات التنفيذ هذه.

الإصدار 1.7.0-beta03

12 يونيو 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-beta03. يحتوي الإصدار 1.7.0-beta03 على عمليات التنفيذ هذه.

الإصدار 1.7.0-beta02

29 مايو 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-beta02. يحتوي الإصدار 1.7.0-beta02 على عمليات التنفيذ هذه.

الإصدار 1.7.0-beta01

14 مايو 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-beta01. يحتوي الإصدار 1.7.0-beta01 على عمليات التنفيذ هذه.

الإصدار 1.7.0-alpha08

1 مايو 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha08. تحتوي الإصدار 1.7.0-alpha08 على عمليات التنفيذ هذه.

الإصدار 1.7.0-alpha07

17 أبريل 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha07. يحتوي الإصدار 1.7.0-alpha07 على عمليات التنفيذ هذه.

الميزات الجديدة

  • تمت إضافة إمكانية توفير مقطوعة موسيقية محلية تم احتسابها استنادًا إلى قيم المقطوعات الموسيقية الأخرى المحلية إما تلقائيًا باستخدام compositionLocalWithComputedDefault() أو من خلال توفير lambda لاستخدامها في احتساب القيمة باستخدام providesComputed بدلاً من provides.
  • يمكن الحصول على قيمة المقطوعة الموسيقية المحلية باستخدام خاصية currentValue للمقطوعة الموسيقية المحلية التي يمكن الوصول إليها من داخل دالة lambda حسب القيمة. يتم استخدام هذه السمة بدلاً من الدالة current التي لا يمكن الوصول إليها إلا من خلال دوال @Composable. (Iadbc0)

التغييرات في واجهة برمجة التطبيقات

  • يمكن الوصول على الفور إلى كائنات الحالة التي تم إنشاؤها حديثًا من اللقطات الأخرى، بما في ذلك اللقطة العامة، مع حالتها الأولية. لن تظهر أي تعديلات لاحقة إلى أن يتم تطبيق اللقطة التي تم إنشاء العنصر فيها.
  • الحالة الأولية لـ mutableStateOf()، بالإضافة إلى نُسخها الأساسية، هي القيمة التي يتم تمريرها كمَعلمة إلى mutableStateOf(). الحالة الأولية للسمتَين mutableStateListOf() وmutableStateMapOf() فارغة.
  • تمت إضافة Snapshot.isInSnapshot وSnapshot.PreexistingSnapshotId اللذَين يتم استخدامهما لتفعيل عنصر حالة لإتاحة إمكانية الوصول إليه على الفور من خلال اللقطة العامة عند إنشائه.
  • يمكن أن تدعم كائنات الحالة المخصصة إمكانية الوصول إليها فورًا من خلال اتباع نمط التغييرات التي يتم إجراؤها على كائنات اللقطات المدمجة. (I84a17)

إصلاح الأخطاء

  • تم إصلاح دمج readObserver في اللقطات المتداخلة. وأدّى ذلك إلى عدم صلاحية الحالات المشتقة المدمَجة عند استخدامها في snapshotFlow. (Idf138)

الإصدار 1.7.0-alpha06

3 أبريل 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha06. تحتوي الإصدار 1.7.0-alpha06 على عمليات التنفيذ هذه.

إصلاح الأخطاء

  • حلّ المشكلة التي توفّر قيمًا فردية تعالج providesDefault (538f45)
  • تجنُّب إيقاف مؤقت في أداة إعادة الإنشاء للوصول إلى ساعة الإطار (07e5c6)

الإصدار 1.7.0-alpha05

20 مارس 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha05. يحتوي الإصدار 1.7.0-alpha05 على عمليات التنفيذ هذه.

إصلاح الأخطاء

  • محو التغييرات المتأخرة على التركيبة التي تم إيقافها (5950bc)

الإصدار 1.7.0-alpha04

‫6 مارس 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha04. يحتوي الإصدار 1.7.0-alpha04 على عمليات التنفيذ هذه.

تحسينات الأداء

  • طلب Snapshot.current مرة واحدة لكل تقييم حالة مشتق (ee7daf)
  • قراءة currentRecord مرة واحدة لكل ملاحظة في المقطوعة الموسيقية (b882b2)
  • إزالة التخصيص المكرّر غير المقصود في snapshotFlow (231e56)
  • تفعيل nonSkippingGroupOptimization لإنشاء المكتبات يؤدي ذلك إلى زيادة كفاءة الرمز الذي تم إنشاؤه لجميع الدوال القابلة للإنشاء غير القابلة لإعادة التشغيل في androidx. نخطط لتفعيل هذه الميزة تلقائيًا في المستقبل. I(acbc08)

الإصدار 1.7.0-alpha03

21 فبراير 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha03. يحتوي الإصدار 1.7.0-alpha03 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • إدخال مجموعات الاستبدال لتحسين رصد التغييرات (0941b5)

تحسينات الأداء

  • تحسين تخصيص الذاكرة عند رصد التغييرات (53e7fd)
  • إصلاح تسرّب الذاكرة في المؤلف (0e097d)
  • استخدِم ScopeMap لتمرير عمليات الإلغاء عند إعادة الإنشاء (e19a7e)
  • ربط "تحسين عمليات إلغاء الصلاحية" للاحتفاظ فقط بالحالات الناتجة (f11c44)
  • استبدال IdentityArraySet استخدامات بـ ScatterSet (db572e)
  • تحسين removeScope في ScopeMap (bb0530)

الإصدار 1.7.0-alpha02

7 فبراير 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha02. يحتوي الإصدار 1.7.0-alpha02 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • يمكنك إيقاف دالة lambdas القابلة للإنشاء في التركيبات الفرعية على الإطار نفسه. (98301c)
  • يمكنك طلب معاودة الاتصال على "onRelease" بنفس ترتيب "onForgotten". (2cd790)
  • فلترة الحالات التي تم تغييرها والتي لم يتم رصدها في snapshotFlow (796b80)

تحسينات الأداء

  • تعديل مراقب اللقطة في مكانه عندما يكون شفافًا فعلاً. (f60f30)
  • تحسين SnapshotIdSet.lowest(). (7ae149)
  • يمكنك استخدام fold() بدون تخصيص في SnapshotIdSet. (532b7d)
  • إزالة تخصيص المكرّر (83f96b)

الإصدار 1.7.0-alpha01

24 يناير 2024

تم طرح androidx.compose.runtime:runtime-*:1.7.0-alpha01. يحتوي الإصدار 1.7.0-alpha01 على هذه عمليات التنفيذ.

تحسينات الأداء

  • إضافة إمكانية إنشاء خانات بعد إضافة مجموعة فرعية (b5960c)
  • تحسين تسجيل تعديلات حالات اللقطات (28c3fe)
  • تفعيل وضع التخطّي القوي (ed1766)

إصلاح الأخطاء

  • حساب للمَعلمة التلقائية الوصفية في التذكّر الجوهري (096665)
  • جعل currentCompoundHashKey فريدًا في المزيد من الحالات (d4a872)
  • إظهار المجموعات عند الخروج من استدعاء الدالة المضمّنة (2a90fc)

الإصدار 1.6

الإصدار 1.6.8

12 يونيو 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.8. يحتوي الإصدار 1.6.8 على عمليات الالتزام هذه.

الإصدار 1.6.7

1 مايو 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.7. يحتوي الإصدار 1.6.7 على عمليات الالتزام هذه.

الإصدار 1.6.6

17 أبريل 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.6. لم يتم إجراء أي تغييرات منذ الإصدار الأخير.

الإصدار 1.6.5

3 أبريل 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.5. يحتوي الإصدار 1.6.5 على عمليات الالتزام هذه.

الإصدار 1.6.4

20 مارس 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.4. يحتوي الإصدار 1.6.4 على عمليات الالتزام هذه.

الإصدار 1.6.3

‫6 مارس 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.3. يحتوي الإصدار 1.6.3 على عمليات الالتزام هذه.

الإصدار 1.6.2

21 فبراير 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.2. يحتوي الإصدار 1.6.2 على هذه الالتزامات.

الإصدار 1.6.1

7 فبراير 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.1. يحتوي الإصدار 1.6.1 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • يمكنك طلب معاودة الاتصال على "onRelease" بنفس ترتيب "onForgotten". (2cd790)
  • فلترة الحالات التي تم تغييرها والتي لم يتم رصدها في snapshotFlow (796b80)

الإصدار 1.6.0

24 يناير 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.0. يحتوي الإصدار 1.6.0 على هذه الالتزامات.

تغييرات مهمة منذ الإصدار 1.5.0

الميزات الجديدة

  • إعادة عرض الاستثناءات التي تم استيعابها أثناء تكرار إعادة الإنشاء (4dff9a)

تحسينات الأداء

  • تحسين تسجيل تعديلات حالات اللقطات (28c3fe)
  • تحسين rememberSaveable (f01d79)
  • تأجيل إعادة قراءة الحالات الناتجة حتى يتم تسجيل التغييرات (f38099)
  • تحسين تقديم قيم محلية للتأليف (a337ea)

إصلاح الأخطاء

  • إصلاح تسرّب الذاكرة في جدول الخانة (73fcfe)
  • تخطي إعادة تركيب التركيبات الفرعية التي ستتم إزالتها. (Ieeb99، b/254645321)
  • لا يتم تفعيل سوى مراحل نشاط "RememberObserver" عند تخزينها في عملية احتساب التذكُّر. (f6b4dc)
  • حصر التقاط $dirty على رموز lambda المضمّنة. (acfca0)
  • إصلاح المحتوى المنقول الذي يتلقى أحيانًا مقطوعة موسيقية محلية غير صحيحة. (035cd6)

الإصدار 1.6.0-rc01

10 يناير 2024

تم طرح androidx.compose.runtime:runtime-*:1.6.0-rc01. يحتوي الإصدار 1.6.0-rc01 على هذه عمليات التنفيذ.

الإصدار 1.6.0-beta03

13 كانون الأول (ديسمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-beta03. يحتوي الإصدار 1.6.0-beta03 على هذه الالتزامات.

الإصدار 1.6.0-beta02

29 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-beta02. يحتوي الإصدار 1.6.0-beta02 على عمليات التنفيذ هذه.

الإصدار 1.6.0-beta01

15 تشرين الثاني (نوفمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-beta01. يحتوي الإصدار 1.6.0-beta01 على هذه الالتزامات.

التغييرات في واجهة برمجة التطبيقات

  • نشر قيم استقرار معيّنة في التعليق التوضيحي (274a4c)

إصلاح الأخطاء

  • استخدِم السياسة المرجعية لوضع حالة النطاق المحلي للمقطوعة في السياق. (83361c)
  • حصر التقاط $dirty على ملفات lambdas المضمَّنة. (acfca0)
  • إصلاح المحتوى المنقول الذي يتلقى أحيانًا مقطوعة موسيقية محلية غير صحيحة. (035cd6)
  • يمكنك استخدام خرائط تجزئة أسرع بدون تخصيص في RecomposeScopeImpl. (d79494)
  • يمكنك استخدام ObjectIntMap في DerivedState. (21862e)
  • استخدِم IntRef مع int SnapshotThreadLocal في DerivedState. (04eaf4)

الإصدار 1.6.0-alpha08

18 تشرين الأول (أكتوبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha08. يحتوي الإصدار 1.6.0-alpha08 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • لا يتم تفعيل سوى مراحل نشاط "RememberObserver" عند تخزينها في عملية احتساب التذكُّر. (f6b4dc)
  • يتم تحسين عمليات التخصيص في ترتيب قوائم إلغاء الصلاحية. (954d63)
  • استخدام خرائط جديدة غير مخصصة في SnapshotStateObserver (4303ce)
  • محو حالات إلغاء الصلاحية عندما تكون المقطوعة الموسيقية غير مفعَّلة. (e001be)

الإصدار 1.6.0-alpha07

‫4 أكتوبر 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha07. يحتوي الإصدار 1.6.0-alpha07 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تم وضع علامة RandomAccess على SnapshotStateList لإتاحة استخدام إصدار الفهرسة المباشرة من مساعدات القوائم. (I5210c، b/219554654)

الإصدار 1.6.0-alpha06

20 أيلول (سبتمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha06. يحتوي الإصدار 1.6.0-alpha06 على هذه عمليات التنفيذ.

الإصدار 1.6.0-alpha05

6 أيلول (سبتمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha05. يحتوي الإصدار 1.6.0-alpha05 على هذه عمليات التنفيذ.

الإصدار 1.6.0-alpha04

23 آب (أغسطس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha04. يحتوي الإصدار 1.6.0-alpha04 على هذه عمليات التنفيذ.

الميزات الجديدة

  • إعادة عرض الاستثناءات التي تم استيعابها أثناء تكرار إعادة الإنشاء (4dff9a)

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة طريقة لإيقاف ReusableComposition، وإزالة الملاحظات ولكن مع الاحتفاظ بالعُقد في مكانها. يمكن إعادة تفعيل المقطوعة الموسيقية التي تم إيقافها من خلال الاتصال بالرقم setContent. (Ib7f31)
  • إضافة واجهة ReusableComposition لإدارة مراحل النشاط وإعادة استخدام التركيبات الفرعية. (I812d1، b/252846775)

الإصدار 1.6.0-alpha03

9 آب (أغسطس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha03. يحتوي الإصدار 1.6.0-alpha03 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • إصلاح تحسين CompositionLocalProvider الجديد (3118e88)
  • تصحيح طريقة تفكيك عُقد المحتوى القابل للنقل. (5e3d59b)

الإصدار 1.6.0-alpha02

26 تموز (يوليو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha02. يحتوي الإصدار 1.6.0-alpha02 على هذه عمليات التنفيذ.

تحسينات الأداء والميزات الجديدة

  • تحسين rememberSaveable (f01d79)
  • تأجيل إعادة قراءة الحالات الناتجة حتى يتم تسجيل التغييرات (f38099)
  • تحسين تقديم قيم محلية للتأليف (a337ea)
  • تم وضع علامة @ExplicitGroupsComposable على SideEffect لتجنُّب إنشاء مجموعة. (I74815)
  • تجنب المقارنة بين الخرائط المحلية التي تم إنشاؤها عند إعادة الاستخدام (782071)

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة حِمل زائد على حالة خاصة لـ CompositionLocalProviders لتجنُّب النفقات العامة المستخدمة لجعل تقديم قيم متعددة أسرع، ولكن مع ارتفاع أعباء العمل عند تقديم قيمة واحدة. (I6d640، b/288169379)

إصلاح الأخطاء

  • إصلاح تسرّب الذاكرة في جدول الخانة (73fcfe)
  • إصلاح طريقة استعادة rememberSaveable عندما يعرض stateSaver قيمة فارغة (90748c)

الإصدار 1.6.0-alpha01

‫21 حزيران (يونيو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.6.0-alpha01. يحتوي الإصدار 1.6.0-alpha01 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • تخطي إعادة تركيب التركيبات الفرعية التي ستتم إزالتها. (Ieeb99، b/254645321)
  • تم تقليل عمليات التخصيص عند تطبيق اللقطات. (I65c09)
  • تجنَّب احتساب readableHash في DerivedState في حال عدم تعديل النبذة (68c565).

الإصدار 1.5

الإصدار 1.5.4

18 تشرين الأول (أكتوبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.4. يحتوي الإصدار 1.5.4 على عمليات الالتزام هذه.

الإصدار 1.5.3

‫4 أكتوبر 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.3. يحتوي الإصدار 1.5.3 على هذه الالتزامات.

الإصدار 1.5.2

27 أيلول (سبتمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.2. يحتوي الإصدار 1.5.2 على عمليات الالتزام هذه.

الإصدار 1.5.1

6 أيلول (سبتمبر) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.1. يحتوي الإصدار 1.5.1 على عمليات الالتزام هذه.

الإصدار 1.5.0

9 آب (أغسطس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0. يحتوي الإصدار 1.5.0 على عمليات الالتزام هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة عمليات التخصيص في إعادة التركيب، والصور المتحركة للألوان، وAndroidComposeView. (Ib2bfa)
  • تمت إضافة تعليق توضيحي @StateFactoryMarker لوضع علامة على الدوال التي تنشئ حالات ويجب أن يتم تضمينها في طلب remember. (I64550)
  • إضافة الإصدارات الأساسية من الحالة وMutableState (fb3d89)
  • تمت إضافة Snapshot.isApplyObserverNotificationPending (I672a5)
  • تمت إضافة إصدارات أساسية من واجهة برمجة التطبيقات State، ما يسمح بتتبُّع قيم Int وlong وFloat ومزدوجة في عناصر State بدون تحمُّل عقوبات بسبب وضع الصناديق التلقائية. يُرجى استخدام طرق المصنع الجديدة mutableIntState(Int) وmutableFloatStateOf(Float) وما إلى ذلك لاستخدام هذه الطرق. (I48e43)

إصلاح الأخطاء

  • تخطي إعادة تركيب التركيبات الفرعية التي ستتم إزالتها. (Ieeb99، b/254645321)
  • عدم الاحتفاظ بمرجع اللقطة في ComposerImpl (0206f7)
  • عدم تطبيق المقطوعة الموسيقية مرّتين (f5791b)
  • التأكّد من إبطال قيم الحالة المشتقّة التي لم يتم إعدادها (aa2a92)
  • يمكنك طلب onEndChanges أثناء التخلص من المقطوعة الموسيقية. (62cc8c)
  • إصلاح عملية نقل المحتوى إلى تركيب فرعي (4beb41)
  • إصلاح حالات التوقف المؤقت المحتملة (c1a425 و8edce0)
  • ستحظر الآن أداة إعادة الإنشاء التي تم إنشاؤها لنافذة Android المكالمات الواردة إلى withFrameNanos فقط بدلاً من حظر جميع المقطوعات الموسيقية عند تلقّي إشعار ON_STOP. ويعني هذا أنّ النوافذ المرتبطة بالأنشطة التي تم إيقافها ستستمر في إعادة إنشائها بهدف إجراء تغييرات البيانات، ولكن سيتم حظر الصور المتحركة أو أي متصل آخر بـ "withFrameNanos". (Id9e7f، b/240975572)
  • تنفيذ استدعاءات إلغاء التفعيل للحساب LayoutNode قبل التخلص من التأثيرات 3784073
  • إصلاح العلامات التي تم تغييرها لملف lambdas الذي تمت إعادة تشغيله ea81df9
  • إصلاح تراجع التعديل المباشر للوضع القابل للتعديل في العُقد 73fd4d8
  • يجب أن توقف تشغيل ON_STOP مؤقتًا عمليات بث ساعة الإطار بدلاً من التركيبة ae276f1.
  • إلغاء صلاحية نطاقات SnapshotStateObserver للحالات المُشتقة غير المتغيّرة 84d9b1c
  • أصلح توقف القفل المحتمل عند التخلص من المقطوعات الموسيقية 28761fc
  • إصلاح عملية نقل المحتوى إلى تركيبة فرعية 92d4156
  • إصلاح العلامات التي تم تغييرها لتطبيقات lambda التي تمت إعادة تشغيلها (8a03e9)
  • تنفيذ استدعاءات إلغاء التفعيل للحساب LayoutNode قبل التخلص من التأثيرات (8b0fa4)
  • يجب حلّ المشكلة endToMarker() عند إنهاء مجموعات العُقد. (d71d980)
  • استخدام مجموعة SlotWriter الحالية للتحقّق من الإيقاف (a0b518b)
  • إزالة fill في SlotTable.moveSlotGapTo() ونقله لإغلاقه (81f9935)
  • إصلاح حالات إلغاء الصلاحية المفقودة أثناء نقل المحتوى القابل للنقل (1d7c024)
  • إصلاح عمليات الإلغاء الفورية للمحتوى القابل للنقل (8676618)

تحسينات الأداء

  • تجنَّب احتساب readableHash في DerivedState إذا لم يتم تعديل النبذة. (307102)
  • تخصيصات أقلّ (I65c09 وd7ea77 و727974 و445808)
  • إلغاء سريع لعملية الإنشاء CoroutineScopes (a55362 وbd382f)
  • استبدال سجلات كائنات الحالة التي تتضمن سجلات حالة يتعذّر الوصول إليها (c986960)
  • استخدِم مؤلّف النطاق الصحيح عند إنشاء المجموعات (9a5e5b6).
  • استخدام IdentityArraySet لتخزين عمليات إلغاء صلاحية اللقطات (7f60cca)
  • تقليل عمليات التخصيص للملاحظات الموجزة (5bc535f)

الإصدار 1.5.0-rc01

26 تموز (يوليو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-rc01. يحتوي الإصدار 1.5.0-rc01 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • تأجيل إعادة قراءة الحالات الناتجة حتى يتم تسجيل التغييرات (f38099)

  • يتوفّر فحص اختياري للتوصية بنقل بيانات "mutableStateOf()" إلى الأنواع المتخصّصة المناسبة لها لإجراءات الإجراءات الأولية. معرّف الوبر هو AutoboxingStateCreation. في السابق، تم تفعيل هذا الفحص تلقائيًا لجميع المشاريع. للاطّلاع على هذا التحذير في محرِّر "استوديو Android" ونتجات أداة Lint الخاصة بمشروعك، عليك تغيير درجة الخطورة من "معلومات" إلى تحذير (أو مستوى أعلى) من خلال تضمين warning "AutoboxingStateCreation" ضمن إعداد Builder.gradle أوbuild.gradle.kts على النحو الموضّح (I34f7e):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

الإصدار 1.5.0-beta03

28 حزيران (يونيو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta03. يحتوي الإصدار 1.5.0-beta03 على هذه الالتزامات.

إصلاح الأخطاء

  • تخطي إعادة تركيب التركيبات الفرعية التي ستتم إزالتها. (Ieeb99، b/254645321)

الإصدار 1.5.0-beta02

7 حزيران (يونيو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta02. يحتوي الإصدار 1.5.0-beta02 على عمليات التنفيذ هذه.

تحسينات الأداء

  • تجنَّب احتساب readableHash في DerivedState إذا لم يتم تعديل النبذة. (307102)

الإصدار 1.5.0-beta01

24 أيار (مايو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-beta01. يحتوي الإصدار 1.5.0-beta01 على هذه الالتزامات.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة التخصيصات في إعادة التركيب، والصور المتحركة بالألوان، وAndroidComposeView (Ib2bfa)
  • تمت إضافة تعليق توضيحي @StateFactoryMarker لوضع علامة على الدوال التي تنشئ حالات ويجب أن يتم تضمينها في طلب remember. (I64550)
  • إضافة الإصدارات الأساسية من الحالة وMutableState (fb3d89)
  • تمت إضافة Snapshot.isApplyObserverNotificationPending (I672a5)

إصلاح الأخطاء

  • تخصيصات أقلّ (I65c09 وd7ea77 و727974 و445808)
  • عدم الاحتفاظ بمرجع اللقطة في ComposerImpl (0206f7)
  • إلغاء سريع لعملية الإنشاء CoroutineScopes (a55362 وbd382f)
  • عدم تطبيق المقطوعة الموسيقية مرّتين (f5791b)
  • التأكّد من إبطال قيم الحالة المشتقّة التي لم يتم إعدادها (aa2a92)
  • يمكنك طلب onEndChanges أثناء التخلص من المقطوعة الموسيقية. (62cc8c)
  • إصلاح عملية نقل المحتوى إلى تركيب فرعي (4beb41)
  • إصلاح حالات التوقف المؤقت المحتملة (c1a425
  • يجب أن توقف ميزة ON_STOP عمليات بث ساعة الإطار مؤقتًا بدلاً من تركيبها (f4a2d1).
  • إصلاح العلامات التي تم تغييرها لتطبيقات lambda التي تمت إعادة تشغيلها (8a03e9)
  • تنفيذ استدعاءات إلغاء التفعيل للحساب LayoutNode قبل التخلص من التأثيرات (8b0fa4)

مساهمة خارجية

  • تمت إضافة Snapshot.isApplyObserverNotificationPending (I672a5)

الإصدار 1.5.0-alpha04

10 أيار (مايو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha04. يحتوي الإصدار 1.5.0-alpha04 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة إصدارات أساسية من واجهة برمجة التطبيقات State، ما يسمح بتتبُّع قيم Int وlong وFloat ومزدوجة في عناصر State بدون تحمُّل عقوبات بسبب وضع الصناديق التلقائية. يُرجى استخدام طرق المصنع الجديدة mutableIntState(Int) وmutableFloatStateOf(Float) وما إلى ذلك لاستخدام هذه الطرق. (I48e43)

إصلاح الأخطاء

  • يمكنك طلب onEndChanges أثناء التخلص من المقطوعة الموسيقية. يتم الاشتراك في عُقد التركيز التي تمت إزالتها خلال Composition.dispose في onEndChanges لإعادة ضبط التركيز.(03d4a47)

  • تأكَّد من إبطال قيم الحالة المشتقّة التي لم يتم إعدادها. ترتبط كل حالة مشتقة بقائمة من العناصر التابعة لها في SnapshotStateObserver، ويتم استخدامها لإيقاف النطاقات المرتبطة بالحالة المستمدة عند تغيير التبعية. يتم تسجيل تغيير الاعتمادية عند تقدم اللقطة، ويمكن أن يحدث ذلك بعد قراءة الحالة المستمدة (بسبب طلب Snapshot.notifyObjectsInitialized()).

    كان منطق ملاحظة الحالة المشتق السابق في SnapshotStateObserver هو تنظيف التبعيات القديمة، ثم قراءة القيمة الجديدة. أدّى ذلك إلى حدوث حالة سباق مع حالة عدم صلاحية، لم يتم تسجيل إلغاء التبعية.

    يؤدي هذا التغيير إلى إعادة ترتيب البيانات التي تم استخراجها من البيانات التي تم الاطّلاع عليها وإزالة التبعية، ما يضمن تنفيذ عملية الإيقاف دائمًا في حالة صالحة. (c472be6)

الإصدار 1.5.0-alpha03

19 نيسان (أبريل) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha03. يحتوي الإصدار 1.5.0-alpha03 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • ستحظر الآن أداة إعادة الإنشاء التي تم إنشاؤها لنافذة Android المكالمات الواردة إلى withFrameNanos فقط بدلاً من حظر جميع المقطوعات الموسيقية عند تلقّي إشعار ON_STOP. ويعني هذا أنّ النوافذ المرتبطة بالأنشطة التي تم إيقافها ستستمر في إعادة إنشائها بهدف إجراء تغييرات البيانات، ولكن سيتم حظر الصور المتحركة أو أي متصل آخر بـ "withFrameNanos". (Id9e7f، b/240975572)

إصلاح الأخطاء

  • إصلاح التوقف المؤقت المحتمل في قائمة اللقطات والخريطة 5c1a425
  • تنفيذ استدعاءات إلغاء التفعيل للحساب LayoutNode قبل التخلص من التأثيرات 3784073
  • إصلاح العلامات التي تم تغييرها لملف lambdas الذي تمت إعادة تشغيله ea81df9
  • إصلاح تراجع التعديل المباشر للوضع القابل للتعديل في العُقد 73fd4d8
  • يجب أن توقف تشغيل ON_STOP مؤقتًا عمليات بث ساعة الإطار بدلاً من التركيبة ae276f1.
  • إلغاء صلاحية نطاقات SnapshotStateObserver للحالات المُشتقة غير المتغيّرة 84d9b1c
  • أصلح توقف القفل المحتمل عند التخلص من المقطوعات الموسيقية 28761fc
  • إصلاح عملية نقل المحتوى إلى تركيبة فرعية 92d4156

الإصدار 1.5.0-alpha02

5 نيسان (أبريل) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha02. يحتوي الإصدار 1.5.0-alpha02 على هذه عمليات التنفيذ.

الميزات الجديدة

  • أصبح عامل التشغيل getValue في Kotlin قابلاً الآن للإنشاء (f174f6e).

إصلاح الأخطاء وتحسينات في الأداء

  • استبدال سجلات كائنات الحالة التي تتضمن سجلات حالة يتعذّر الوصول إليها (c986960)
  • استخدِم مؤلّف النطاق الصحيح عند إنشاء المجموعات (9a5e5b6).
  • يجب حلّ المشكلة endToMarker() عند إنهاء مجموعات العُقد. (d71d980)
  • استخدام مجموعة SlotWriter الحالية للتحقّق من الإيقاف (a0b518b)
  • استخدام IdentityArraySet لتخزين عمليات إلغاء صلاحية اللقطات (7f60cca)
  • إزالة fill في SlotTable.moveSlotGapTo() ونقله لإغلاقه (81f9935)
  • إصلاح حالات إلغاء الصلاحية المفقودة أثناء نقل المحتوى القابل للنقل (1d7c024)
  • إصلاح عمليات الإلغاء الفورية للمحتوى القابل للنقل (8676618)
  • تقليل عمليات التخصيص للملاحظات الموجزة (5bc535f)

الإصدار 1.5.0-alpha01

22 آذار (مارس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.5.0-alpha01. يحتوي الإصدار 1.5.0-alpha01 على هذه عمليات التنفيذ.

الميزات الجديدة

  • إضافة Modifier.Node#coroutineScope للسماح لـ Modifier.Nodes بإطلاق الكوروتينات (I76ef9)
  • السماح لـ Modifier.Nodes بقراءة CompositionLocals من خلال تنفيذ واجهة CompositionLocalConsumerModifierNode. (Ib44df)

الإصدار 1.4

الإصدار 1.4.3

3 أيار (مايو) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.3 بدون أي تغييرات.

الإصدار 1.4.2

19 نيسان (أبريل) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.2. يحتوي الإصدار 1.4.2 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • إصلاح التوقف المؤقت المحتمل في قائمة اللقطات والخريطة 2eb6570

  • قد تؤدي إضافة محتوى إلى SnapshotStateList أو SnapshotStateMap إلى توقف تام إذا كان التعديل متزامنًا مع عملية كتابة مباشرة في سجلّ الحالة. ازداد احتمال مواجهة هذه المشكلة بشكل كبير مع التغييرات التي أجراها 93fcae828b التي تستخدم عمليات الكتابة المباشرة لإصدار السجلّات غير المستخدَمة.

  • يتم ترتيب الأقفال الآن بحيث لا تتم محاولة الوصول إلى قفل لقطة الشاشة أبدًا عند الضغط باستمرار على قفل خريطة أو قائمة.

الإصدار 1.4.1

5 نيسان (أبريل) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.1. يحتوي الإصدار 1.4.1 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • إصلاح endToMarker() عند إنهاء مجموعات العُقد. d71d980

الإصدار 1.4.0

22 آذار (مارس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.0. يحتوي الإصدار 1.4.0 على عمليات الالتزام هذه.

تغييرات مهمة منذ الإصدار 1.3.0

  • استخدِم القيمة التي تم إعدادها من LiveData لأول مقطوعة موسيقية 3680e25.
  • أضِف ComposeNodeLifecycleCallback لمراقبة دورة حياة عُقد الإنشاء. 8b6a258
  • إضافة السمة parameterTypes إلى ComposableMethod 7b6c7ad

إصلاح الأخطاء وتحسينات في الأداء

  • محو كلا فهرسَي النطاق في SnapshotStateObserver 29f4a3e
  • إضافة المجموعات المطلوبة في نص lambdas غير القابلة للتخطي 7d06752
  • تحسين الخصائص المرجعية للذاكرة لحالة اللقطة 93fcae8
  • إزالة الملاكمة في عمليات البحث المحلية عن المقطوعات الموسيقية 0875717
  • استخدِم المفتاح الصحيح لمجموعات العُقد غير القابلة لإعادة الاستخدام 6388d8d.
  • حماية SnapshotStateObserver من التطبيقات التكرارية والمتزامنة 98cb6ba
  • تمت إضافة عملية تحقُّق لحدود الفهرس في طريقة IdentityArraySet "get" 35a77d3.
  • تحديث وحدة الإنشاء لاستخدام إضافات ViewTreeLifecycleOwner 21c2122
  • يمكنك إرسال إشعارات التطبيق بعد انتهاء أداة إعادة إنشاء الإطار. 98f2641
  • إصلاح عطل الفهرس خارج الحدود عند إلغاء أداة إعادة الإنشاء 8f8656f
  • فرض إعادة الإنشاء دائمًا في حال تغيير الموفّرين الرئيسيين للمقطوعة الموسيقية 9526fcc
  • تقبُّل أداة إعادة الإنشاء للوظائف الملغاة a55f7ed
  • تحسين معالجة عمليات إلغاء الإلغاء لعدد كبير من المؤلفين 9b7ed67
  • حلّ مشكلة إنشاء مجموعات الإغلاق للمرتجعات غير المحلية b6f590c

الإصدار 1.4.0-rc01

8 آذار (مارس) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.0-rc01. يحتوي الإصدار 1.4.0-rc01 على هذه عمليات التنفيذ.

إصلاح الأخطاء

الإصدار 1.4.0-beta02

22 شباط (فبراير) 2023

تم طرح androidx.compose.runtime:runtime:1.4.0-beta02 وandroidx.compose.runtime:runtime-saveable:1.4.0-beta02. يحتوي الإصدار 1.4.0-beta02 على عمليات التنفيذ هذه.

الإصدار 1.4.0-beta01

8 شباط (فبراير) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.0-beta01. يحتوي الإصدار 1.4.0-beta01 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة ComposeNodeLifecycleCallback مما يسمح بمراقبة دورة حياة عُقد Compose (I3731b)
  • تمت إضافة @TestOnly إلى Composer.disableSourceInformation() لأنّ هذه الدالة آمنة فقط للاستدعاء في اختبار. (I896c8)

إصلاح الأخطاء

  • إزالة الملاكمة في عمليات البحث المحلية عن المقطوعات الموسيقية (62f66a)
  • تحسين الخصائص المرجعية للذاكرة لحالة اللقطة (dfb451)

الإصدار 1.4.0-alpha05

25 كانون الثاني (يناير) 2023

تم طرح androidx.compose.runtime:runtime:1.4.0-alpha05 وandroidx.compose.runtime:runtime-saveable:1.4.0-alpha05. يحتوي الإصدار 1.4.0-alpha05 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • المزيد من أنواع/قابلية القيم الفارغة للدوال المضمَّنة/المخفية نهائيًا (I24f91)

الإصدار 1.4.0-alpha04

11 كانون الثاني (يناير) 2023

تم طرح androidx.compose.runtime:runtime-*:1.4.0-alpha04. يحتوي الإصدار 1.4.0-alpha04 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • يستخدم TestMonotonicFrameClock الآن التعليق التوضيحي التجريبي الصحيح. (I95c9e)

إصلاح الأخطاء

  • حماية SnapshotStateObserver من عمليات التنفيذ المتكرّرة والمتزامنة (d902fb)

الإصدار 1.4.0-alpha03

7 كانون الأول (ديسمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.4.0-alpha03. يحتوي الإصدار 1.4.0-alpha03 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • إضافة طريقة علنية جديدة إلى فئة ComposableMethod مشابهة لـ java.lang.reflect.Method#getParameterTypes() (Iab0c3)

إصلاح الأخطاء

  • يتم الآن إرسال إشعارات تطبيق اللقطة بعد انتهاء Recomposer من تطبيق التغييرات. (Iad6c0، b/222093277)

الإصدار 1.4.0-alpha02

9 تشرين الثاني (نوفمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.4.0-alpha02. يحتوي الإصدار 1.4.0-alpha02 على هذه عمليات التنفيذ.

الإصدار 1.4.0-alpha01

24 تشرين الأول (أكتوبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.4.0-alpha01. يحتوي الإصدار 1.4.0-alpha01 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمّ تنفيذ SnapshotStateList وSnapshotStateMap الآن بشكلٍ صريح على النحو التالي: toList() وtoMap()، مع الالتزام بالقواعد. تعرض هذه الطرق المحتوى الحالي بدون إنشاء نسخة بينما تعرض البيانات الداخلية غير القابلة للتغيير المستخدمة لتخزين المحتوى. يمكن استخدام هذه القيمة، على سبيل المثال، لإنشاء تدفق من القيم باستخدام snapshotFlow بدون الحاجة إلى نسخ البيانات. (Ica2bd)

الإصدار 1.3

الإصدار 1.3.3

11 كانون الثاني (يناير) 2023

تم طرح androidx.compose.runtime:runtime-*:1.3.3. يحتوي الإصدار 1.3.3 على هذه الالتزامات.

  • ما مِن تغييرات منذ 1.3.2

الإصدار 1.3.2

7 كانون الأول (ديسمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.2. يحتوي الإصدار 1.3.2 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • تم التحديث لإتاحة الإصدار androidx.compose.ui 1.3.2

الإصدار 1.3.1

9 تشرين الثاني (نوفمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.1. يحتوي الإصدار 1.3.1 على عمليات الالتزام هذه.

الإصدار 1.3.0

24 تشرين الأول (أكتوبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0. يحتوي الإصدار 1.3.0 على هذه عمليات التنفيذ.

تغييرات مهمة منذ الإصدار 1.2.0

التعامل مع الاستثناء / دعم التعديل المباشر

تتبُّع المقطوعات الموسيقية

واجهات برمجة تطبيقات الانعكاس القابل للتعديل

إصلاحات وقت التشغيل

نظام اللقطات

الإصدار 1.3.0-rc01

5 تشرين الأول (أكتوبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-rc01. يحتوي الإصدار 1.3.0-rc01 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • ArrayIndexOutOfBoundsException ثابت صادر من جدول الخانة (b/249076084)

الإصدار 1.3.0-beta03

21 أيلول (سبتمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-beta03. يحتوي الإصدار 1.3.0-beta03 على هذه الالتزامات.

تغيير يخالف السلوك

  • المعلمة إلى remember وrememberCoroutineScope حيث تم تغييرها إلى crossinline. سيؤدي ذلك إلى الإبلاغ عن خطأ في عمليات الإرجاع المبكر بدلاً من السماح بالإرجاع المبكر، ما سيؤدي إلى الإبلاغ عن خطأ داخلي لاحق.
  • من المحتمل أن يؤدي هذا التغيير إلى الإبلاغ عن أخطاء جديدة في برنامج التجميع تتطلّب إزالة عمليات الإرجاع غير المحلية من دالة lambdas التي يتم تمريرها إلى هذه الدوال. (Ibea62)

الإصدار 1.3.0-beta02

7 أيلول (سبتمبر) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-beta02. يحتوي الإصدار 1.3.0-beta02 على عمليات التنفيذ هذه.

إصلاح الأخطاء

  • واجهة برمجة التطبيقات المعدّلة (I64ca0)

الإصدار 1.3.0-beta01

24 آب (أغسطس) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-beta01. يحتوي الإصدار 1.3.0-beta01 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة طريقة find إلى CompositionData للسماح لأدوات المطوّرين التي تستخدم واجهة برمجة التطبيقات هذه بالعثور بسرعة على مجموعة فرعية للمقطوعة الموسيقية باستخدام هويتها. (I5794f)

الإصدار 1.3.0-alpha03

10 آب (أغسطس) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-alpha03. يحتوي الإصدار 1.3.0-alpha03 على هذه عمليات التنفيذ.

الإصدار 1.3.0-alpha02

27 تموز (يوليو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-alpha02. يحتوي الإصدار 1.3.0-alpha02 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إعادة إضافة ComposerKt.traceEventStart(Int, String) للتوافق مع الأنظمة القديمة (I6e6de)

الإصدار 1.3.0-alpha01

29 حزيران (يونيو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.3.0-alpha01. يحتوي الإصدار 1.3.0-alpha01 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • نقل وظيفة الأداة إلى بيئة التشغيل (I4f729)

الإصدار 1.2

الإصدار 1.2.1

10 آب (أغسطس) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.1. يحتوي الإصدار 1.2.1 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • إصلاح تسرّب الذاكرة: التخلص من اللقطات المتداخلة التي تم إنشاؤها من لقطات شفافة b/239603305

الإصدار 1.2.0

27 تموز (يوليو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0. يحتوي الإصدار 1.2.0 على عمليات الالتزام هذه.

تغييرات مهمة منذ 1.1.0

  • كان هناك العديد من الميزات التي تم تقديمها في الإصدار 1.2.0 من خلال ComposeAllowed، بالإضافة إلى العديد من عمليات إصلاح الأخطاء التي أدت إلى إصلاح الأخطاء. كانت أهم ميزة جديدة هي مقدمة عن movableContentOfواجهة برمجة التطبيقات التي يمكن استخدامها لتفعيل تجربة المستخدم المعقّدة، مثل انتقالات العناصر المشتركة. تحوِّل واجهة برمجة التطبيقات movableContentOf دالة lambda قابلة للإنشاء إلى دالة lambda التي تنقل حالتها والعُقد المقابلة إلى أي مكان جديد يتم استدعاؤها. عندما يترك الاستدعاء السابق التكوين، يتم الاحتفاظ بالحالة مؤقتًا، وإذا دخل استدعاء جديد إلى lambda في التكوين، يتم نقل الحالة والعُقد المرتبطة بها إلى موقع الاستدعاء الجديد. في حال عدم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا وتذكُّر أنّه يتم إشعار المراقبين.

  • إذا تم استدعاء دالة movableContentOf lambda عدة مرات في المقطوعة الموسيقية نفسها، يتم إنشاء حالة وعُقد جديدة لكل استدعاء، وعندما تغادر المكالمات المقطوعة وتدخل المكالمات الجديدة، يتم نقل الحالة من استدعاءات الخروج الأولى إلى استدعاءات الدخول بالترتيب الذي يتم استدعاؤها. تتم نهائيًا إزالة جميع الولايات التي لم تتم المطالبة بملكيتها في المكالمات الجديدة.

  • بالإضافة إلى هذه الميزات وبعض الميزات الجديدة الأخرى، تم قضاء الكثير من الوقت في تثبيت بيئة التشغيل ونظام حالة اللقطة. تمت إزالة العديد من تسريب الذاكرة وتحسين مسارات الرموز البرمجية.

  • يمكنك الاطّلاع على قائمة موجزة بالتغييرات في ما يلي:

الميزات الجديدة في 1.2

الأداء في 1.2

إصلاح الأخطاء في 1.2

الإصدار 1.2.0-rc03

29 حزيران (يونيو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-rc03. يحتوي الإصدار 1.2.0-rc03 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • كانت ملاحظات الحالة المشتقة في السابق تمت إزالتها بلا شروط من النطاق والتكوين معًا، مما أدى إلى تعطيل النطاقات الأخرى التي ربما لا تزال تراقب الحالة الناتجة. يؤدي هذا التغيير إلى إزالة مثيلات الحالة المستمدة فقط إذا لم تعد ملاحظتها في نطاقات أخرى. (b/236618362)

الإصدار 1.2.0-rc02

22 حزيران (يونيو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-rc02. يحتوي الإصدار 1.2.0-rc02 على هذه عمليات التنفيذ.

الإصدار 1.2.0-rc01

15 حزيران (يونيو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-rc01. يحتوي الإصدار 1.2.0-rc01 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • يتم الآن إنشاء الواجهات في مكتبات الإنشاء باستخدام طرق الواجهة التلقائية jdk8 (I5bcf1).

الإصدار 1.2.0-beta03

1 حزيران (يونيو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-beta03. يحتوي الإصدار 1.2.0-beta03 على هذه الالتزامات.

الإصدار 1.2.0-beta02

18 أيار (مايو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-beta02. يحتوي الإصدار 1.2.0-beta02 على عمليات التنفيذ هذه.

الإصدار 1.2.0-beta01

11 أيار (مايو) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-beta01. يحتوي الإصدار 1.2.0-beta01 على عمليات التنفيذ هذه.

الميزات الجديدة

  • هذا هو أول إصدار تجريبي من 1.2!

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة Snapshot.unsafeEnter/unsafeLeave التجريبي (I108f3)
  • تمت إضافة واجهة برمجة تطبيقات Snapshot.asContextElement() التجريبية (Iff072).
  • يمكن الآن استخدام تعليقات @ComposableTarget التوضيحية والتعليقات التوضيحية التي تم وضع علامة @ComposableTargetMarker عليها على نطاق الملف باستخدام البادئة @file. سيؤدي استخدام تعليق توضيحي هدف على نطاق الملف إلى أن يفترض برنامج التحويل البرمجي أن جميع الدوال القابلة للإنشاء في الملف تهدف إلى استهداف تطبيق التطبيق المرتبط. على سبيل المثال، يشير استخدام @file:UiComposable إلى أنّ جميع دوال @Composable تستهدف تطبيق واجهة Compose. إنّ الدالة التي تحتاج إلى استهداف تطبيق آخر يجب أن توفّر بشكل صريح التعليق التوضيحي للعلامة المستهدفة للتطبيق المطلوب. (I40804)

الإصدار 1.2.0-alpha08

20 نيسان (أبريل) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha08. يحتوي الإصدار 1.2.0-alpha08 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة TracingInProgress إلى واجهة CompositionTracer. (Ic6f12)
  • إضافة recomposeScopeIdentity إلى Composer (I0c873)
  • تم تقييد واجهات برمجة التطبيقات للتتبّع (Composer.setTracer) على OptIn(InternalComposeTracingApi). (I9187f)
  • تمت إضافة ResuableContentHost، ما يتيح التحكّم بشكل أفضل في تاريخ إنشاء المحتوى القابل لإعادة الاستخدام. على سبيل المثال، إذا لم يكن أحد التركيبات الفرعية مُستخدَمًا بشكل مؤقت، يمكن أن يتم إيقاف المحتوى، ما يؤدي إلى حذف كل الحالة التي يتم تذكرها في المقطوعة الموسيقية، ما يؤدي إلى حذف جميع التأثيرات القابلة لإعادة الاستخدام مثلاً. (I2c0f2، b/220322704)

الإصدار 1.2.0-alpha07

6 نيسان (أبريل) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha07. يحتوي الإصدار 1.2.0-alpha07 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة الدالة الجديدة Snapshot.withoutReadObservation { ... }. تتيح هذه السياسة للمستخدمين تشغيل دالة lambda التي تم تمريرها بدون الاشتراك في تغييرات قيم الحالة التي تتم قراءتها أثناء هذا الحظر. قد تجدها مفيدة في حالات الاستخدام عندما تريد الاستفادة من الكتابة أو القراءة الآمنة لسلسلة المحادثات المستنِدة إلى اللقطة، ولكنك تريد التمكّن من قراءة القيمة بدون الحاجة إلى إعادة ابتكار أو إعادة قياس غير ضرورية. (I9f365، b/214054486)

الإصدار 1.2.0-alpha06

23 آذار (مارس) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha06. يحتوي الإصدار 1.2.0-alpha06 على هذه عمليات التنفيذ.

الإصدار 1.2.0-alpha05

9 آذار (مارس) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha05. يحتوي الإصدار 1.2.0-alpha05 على هذه عمليات التنفيذ.

مساهمة خارجية

  • تم التحديث لاستخدام الكوروتينات في Kotlinx 1.6.0 (I3366d).

الإصدار 1.2.0-alpha04

23 شباط (فبراير) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha04. يحتوي الإصدار 1.2.0-alpha04 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة ComposableTarget وComposableTargetMarker وComposableOpenTarget تتيح إعداد تقارير وقت التجميع التي يتم فيها استدعاء دالة قابلة للإنشاء تستهدف تطبيقًا لم يتم تصميمه لاستخدامه.

    في معظم الحالات، يمكن استنتاج التعليقات التوضيحية بواسطة المكوّن الإضافي لإنشاء الرسائل، لذا من المفترض أن يكون استخدام هذه التعليقات التوضيحية مباشرةً نادر الحدوث . تشمل الحالات التي لا يمكن استنتاجها إنشاء واستخدام تطبيق مخصّص ودوال مجردة قابلة للإنشاء (مثل طرق الواجهة) أو حقول أو متغيّرات عمومية يمكن استنتاجها (يتم استنتاج المتغيّرات والمعلَمات المحلية) أو عند استخدام ComposeNode أو دوال ذات صلة قابلة للإنشاء.

    بالنسبة إلى التطبيقات المخصّصة، يجب إضافة الدوال القابلة للإنشاء التي تستدعي ComposeNode أو ReusableComposeNode إضافة CompoableTarget تعليق توضيحي للدالة وأي أنواع قابلة للإنشاء من مَعلمات lambda. ننصحك بإنشاء تعليق توضيحي يتضمّن علامة ComposableTargetMarker، ثم استخدام التعليق التوضيحي الذي تم وضع علامة عليه بدلاً من ComposableTarget مباشرةً. إنّ التعليق التوضيحي القابل للإنشاء والمميّز بعلامة ComposableTargetMarker يعادل السمة ComposbleTarget التي تتضمّن الاسم المؤهّل بالكامل لفئة السمة كمَعلمة applier. للاطّلاع على مثال على استخدام ComposableTargetMarker، راجِع anroidx.compose.ui.UiComposable. (I38f11)

الإصدار 1.2.0-alpha03

9 شباط (فبراير) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha03. يحتوي الإصدار 1.2.0-alpha03 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة movableContentOf التي تحوِّل دالة lambda قابلة للإنشاء إلى دالة lambda التي تنقل حالتها والعُقد المقابلة لها، إلى أي موقع جديد يتم استدعاؤها. عندما يترك الاستدعاء السابق التكوين، يتم الاحتفاظ بالحالة مؤقتًا وإذا دخل طلب جديد إلى لمدا المقطوعة الموسيقية، يتم نقل الدولة والعُقد المرتبطة بها إلى موقع الاستدعاء الجديد. إذا لم تتم إضافة مكالمة جديدة، تتم إزالة الحالة نهائيًا وتذكر أنه يتم إشعار المراقبين.

    إذا تم استدعاء دالة movableContentOf lambda عدة مرات في نفس التركيبة، يتم إنشاء حالة وعُقد جديدة لكل استدعاء، وعندما تغادر المكالمات التكوين وتدخل المكالمات الجديدة، يتم نقل الحالة من استدعاءات الخروج الأولى إلى استدعاءات الدخول بالترتيب الذي يتم استدعاؤها. تتم إزالة جميع الولايات التي لم تتم المطالبة بها من خلال المكالمات الجديدة نهائيًا. (Ib4850)

  • تمت إضافة واجهة برمجة تطبيقات للتتبُّع إلى التركيبة تتيح للأدوات توفير تتبُّع أكثر تفصيلاً للدوال القابلة للإنشاء. ينشئ برنامج التحويل البرمجي الآن طلبات بيانات إلى tracing API تتضمّن معلومات المصدر. (Ib0eb5)

    لإزالة هذه المكالمات ومعلومات المصدر المرتبطة بها من إصدار إصدار، أضِف قاعدة Proguard التالية:

      -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
          boolean isTraceInProgress();
          void traceEventStart(int,java.lang.String);
          void traceEventEnd();
      }
    
  • أضِف InternalComposeScope، ما يتيح للأدوات إمكانية تحديد عنصر قابل للإنشاء أثناء إعادة التركيب. (I07a3f)

الإصدار 1.2.0-alpha02

26 يناير 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha02. يحتوي الإصدار 1.2.0-alpha02 على عمليات التنفيذ هذه.

الإصدار 1.2.0-alpha01

12 كانون الثاني (يناير) 2022

تم طرح androidx.compose.runtime:runtime-*:1.2.0-alpha01. يحتوي الإصدار 1.2.0-alpha01 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة الحقل identity إلى CompositionData لإنشاء معرّفات ثابتة في "أداة فحص التنسيق". (Ic116e)

التحديثات المتعلقة بالاعتمادية

  • تعتمد الآن على لغة 1.6.10 بلغة Kotlin.

الإصدار 1.1

الإصدار 1.1.1

23 شباط (فبراير) 2022

تم طرح androidx.compose.runtime:runtime-*:1.1.1. يحتوي الإصدار 1.1.1 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • إصلاح NullPointerException في androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList (aosp/1947059، b/206677462)
  • إصلاح الأعطال التي يتسبب فيها محتوى الحافظة أثناء القراءة من الحافظة على Android. (I06020، b/197769306)
  • تم إصلاح اليمين من اليسار في LazyVerticalGrid (aosp/1931080، b/207510535)

الإصدار 1.1.0

9 شباط (فبراير) 2022

تم طرح androidx.compose.runtime:runtime-*:1.1.0. يحتوي الإصدار 1.1.0 على هذه عمليات التنفيذ.

تغييرات مهمة منذ الإصدار 1.0.0

  • دعم ثابت لتأثير التمرير الزائد في Android 12
  • تحسينات على حجم مساحة اللمس
  • يُرجى العلم أنّه في ما يتعلّق بـ Compose 1.0، ستعمل مكونات التصميم المتعدد الأبعاد على توسيع مساحة التصميم الخاصة بها لاستيفاء إرشادات تسهيل استخدام المواد من أجل حجم هدف اللمس. على سبيل المثال، سيتم توسيع مساحة اللمس المستهدفة للزر إلى حد أدنى للحجم يبلغ 48x48dp، حتى في حال ضبط حجم الزر ليكون أصغر. يؤدي ذلك إلى مواءمة مادة Compose مع سلوك مكونات التصميم المتعدد الأبعاد نفسه، ما يوفّر سلوكًا ثابتًا إذا مزجت بين طرق العرض و"الإنشاء". ويضمن هذا التغيير أيضًا استيفاء الحدّ الأدنى من متطلبات إمكانية الوصول إلى مساحة اللمس عند إنشاء واجهة المستخدم باستخدام مكوّنات "مواد إنشاء المحتوى".
  • دعم ثابت لـ شريط التنقل
  • ترقية عدد من واجهات برمجة التطبيقات التجريبية سابقًا إلى إصدار مستقر
  • الدعم للإصدارات الأحدث من Kotlin

الإصدار 1.1.0-rc03

26 يناير 2022

تم طرح androidx.compose.runtime:runtime-*:1.1.0-rc03. يحتوي الإصدار 1.1.0-rc03 على هذه عمليات التنفيذ.

إصلاح الأخطاء

  • تم التعديل لدعم مواد Compose 1.1.0-rc03.

الإصدار 1.1.0-rc01

15 كانون الأول (ديسمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-rc01. يحتوي الإصدار 1.1.0-rc01 على هذه عمليات التنفيذ.

الإصدار 1.1.0-beta04

1 كانون الأول (ديسمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta04. يحتوي الإصدار 1.1.0-beta04 على عمليات التنفيذ هذه.

الميزات الجديدة

  • تم التعديل للتوافق مع لغة "1.6.0" بلغة Kotlin.

الإصدار 1.1.0-beta03

17 تشرين الثاني (نوفمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta03. يحتوي الإصدار 1.1.0-beta03 على هذه الالتزامات.

الإصدار 1.1.0-beta02

3 تشرين الثاني (نوفمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta02. يحتوي الإصدار 1.1.0-beta02 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تم تقسيم رمز اللقطة إلى عدة ملفات، ولكن جميعها لا تزال متوفّرة في فئة JVM نفسها. (Ic6c98)

الإصدار 1.1.0-beta01

27 تشرين الأول (أكتوبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-beta01. يحتوي الإصدار 1.1.0-beta01 على عمليات التنفيذ هذه.

الإصدار 1.1.0-alpha06

13 تشرين الأول (أكتوبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha06. يحتوي الإصدار 1.1.0-alpha06 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة InternalCompilerApi من طرق Composer التي يجب تسميتها بالوحدات المشتركة (I1aa0b)
  • تم إيقاف Recomposer.state نهائيًا واستبداله بـ Recomposer.currentState لتغيير نوعه إلى StateFlow (Ic2ab3، وb/197773820).

الإصدار 1.1.0-alpha05

29 أيلول (سبتمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha05. يحتوي الإصدار 1.1.0-alpha05 على هذه عمليات التنفيذ.

الإصدار 1.1.0-alpha04

15 أيلول (سبتمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha04. يحتوي الإصدار 1.1.0-alpha04 على هذه عمليات التنفيذ.

الإصدار 1.1.0-alpha03

1 أيلول (سبتمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha03. يحتوي الإصدار 1.1.0-alpha03 على هذه عمليات التنفيذ.

الميزات الجديدة

  • أصبح محوّل إنشاء الرسائل متوافقًا الآن مع الإصدارات القديمة من "وقت تشغيل Compose" (1.0). قبل إجراء هذا التغيير، كانت "أداة إنشاء النصوص البرمجية" متوافقة فقط مع "وقت تشغيل Compose" للإصدار نفسه أو في إصدار أحدث. بعد هذا التغيير، يصبح Compose Compiler متوافقًا مع إصدار سابق من "وقت تشغيل Compose" (1.0). (aosp/1796968)
  • تم تعديل سياسة ComposeAllowed التي تم تحديثها 1.1.0-alpha03 للاعتماد على لغة 1.5.30 في لغة Kotlin. (I74545)

الإصدار 1.1.0-alpha02

18 آب (أغسطس) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha02. يحتوي الإصدار 1.1.0-alpha02 على عمليات التنفيذ هذه.

الإصدار 1.1.0-alpha01

4 آب (أغسطس) 2021

تم طرح androidx.compose.runtime:runtime-*:1.1.0-alpha01. يحتوي الإصدار 1.1.0-alpha01 على عمليات التنفيذ هذه.

الإصدار 1.0

الإصدار 1.0.5

3 تشرين الثاني (نوفمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.5. يحتوي الإصدار 1.0.5 على عمليات الالتزام هذه.

إصلاح الأخطاء

  • تم إصلاح مثيلات الحالة المستمدة من تتبُّع الأعطال. (aosp/1792247)

الإصدار 1.0.4

13 تشرين الأول (أكتوبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.4. يحتوي الإصدار 1.0.4 على عمليات الالتزام هذه.

التحديثات المتعلقة بالاعتمادية

  • تم التعديل لكي تعتمد على 1.5.31 بلغة Kotlin.

الإصدار 1.0.3

29 أيلول (سبتمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.3. يحتوي الإصدار 1.0.3 على عمليات الالتزام هذه.

التحديثات المتعلقة بالاعتمادية

  • تم التعديل لكي تعتمد على 1.5.30 بلغة Kotlin.

الإصدار 1.0.2

1 أيلول (سبتمبر) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.2. يحتوي الإصدار 1.0.2 على عمليات الالتزام هذه.

تم التعديل لإتاحة إصدار 1.0.2 لميزة Compose. لا تزال ميزة إنشاء 1.0.2 متوافقة مع لغة 1.5.21 بلغة Kotlin.

الإصدار 1.0.1

4 آب (أغسطس) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.1. يحتوي الإصدار 1.0.1 على عمليات الالتزام هذه.

التحديثات المتعلقة بالاعتمادية

  • تم التعديل لكي تعتمد على 1.5.21 بلغة Kotlin.

الإصدار 1.0.0

28 تموز (يوليو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0. يحتوي الإصدار 1.0.0 على عمليات الالتزام هذه.

الميزات الرئيسية للإصدار 1.0.0

هذا هو أول إصدار ثابت من Compose. يُرجى الاطّلاع على مدوّنة إصدارات Compose الرسمية للحصول على مزيد من التفاصيل.

المشاكل المعروفة

  • إذا كنت تستخدم Android Studio Bumblebee Canary 4 أو AGP 7.1.0-alpha04/7.1.0-alpha05، قد يحدث العُطل التالي:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    لحلّ هذه المشكلة، عليك زيادة minSdkVersion مؤقتًا إلى 24 أو أكثر في ملف build.gradle. سيتم إصلاح هذه المشكلة في الإصدار التالي من Android Studio Bumblebee وAGP 7.1. (b/194289155)

الإصدار 1.0.0-rc02

14 يوليو 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-rc02. يحتوي الإصدار 1.0.0-rc02 على هذه عمليات التنفيذ.

  • تم إصلاح حالات السباق في SnapshotStateObserver التي تتسبب في حدوث NullPointerExceptions. (aosp/1763445 وaosp/1758105 وb/192677711)
  • تم إصلاح المشاكل في لقطات بيئة التشغيل التي تسبّبت في حدوث أعطال في java.lang.IllegalStateException: Reading a state that was created after the snapshot was taken or in a snapshot that has not yet been applied. (b/193006595، b/192570897)

الإصدار 1.0.0-rc01

1 تموز (يوليو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-rc01. يحتوي الإصدار 1.0.0-rc01 على هذه عمليات التنفيذ.

الإصدار 1.0.0-beta09

16 حزيران (يونيو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta09. يحتوي الإصدار 1.0.0-beta09 على هذه الالتزامات.

قواعد الملف الشخصي المضافة

يضيف هذا الإصدار قواعد الملف الشخصي إلى وحدات الإنشاء التالية (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • .androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime.
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • .androidx.compose.ui.util

ما هي قواعد الملف الشخصي؟

  • تم تحديد قواعد الملف الشخصي لمكتبة في ملف نصي baseline-prof.txt في src/main أو في دليل مكافئ. يحدد الملف قاعدة في كل سطر، حيث تكون القاعدة في هذه الحالة نمطًا للمطابقة مع الطرق أو الفئات في المكتبة. تعتبر بنية هذه القواعد جزءًا رئيسيًا من تنسيق الملف الشخصي ART الذي يمكن للمستخدمين قراءته، والذي يتم استخدامه عند استخدام adb shell profman --dump-classes-and-methods .... تتخذ هذه القواعد أحد الشكلين لاستهداف الطرق أو الفئات.

  • سيكون لقاعدة الطريقة النمط التالي:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • وسيكون لقاعدة الفئة النمط التالي:

    <CLASS_DESCRIPTOR>
    
  • تتضمّن <FLAGS> حرفًا واحدًا أو أكثر من الرموز H وS وP للإشارة إلى ما إذا كان يجب وضع علامة على هذه الطريقة على أنّها "سريعة" أو "بدء تشغيل" أو "ما بعد بدء التشغيل".

  • تمثّل السمة <CLASS_DESCRIPTOR> وصفًا للفئة التي تنتمي إليها الطريقة المستهدَفة. على سبيل المثال، يجب أن يكون للفئة androidx.compose.runtime.SlotTable واصف للقيمة Landroidx/compose/runtime/SlotTable;.

  • تمثّل السمة <METHOD_SIGNATURE> توقيع الطريقة وتتضمّن الاسم وأنواع المَعلمات وأنواع النتائج التي تتضمنها الطريقة. على سبيل المثال، تحتوي الطريقة fun isPlaced(): Boolean في LayoutNode على التوقيع isPlaced()Z.

  • يمكن أن تشتمل هذه الأنماط على أحرف بدل (** و* و?) لكي تشتمل قاعدة واحدة على طرق أو فئات متعددة.

ما هي وظيفة القواعد؟

  • تشير الطريقة ذات العلامة H إلى أن هذه الطريقة هي طريقة "سريعة"، ويجب تجميعها مسبقًا.

  • تشير الطريقة التي تحمل العلامة S إلى أنّها طريقة يتم استدعاؤها عند بدء التشغيل، ويجب تجميعها مسبقًا لتجنُّب تكلفة التجميع وتفسير الطريقة في وقت بدء التشغيل.

  • تشير الطريقة التي تحمل العلامة P إلى أنّ هذه الطريقة يتم طلبها بعد بدء التشغيل.

  • تشير الفئة المتوفّرة في هذا الملف إلى أنّه يتم استخدامها أثناء بدء التشغيل ويجب تخصيصها مسبقًا في الذاكرة لتجنُّب تحمُّل تكلفة تحميل الفئة.

آلية العمل

  • يمكن للمكتبات تحديد هذه القواعد التي سيتم جمعها في عناصر AAR. عند إنشاء تطبيق يتضمن هذه العناصر، يتم دمج هذه القواعد معًا ويتم استخدام القواعد المدمجة لإنشاء ملف شخصي ثنائي مكثّف خاص بـ ART وخاص بالتطبيق. ويمكن لـ ART بعد ذلك الاستفادة من هذا الملف الشخصي عند تثبيت التطبيق على الأجهزة من أجل تجميع مجموعة فرعية محددة من التطبيق مسبقًا لتحسين أداء التطبيق، وخاصة أول عملية تشغيل. يُرجى العلم أنّ ذلك لن يؤثر في التطبيقات التي يمكن تصحيح الأخطاء بها.

الإصدار 1.0.0-beta08

2 حزيران (يونيو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta08. يحتوي الإصدار 1.0.0-beta08 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • أصبح اسم "State<T>" الآن State<out T> (I69049).
  • تغيير في واجهة برمجة التطبيقات في ControlledComposition لتفعيل التغييرات في إعادة إنشاء بطاقة واحدة (Iaafd1، b/184173932)

الإصدار 1.0.0-beta07

18 أيار (مايو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta07. يحتوي الإصدار 1.0.0-beta07 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة واجهات برمجة تطبيقات جديدة للمحول البرمجي تتيح إزالة معلومات المصدر التي تم إنشاؤها عن طريق برنامج التجميع أثناء عملية تصغير المصدر. (Ia34e6)
  • تقدّم هذه السمة ReusableContent التي ستحاول إعادة استخدام العُقد في محتواها بدلاً من استبدالها عند تغيير المفتاح. عند تغيير المفتاح، يتم تجاهل القيم السابقة في جدول الخانات الخاصة بالمحتوى باستثناء العُقد التي تم إنشاؤها والقيم المستخدَمة لتعديل العُقد.

    تقدِّم السياسة ReusableComposeNode التي ستُعيد استخدام العقدة المنبعثة بدلاً من استبدالها كما هي الحال مع "ComposeNode". (I1dd86)

  • @ComposeCompilerApi لم يعُد @RequiresOptIn (Iab690)

إصلاح الأخطاء

  • سيحتفظ العمود الكسول/الصف الآن بما يصل إلى عنصرَين نشطَين سابقًا (لا يتم التخلص منه) حتى عند الانتقال للأسفل أو للأعلى. يسمح هذا للمكون بإعادة استخدام الإنشاءات الفرعية النشطة عندما سنحتاج إلى إنشاء عنصر جديد يحسن أداء التمرير. (Ie5555)

الإصدار 1.0.0-beta06

5 أيار (مايو) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta06. يحتوي الإصدار 1.0.0-beta06 على هذه الالتزامات.

التغييرات في واجهة برمجة التطبيقات

  • @ComposeCompilerApi لم يعُد @RequiresOptIn (Iab690)

الإصدار 1.0.0-beta05

21 نيسان (أبريل) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta05. يحتوي الإصدار 1.0.0-beta05 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة @InternalComposeApi من عمليات قراءة وكتابة لقطة التسجيل (Id134d).

إصلاح الأخطاء

  • أصبحت ملفات AndroidManifest من ui-test-manifest وui-tooling-data متوافقة الآن مع نظام التشغيل Android 12 (I6f9de وb/184718994).

الإصدار 1.0.0-beta04

7 نيسان (أبريل) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta04. يحتوي الإصدار 1.0.0-beta04 على عمليات التنفيذ هذه.

إصلاح الأخطاء

  • قبل إجراء هذا التغيير، كان بالإمكان تخطّي الدوال المحلية القابلة للإنشاء استنادًا إلى مَعلماتها. بعد هذا التغيير، لن يتم تخطّي أي دوال محلية قابلة للإنشاء. وتمّ إجراء هذا التغيير لأنّه من الشائع والمتوقّع أن تسجِّل الدوال المحلية المَعلمات من العنصر الرئيسي ويشكّل تخطّيها مصدرًا شائعًا للأخطاء.

    للتلخيص، ضع في اعتبارك المثال:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button( onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    قبل هذا التغيير، كان يتم دائمًا تخطّي دالة ShowCount القابلة للإنشاء، حتى بعد تعديل مَعلمة count. لقد اختلف الوضع اليوم. (I5648a)

  • تم إصلاح المشكلة التي كانت تحدث عندما كان يستعيد rememberSaveable() القيمة القديمة عند استخدامها مع مَعلمات الإدخال (I1b110، b/182403380)

الإصدار 1.0.0-beta03

24 آذار (مارس) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta03. يحتوي الإصدار 1.0.0-beta03 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تم إيقاف DefaultMonotonicFrameClock نهائيًا. عند الاتصال بـ withFrameNanos أو "Recomposer.runRecomposeAndApplyChanges" بدون "MonotonicFrameClock"، سيتم طرح IllegalStateException الآن. (I4eb0d)

الإصدار 1.0.0-beta02

10 آذار (مارس) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta02. يحتوي الإصدار 1.0.0-beta02 على عمليات التنفيذ هذه.

إصلاح الأخطاء

  • فرض قيود على الاستخدام العلني لواجهات برمجة التطبيقات التجريبية (I6aa29 وb/174531520)
  • إصلاح rememberSaveable { mutableStateOf(0) } المعطّل عند استخدامه داخل وجهة إنشاء التنقل. (I1312b، وb/180042685، وb/180701630)

الإصدار 1.0.0-beta01

24 شباط (فبراير) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-beta01. يحتوي الإصدار 1.0.0-beta01 على عمليات التنفيذ هذه.

هذا هو الإصدار الأول من الإصدار التجريبي من Compose 1.0.0.

التغييرات في واجهة برمجة التطبيقات

  • أضِف Recomposer.runRecomposeConcurrentlyAndApplyChanges experimental API لإعادة إنشاء مقطوعات موسيقية تم إبطال صلاحيتها خارج حلقة الإطار الرئيسي. (I342d0)
  • يتم الآن التحقّق من صحة وقت التجميع لأي عناصر قابلة للإنشاء تم وضع علامة @ReadOnlyComposable عليها، وذلك لضمان إجراء اتصالات بـ @ReadOnlyComposables فقط (I58961).
  • أصبحت defaultFactory لكل من compositionLocalOf وstaticCompositionLocalOf مطلوبة الآن بدلاً من اختيارية.

    تؤدي هذه التغييرات إلى إزالة خطأ النوع المحتمل للأنواع غير القابلة للقيم الفارغة والتي لم يتم توفير مصنع افتراضي لها. كان هذا في السابق يوفر مرجعًا فارغًا لنوع غير قابل للقيم الفارغة.

    بالنسبة إلى الأنواع القابلة للقيم الفارغة، ننصحك بتوفير { null } كمصنع تلقائي.

    ولا ننصح باستخدام رموز محلية مع أنواع غير قابلة للقيم الفارغة ما لم يكن بالإمكان ضبط قيمة تلقائية معقولة. إذا لم تتوفّر إعدادات تلقائية معقولة، يجب أن تطرح دالة defaultFactory lambda استثناءً. ومع ذلك، يعني طرح استثناء أنّ المستهلكين المحليين سيكون لهم تبعية ضمنية على ما يتم توفيره بدون فرضه نظام النوع. (Ifbd2a)

  • تمت إزالة الرموز المتوقّفة نهائيًا من وقت تشغيل الإنشاء (I3252c).

  • تمت إزالة emptyContent() المتوقفة. يمكنك استخدام {} كبديل. (Idb33f، b/179432510)

  • تمت إعادة تسمية مقدّمي الخدمات إلى HeadlineLocalProvider.

    • لم تعد طريقة إنشاء المقطوعة الموسيقية تقبل معلَمة رئيسية، وتم إيقافها نهائيًا.
    • تم تحويل currentCompositeKeyHash إلى سمة مستوى أعلى قابلة للإنشاء بدلاً من دالة مستوى أعلى قابلة للإنشاء.
    • تم نقل GenreData وSurfaceGroup إلى مساحة الاسم androidx.compose.runtime.tooling
    • تم إنشاء واجهة ComposableLambda بدلاً من فئة خرسانة ولم تعد تحتوي على معلمات من النوع.
    • تم إنشاء واجهة ComposableLambdaN بدلاً من فئة خرسانية ولم تعد تحتوي على معلمات من النوع.
    • تم نقل الدالة sampleFlow إلى مساحة الاسم androidx.compose.runtime.
    • فطريقة دمج SnapshotMutationPolicy لم تعد تجريبية
    • تمت إزالة الدالة clearRoots ذات المستوى الأعلى @TestOnly. لم يعد من الضروري استخدامه.
    • تمت إزالة الدالتين keySourceInfoOf وresetSourceInfo. لم تعد ضرورية.
    • تمت إزالة Composer.collectKeySource Information. لم يعد من الضروري استخدامه.
    • تمت إزالة طرق isJOINedKey وjoinKeyLeft وjoinKeyRight. لم تعد ضرورية.
    • تم نقل العديد من واجهات برمجة التطبيقات ذات المستوى الأعلى وإعادة تنظيمها في ملفات مختلفة. وبسبب دلالات فئة الملف في Kotlin، سيؤدي ذلك إلى تعطيل التوافق الثنائي ولكن ليس التوافق مع المصدر، لذا من المفترض ألا يمثّل ذلك مشكلة لمعظم المستخدمين.
    • (I99b7d، b/177245490)
  • SnapshotStateObserver لم يعد تجريبيًا (Id2e6a)

  • تم حذف بعض واجهات برمجة التطبيقات التي تم إيقافها نهائيًا سابقًا (Ice5da، وb/178633932).

  • تم إجراء التغييرات التالية على Material API:

    • تمت إضافة مَعلمة contentPadding إلى Top/BottomAppBar للسماح بتخصيص المساحة المتروكة التلقائية.
    • المعلَمات المُعاد ترتيبها في BackdropScaffold لاتّباع إرشادات واجهة برمجة التطبيقات للمَعلمات المطلوبة قبل المَعلمات الاختيارية.
    • تم نقل المعلمة icon في Bottom NavigationItem ليكون بعد selected وonClick.
    • تمت إعادة تسمية المعلَمة alwaysShowLabels في Bottom NavigationItem إلى alwaysShowLabel.
    • تمت إعادة تسمية معلَمات bodyContent في بعض المكوّنات لتصبح content فقط.
    • تم إعادة ترتيب المعلمات في ButtonDefaults.buttonColors(). تجدر الإشارة إلى أنّه نظرًا لعدم تغيير نوع المَعلمات، لن يتسبب ذلك في حدوث خطأ في الرمز، لذا يُرجى التأكد من استخدام المَعلمات المُسَمّاة أو تعديل الترتيب يدويًا، وإلا لن يعمل الرمز كما كان في السابق.
    • تمت إضافة المَعلمة secondaryVariant إلى darkColors(). عادةً ما يكون هذا اللون هو نفسه اللون secondary في المظهر الداكن، ولكنّه تتم إضافته لتوفير المزيد من الاتّساق وتخصيص المحتوى.
    • تمت إزالة EliffationDefaults وanimateEliffation() من واجهة برمجة التطبيقات العامة نظرًا لعدم استخدامهما بشكل شائع أو الاستفادة منهما.
    • تمت إعادة تسمية onValueChangeEnd في Slider إلى onValueChangeFinished وجعله قابلاً للقيم الفارغة.
    • تمت إعادة تسمية المعلَمة text في Snackbar إلى content لتحقيق الاتساق.
    • تمت إضافة المَعلمة contentPadding إلى DropdownMenuItem للسماح بتخصيص المساحة المتروكة التلقائية وتم جعل content إضافة في RowScope.
    • تمت إعادة تسمية "ModalDrawerLayout" إلى "ModalDrawer".
    • تمت إعادة تسمية "BottomDrawerLayout" إلى "BottomDrawer".
    • (I1cc66)

الإصدار 1.0.0-alpha12

10 شباط (فبراير) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha12. يحتوي الإصدار 1.0.0-alpha12 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة دعم ViewGroups من UiApplier. تمت إزالة عناصر emitView القابلة للإنشاء المتوقّفة. (Ifb214)
  • تمت إعادة تسمية TechnicalReference إلى ComponentContext (I53fcb).
  • تم نقل ComponentActivity.setContent إلى androidx.activity.compose.setContent في وحدة androidx.activity:activity-compose. (Icf416)
  • تم تحديث Snapshot API لتصبح أكثر اتّساقًا مع إرشادات واجهة برمجة التطبيقات بالإضافة إلى إخفاء فئات التنفيذ الداخلي من واجهة برمجة التطبيقات العامة. (Id9e32)
  • أُعيدت تسمية "أصوات محيطة" لتُطابق "أصوات محيطة" -> ChocolateLocal. كان يُطلق على "الأحياء" اسم AmbientFoo، وأصبح اسم GenreLocals هو LocalFoo. (I2d55d)
  • تمت إعادة تسمية Ambient إلى SurfaceLocal، وAmbiOf / staticAmbientOf، إلى composeLocalOf / static المؤلفLocalOf. يساعد هذا التغيير في توضيح الغرض من SurfaceLocal: وهي آلية لتوفير أو استرداد القيم المحلية في المقطوعة الموسيقية. يجب أن تبدأ مثيلات SurfaceLocal بـ Local، مثل val LocalFoo = composeLocalOf { Foo() }. (Ia55b6)
  • وأصبحت TakeMutableSnapshot وhotSnapshot طريقتَين مصاحبتين لـ Snapshot. (I91f19)
  • تم إيقاف @ComposableContract نهائيًا لصالح ثلاثة تعليقات توضيحية أكثر تحديدًا.

    أصبح "@ComposableContract(restartable = false)" @NonRestartableComposable "@ComposableContract(readonly = true)" أصبح @ReadOnlyComposable "@ComposableContract(preventCapture = true)" أصبح @DisallowComposableCalls تمت إزالة "@ComposableContract(tracked = true)". (I60a9d)

  • تم إيقاف الأدوات فارغة ( @Composable () و(@Composable ()) -> Unit).or وسيئًا () لأنّه لم يعُد له أي تأثير أو قيمة إيجابية في الأداء (I0484d).

  • snapshotFlow وwithMutableSnapshot لم يعودا تجريبيين (I6a45f)

  • أصبح بالإمكان الآن إغلاق أدوات إعادة التركيب. ستستمر أدوات إعادة التركيب المغلقة في إعادة التركيب حتى تكتمل تركيبة الكوروتينات الثانوية. تمت إعادة تسمية Recomposer.shutDown للإلغاء إلى "التباين" مع "إغلاق". (Ib6d76)

  • تم إيقاف عنصر compose:runtime-dispatch نهائيًا. يمكن العثور على MonotonicFrameClock الآن في compose:runtime، ويمكنك العثور على AndroidUiDispatcher في compose:ui. (Ib5c36)

  • تمت إعادة هيكلة واجهة برمجة التطبيقات التي يستهدفها المكوّن الإضافي للمحول البرمجي في Compose لاستخدام واجهة بدلاً من فئة ملموسة. لم تعد الواجهة تستخدم معلمة النوع أيضًا.

    وهذا تغيير داخلي ليس له تأثير على توافق رمز المصدر، بل هو تغيير فاصل ثنائي. (I3b922، b/169406779)

  • تم تقديم SnapshotMutableState (Icfd03).

  • تمت إعادة تسمية DisposableEffectDisposable إلى DisposaleEffectResult (Ica7c6).

  • تمت إزالة Recomposer.current(). [Abstract]ComposeView الآن يتم تلقائيًا ضبط إعدادات Recomposer على مستوى النافذة التي يتم إنشاؤها بشكل كسول والتي يتم إجراؤها من خلال ViewTreeLifecycleOwner للنافذة. يتم إيقاف إعادة التركيب مؤقتًا وعلامات الرسوم المتحركة المستندة إلى FrameNanos أثناء إيقاف دورة حياة المضيف. (I38e11)

  • توفّر Recomposer.runningRecomposers الآن StateFlow العام من RecomposerInfo للقراءة فقط لمراقبة حالة المقطوعة الموسيقية المستمرة في العملية. تفضيل واجهة برمجة التطبيقات هذه على Recomposer.current()، والتي تم إيقافها نهائيًا الآن (If8ebe)

  • تمّت إعادة تسمية DisposableEffectDisposable إلى DisposaleEffectResult (I3ea68).

الإصدار 1.0.0-alpha11

28 يناير 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha11. يحتوي الإصدار 1.0.0-alpha11 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تم إيقاف onCommit وonDispose وonActive نهائيًا لصالح واجهات برمجة التطبيقات SideEffect وDisposableEffect API (If760e).
  • تم نهائيًا إيقاف واجهة برمجة التطبيقات emit() وجميع عمليات التحميل الزائدة وإعادة تسميتها إلى ComposeNode. واجهات برمجة التطبيقات متطابقة، ولكن باسم مختلف فقط لاتباع اصطلاحات التسمية في Compose (I4137b)
  • تم إيقافableate وCompateReference() نهائيًا لصالح currentRecomposeScope و"تذكُّر لبطاقة تحكُّم مستخدمة" على التوالي. (I583a8)
  • يحلّ Rebserver محل ApplicationLifecycleObserver، وتم الآن إيقاف ConnectionLifecycleObserver نهائيًا.

    RememberObserver هو بديل CompositionLifecycleObserver بالدلالات الدلالية المعدّلة والطرق التي تمت إعادة تسميتها. ويمكن إجراء التغيير إلى واجهة برمجة التطبيقات الجديدة آليًا للكائنات التي لا يتم تذكّرها إلا مرة واحدة، وهي الممارسة الموصى بها ولا تزال كذلك. في المقابل، إذا تم تذكر مرجع أكثر من مرة في مقطوعة موسيقية، يتم استدعاء onRemembered لكل مرجع حيث يتم استدعاء onEnter مرة واحدة فقط. كان يُطلق على onEnter عدة مرات إذا تم استخدام العنصر في التركيبات الفرعية، مثل WithConstraints وScaffold، ما جعل ضمان الطلب الوحيد للسمة onEnter غير موثوق به، وتمت إزالته بسبب RememberObserver.

    تضيف RememberObserver السمة onAbandoned التي يتم استدعاؤها إذا تم إرجاع مثيل RememberObserver من معاودة الاتصال التي تم تمريرها إلى remember ولكن لم يتم تذكُّرها في حالة تركيبة الاسم، وبالتالي لن يتم طلب onRemembered مطلقًا. وقد يحدث ذلك إذا أنهى استثناء المقطوعة الموسيقية قبل الانتهاء أو إذا تم تجاهل المقطوعة الموسيقية لأنّ الحالة كانت ينتج عنها مقطوعة موسيقية لم تعُد حديثة أو لم تعُد هناك حاجة إليها. إذا كان مثيل RememberObserver الذي يلي التوصية بالمرجع الفردي أعلاه يتتبّع موردًا خارجيًا في كل من onForgotten وonAbandoned يشير إلى أنّ المورد لم يعد مطلوبًا. إذا كان الكائن يتتبّع العمل الذي بدأ أو الموارد المخصّصة في onRemembered، يمكن تجاهل onAbandoned لأنّه لن يتم استدعاؤه في حال استدعاء الدالة onRemembered. (I02c36)

  • عدم وضع علامة على دوال collectAsState() للإشارة إلى أنّها مضمّنة (Ia73e4)

إصلاح الأخطاء

  • تمت إعادة صياغة WithConstraints باسم BoxWithConstraints وتم نقلها إلى Foundation.layout. (I9420b، b/173387208)
  • يمكنك الاستفادة من TestCoroutineDispatcher في الاختبار (I532b6).

الإصدار 1.0.0-alpha10

13 كانون الثاني (يناير) 2021

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha10. يحتوي الإصدار 1.0.0-alpha10 على هذه عمليات التنفيذ.

كسر التغيير

  • تتيح إعادة هيكلة واجهة برمجة تطبيقات التجميع الداخلي لتجميع التغييرات على العُقد التي تم إنشاؤها نتيجةً للتركيب في مرحلة "تطبيق التغييرات" في التركيبة، وذلك بعد اكتمال جميع دوال @Composable.

    وهذا تغيير سلوكي قد يؤثر في رمز التطبيق، إذ إنّ العُقد لم تعد متاحة من واجهات برمجة التطبيقات الداخلية والتجريبية إلا بعد تطبيق التغييرات. ويمكن حلّ هذا الأمر عادةً من خلال إحاطة الرمز البرمجي بهذه الاعتماديات في SideEffect قابل للإنشاء لتأجيل تنفيذ الرمز إلى أن يتم إنشاء العُقد وإعدادها. (I018da)

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة طريقة لتتبع ما إذا كانت أداة إعادة الإنشاء قد طبقت التغييرات. (I1b3e2)
  • يمكنك توسيع واجهات برمجة التطبيقات [Abstract]ComposeView لإتاحة إعادة استخدام طرق العرض المستندة إلى Compose، مع التركيز على المقطوعة الموسيقية لإعادة إنشائها مرة أخرى لاحقًا. أضِف واجهات برمجة التطبيقات لتثبيت واستخدام مراجع إعادة الإنشاء والمواد المرجعية على مستوى النافذة لإنشاء مقطوعات موسيقية فرعية.

    أضِف طريقة عرضمقطوعة موسيقية لإعداد استراتيجية التخلص من المقطوعة الموسيقية لـ [Abstract]ComposeViews، حيث يتم التخلص من السلوك التلقائي عند فصل النافذة. (I860ab)

إصلاح الأخطاء

  • تعرض أداة إعادة الإنشاء الآن تدفقًا لحالتها الحالية، ما يسمح بمراقبة نشاطها ونشاط التأثيرات المرتبطة بها. (Ifb2b9)
  • يمكن الآن الوصول إلى حدث keyEvent الأصلي من خلال keyEvent.nativeKeyEvent (I87c57، b/173086397)

الإصدار 1.0.0-alpha09

16 كانون الأول (ديسمبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha09. يحتوي الإصدار 1.0.0-alpha09 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إزالة TableauTable وStotReader وSlotWriter من واجهة برمجة التطبيقات العامة. تم وضع علامة عليها على أنها internalComposeAPI سابقًا. وهي الآن داخلية في وحدة الإنشاء.

    وتمت إضافة GenreData وSurfaceGroup كبديل لواجهة ui-tooling API لاستخدامها في استخراج معلومات التركيب. هذه الإعدادات متاحة للجميع، ولكنها غير مخصَّصة للاستخدام خارج واجهة برمجة تطبيقات ui-tooling API، لأنّها توفّر المعلومات الأولية التي تفسّرها واجهة برمجة التطبيقات ui-tooling API (I31a9c).

  • لم تعُد فئة Applier تُعتبر (Id85b0).

  • تم تغيير واجهة Applier لتبسيط بناء الأشجار من أسفل إلى أعلى بدلاً من إنشاءها من أعلى إلى أسفل.

    تمت إعادة تسمية الطريقة insert() إلى insertTopDown().

    تمت إضافة طريقة جديدة، insertBottomUp().

    يُدرج تطبيق التطبيق إما عُقدًا في الشجرة التي يتم تعديلها باستخدام insertTopDown() أو insertBottomUp() حسب الأداء الأفضل.

    تكون بعض الأشجار، مثل LayoutNode وView، أكثر كفاءة في البناء من أسفل إلى أعلى من إنشائها من أعلى إلى أسفل. قبل إجراء هذا التغيير، كانت هناك حاجة إلى حزمة من الإدخالات لتنفيذ البيانات من أسفل إلى أعلى، والتي يجب نسخها إلى كل تطبيق يحتاج إلى إنشاء من أسفل إلى أعلى لتحسين الأداء. يؤدي هذا التغيير إلى تجاوز Applier insertBottomUp() لإنشاء شجرة من أسفل إلى أعلى وinsertTopDown() لبناء الشجرة من أعلى إلى أسفل. (Icbdc2)

  • تدعم ميزة Compose رموز الحصول على الخصائص التي يمكنها إنشاء استدعاءات قابلة للإنشاء. لن يتم إيقاف هذا الأمر، ولكن ستتغير بنية إعلان دالة getter عن الخاصية على أنها @Composable.

    كانت الصيغة التي تم إيقافها نهائيًا الآن لإجراء ذلك هي من خلال إضافة تعليقات توضيحية إلى السمة نفسها:

        @Composable val someProperty: Int get() = ...
    

    بناء الجملة الصحيح الآن للقيام بذلك هو من خلال إضافة تعليق توضيحي للخاصية:

       val someProperty: Int @Composable get() = ...
    

    ستعمل كلتا البنيتين لبعض الوقت، ولكن البنية السابقة المتوقّفة ستصبح في النهاية خطأ في التجميع. (Id9197)

إصلاح الأخطاء

  • AndroidOwner تم إنشاؤه داخليًا (Ibcad0، b/170296980)
  • تم إنشاء subcomposeInto(LayoutNode) داخليًا (Id724a)

الإصدار 1.0.0-alpha08

2 كانون الأول (ديسمبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha08. يحتوي الإصدار 1.0.0-alpha08 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة فحص Lint لتسمية مَعلمات lambda القابلة للإنشاء وتحديد موضعها، وذلك للتحقّق من الاتساق مع إرشادات Compose. تم أيضًا نقل بعض واجهات برمجة التطبيقات باستخدام children كاسم لملف lambda اللاحقة إلى content، وفقًا لفحص Lint والإرشادات. (Iec48e)
  • لم تعد أداة إعادة الإنشاء تقبل EmbeddingContext، ويتم الحصول على تبعيات الجدولة المطلوبة من eventCoroutineContext. تم إيقاف FrameManager؛ وبالتالي يجب أن تؤدي عمليات دمج النظام الأساسي إلى تهيئة معالجة اللقطات العامة الخاصة بها. (I02369)
  • تمت إعادة تسمية الدالة RestorableStateHolder.withRestorableState لتصبح RestorableStateProvider (I66640).

إصلاح الأخطاء

  • تم إيقاف "وضع الاستراحة" نهائيًا باستخدام اللاحقة Ambient، واستبدلها بسمات جديدة تبدأ بـ "وضع الاستراحة"، وذلك وفقًا لإرشادات واجهة برمجة التطبيقات الخاصة بميزة "بيئة المحيطة" و"Compose" الأخرى. (I33440)
  • إزالة وحدة اختبار واجهة المستخدم القديمة وأذرعها (I3a7cb)

الإصدار 1.0.0-alpha07

11 تشرين الثاني (نوفمبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha07. يحتوي الإصدار 1.0.0-alpha07 على هذه عمليات التنفيذ.

الميزات الجديدة

التغييرات في واجهة برمجة التطبيقات

  • تم إيقاف التعليق التوضيحي @UnionType نهائيًا (I57cde)
  • تمت إضافة provideDefault كبديل لتوفير البيئة المحيطة، ويمكن استخدامه لتحديد القيم المحيطة التي لن يتم ضبطها إلا في حال عدم توفّر قيمة البيئة المحيطة. (Id6635، b/171024925)
  • تمت إعادة تسمية LaunchedTask إلى LaunchedEffect لتحقيق الاتساق مع واجهتَي برمجة التطبيقات SideEffect وDeposableEffect لا يُسمح باستخدام دالة LaunchedEffect بدون مَعلمات موضوع بهدف التشجيع على أفضل الممارسات. (Ifd3d4)
  • يحتوي Applier الآن على استدعاءات on تعليقChanges/onEndChanges يتم استدعاءها عند بدء/انتهاء Composer من تطبيق التغييرات على الشجرة. ويمكن استخدام هذه البيانات لتجميع الموارد إذا لزم الأمر. (Icf476)
  • تتطلّب أداة إعادة الإنشاء الآن توفُّر CoroutineContext عند الإنشاء (Ic4610).
  • التغييرات التي تطرأ على تنفيذ جدول المقامرة الداخلي والتي ينبغي ألا تؤثر في واجهة برمجة التطبيقات العامة. (If9828)
  • تمت إزالة محوّلات rxjava2 المتوقّفة التي لا تأخذ القيمة الأولية (Idb72f)

إصلاح الأخطاء

  • تم إيقاف Foundation.Text نهائيًا واستبداله بـmaterial.Text. للحصول على واجهة برمجة تطبيقات نصية أساسية غير معرَّفة لا تستهلك قيمًا من مظهر معيّن، يُرجى الانتقال إلى androidx.compose.foundation.BasicText. (If64cb)
  • تم إيقاف BaseTextField نهائيًا. استخدِم BasicTextField بدلاً من ذلك. (I896eb)
  • تم نقل العديد من الرموز ذات الصلة بالتنسيق من androidx.compose.ui إلى androidx.compose.layout.ui. (I0fa98، b/170475424)

مساهمة خارجية

  • تمت إضافة وحدة runtime-rxjava3 للإنشاء. شبيهة لـ runtime-rxjava2 (I02cbf)

الإصدار 1.0.0-alpha06

28 تشرين الأول (أكتوبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha06. يحتوي الإصدار 1.0.0-alpha06 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • أصبحت الآن أداة إعادة الإنشاء مرجعًا للمقطوعة الموسيقية وعنصرًا رئيسيًا صالحًا للتركيب. أصبحت أداة إعادة الإنشاء الصريح مطلوبة الآن في عدد أقل من الأماكن. (I4036f)
  • تمت إضافة واجهة برمجة التطبيقات ReposableEffect API إلى SideEffect، ما أدى إلى ملء دور onCommit-with-params ولكن مع استخدام onDispose.
    • تمت إضافة واجهة برمجة التطبيقات writeUpdateState API لنشر البيانات من إعادة الإنشاء إلى العمليات المستمرة أو طويلة الأجل، مثل DisposableEffects أو LaunchedTasks.
    • (المعرّف 50b9)
  • تنفِّذ MutableVector الآن دالة SpamAccess (I85d73، وb/170461551).
  • تمت إضافة التأثير الجانبي الذي يمكن إنشاؤه لتطبيق الآثار الجانبية للتركيب على العناصر التي تتم إدارتها بواسطة المقطوعة. يهدف SideEffect إلى استبدال ملف onCommit القابل للإنشاء. (Ia77c2)
  • واجهة برمجة تطبيقات جديدة تجريبية، RestorableStateHolder. تسمح هذه الأداة بحفظ الحالة المحددة بـ [savedInstanceState] و[rememberSavedInstanceState] للشجرة الفرعية قبل التخلص منها ليصبح من الممكن تأليفها مرة أخرى في المرة القادمة مع الحالة التي تمت استعادتها. (I66884، b/166586419)

إصلاح الأخطاء

  • تفعيل الانتقالات في ComposeTestRule، ويمكنك إزالة الخيار لتفعيل المؤشر الوامض من ComposeTestRule. (If0de3)

الإصدار 1.0.0-alpha05

14 تشرين الأول (أكتوبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha05. يحتوي الإصدار 1.0.0-alpha05 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • الإصدار التجريبي من Modifier.pointerInput لتعديل إدخال التعليق (Ia77d2)
  • يتم تحسين أداء التمرير في العمود LazyColumn/Row من خلال تقليل العمل في الإنشاء الفرعي في كل تمرير. تمت إضافة طريقة hasPendingChanges() الجديدة لفئة التكوين. وقد تمت إعادة تسمية طريقة hasPendingChanges() من Recomposer إلى has invalidations() (Ib2f32 وb/168293643 وb/167972292 وb/165028371)
  • إضافة واجهة برمجة تطبيقات productState لتشغيل الكوروتينات من التركيبة التي تعدِّل قيمة State<T> واحدة بمرور الوقت (Id4a57)
  • تمت إعادة تسمية lastInSurface إلى LaunchedTask لمطابقة إرشادات واجهة برمجة التطبيقات Compose (I99a8e).
  • يحدِّد ترتيب استدعاءات Place() في التنسيقات المخصّصة الآن ترتيب الرسم للعناصر الثانوية (Ibc9f6)

الإصدار 1.0.0-alpha04

1 تشرين الأول (أكتوبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha04. يحتوي الإصدار 1.0.0-alpha04 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • تمت إضافة OwnerScope للسماح بجمع نطاقات التخطيط ورسمها بمجرد أن لا تعد صالحة. (Ic4cf8)
  • تمت إضافة واجهة برمجة التطبيقاتedStateOf API لإنشاء كائنات الحالة استنادًا إلى عملية حسابية قد تقرأ (وتستنتج من) كائنات الحالة الأخرى (If758b).
  • تمت إضافة واجهة برمجة التطبيقات TestOnly API الخاصة بتطبيق SnapshotStateObserver (I6e2a9).

إصلاح الأخطاء

  • تم إيقاف Foundation.Box نهائيًا. يُرجى استخدام Foundation.layout.Box بدلاً من ذلك. (Ie5950، b/167680279)

الإصدار 1.0.0-alpha03

16 أيلول (سبتمبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha03. يحتوي الإصدار 1.0.0-alpha03 على هذه عمليات التنفيذ.

التغييرات في واجهة برمجة التطبيقات

  • لم يعُد CompositionCoroutineScope ينفِّذ MonotonicFrameClock. على المتصلين في withFrameNanos استيراد دالة المستوى الأعلى بشكل صريح. (Icb642 وb/166778123)

إصلاح الأخطاء

  • تم إيقاف وظائف الاختبار العامة مثل onNode أو waitForIdle نهائيًا. يُرجى النقل إلى نظيراتها الجديدة المحددة في ComposeTestRule (I7f45a).
  • لم تعد launchInComposition تُطلق الكوروتينات التي لم يتم إرسالها (Ief6af، b/166486000)

الإصدار 1.0.0-alpha02

2 أيلول (سبتمبر) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha02. يحتوي الإصدار 1.0.0-alpha02 على عمليات التنفيذ هذه.

التغييرات في واجهة برمجة التطبيقات

  • أضِف واجهتَي برمجة تطبيقات snapshotFlow وwithMutableSnapshot لاستخدام التغييرات في البيانات الخاصة بميزة "لمحة" وإنتاجها. (I3e722)
  • تم تغيير اصطلاح استدعاء الدوال القابلة للإنشاء. وهذا التغيير يؤدّي إلى كسر ثنائي. يجب إعادة تجميع جميع المكتبات للعمل مع هذا الإصدار من المكون الإضافي لبرنامج التحويل البرمجي للإنشاء.

    لا يؤدي هذا التغيير إلى حدوث تغيير يُعطل على مستوى المصدر، حيث إن واجهات برمجة التطبيقات التي تم تغييرها هي فقط واجهات برمجة تطبيقات التجميع التي تم تفعيل الموافقة الصريح عليها. (I7afd2، b/158123185)

  • تمت إزالة طرق الجدولة من EmbeddingContext (I7b9be)

  • تم إيقاف onPreCommit نهائيًا، وأصبح لدى onCommit الآن سلوك onPreCommit.

    يعمل onCommit وonActive الآن في إطار مُصمّم الرقصات نفسه الذي تتغيّر فيه المقطوعة الموسيقية بدلاً من بدايتها في بداية إطار مصمم الرقصات التالي. (I70403)

الإصدار 1.0.0-alpha01

26 آب (أغسطس) 2020

تم طرح androidx.compose.runtime:runtime-*:1.0.0-alpha01. يحتوي الإصدار 1.0.0-alpha01 على عمليات التنفيذ هذه.

الإصدار 0.1.0-dev

الإصدار 0.1.0-dev17

19 آب (أغسطس) 2020

تم طرح androidx.compose.runtime:runtime-*:0.1.0-dev17. يحتوي الإصدار 0.1.0-dev17 على هذه العمليات.

التغييرات في واجهة برمجة التطبيقات

  • يمكن الآن أن تشير عمليات الرصد المخصّصة إلى أنّه يمكن تخطّي عنصر واحد أو أكثر من أدوات الرصد الخاصة به وإعادة تكوينه بشكل مستقلّ عن هذه الانبعاثات. (Ibbd13)
  • تمت إزالة طلبات FrameManager المتوقّفة نهائيًا.

    تم تغيير واجهات برمجة تطبيقات الإنشاء الداخلية لتقليل مقدار النفقات العامة لتتبُّع كائنات الحالة، مثل mutableStateof() (I80ba6).

  • تم الآن إيقاف عنصر state { ... } القابل للإنشاء نهائيًا لصالح الاستدعاءات الفاضحة إلى remember { mutableStateOf(...) } للإيضاح. ويقلل هذا الإجراء من إجمالي مساحة عرض واجهة برمجة التطبيقات وعدد المفاهيم المتعلّقة بإدارة الحالة، ويطابق نمط by mutableStateOf() لتفويض السمات في الفئة. (Ia5727)

  • يحدِّد Flow.collectAsState الآن المُرسِل التلقائي من المقطوعة الموسيقية نفسها بدلاً من الضبط التلقائي على Dispatchers.Main. (I9c1d9)

  • يحدث عطل عندما يتم استخدام عنصر يحفظ الحالة داخل التكرار الحلقي for. يُسمح الآن باستخدام المفتاح نفسه في savedInstanceState() ، وقد تم تعديل واجهة برمجة تطبيقات UiSavedStateRegistry لهذا الشرط الجديد (I4ab76 وb/160042650 وb/156853976 وb/159026663 وb/154920561).

إصلاح الأخطاء

  • تم إيقاف emitView نهائيًا. استخدم AndroidView بدلاً من ذلك إن أمكن لإرسال طرق العرض داخل Compose. تجدر الإشارة إلى أنّه لن تتوفّر إمكانية إنشاء "طرق العرض" و"ViewGroups" مباشرةً في المستقبل ما لم تتم إزالتها في شجرة الإنشاء، في حال توفّرت هذه الطريقة في AndroidView. (I29b1e، b/163871221)

الإصدار 0.1.0-dev16

5 آب (أغسطس) 2020

تم طرح androidx.compose.runtime:runtime-*:0.1.0-dev16. يحتوي الإصدار 0.1.0-dev16 على هذه العمليات.

التغييرات في واجهة برمجة التطبيقات

  • تم تغيير سياسة التغيير التلقائية لكل من mutableStateOf() وambientOf() وsavedInstanceStateOf() لتصبح structuralEqualityPolicy() بدلاً من referentialEqualityPolicy().

    الإعداد التلقائي لتحديد ما إذا كانت القيمة الجديدة التي تم تحديدها لمثيل mutableStateOf() تُعتبر تغييرًا يتم ضبطها تلقائيًا على استخدام == بدلاً من استخدام ===.

    يمكنك الاطّلاع على https://kotlinlang.org/docs/reference/equality.html.

    يستخدم كل من ambientOf() وsavedInstanceStateOf() mutableStateOf() في عمليات التنفيذ لذا تم تغييرها لتصبح متسقة مع mutableStateOf().

    يتطابق استخدام المساواة الهيكلية بشكل أوثق مع توقعات المطورين.

    على سبيل المثال:

    val state = mutableStateOf(1f)
    

    يليها،

    state.value = 1f
    

    لن يتم اعتبار أي تغيير في state ولن تكون هناك حاجة إلى إعادة إنشاء استخدامات state خلال المقطوعة الموسيقية.

    وهذا التغيير قد يؤدي إلى عطل، ولكن في معظم الحالات (مثل عند استخدام الفئات التي لا تلغي السمة equals())، لن يكون له تأثير ملحوظ في التطبيق.

    بالنسبة إلى الفئات التي تلغي equals()، مثل فئات data، قد تشهد تدهورًا في الأداء نظرًا إلى أنّ طُرق equals() يتم استدعاءها الآن بشكل تلقائي عند تعيينها إلى mutableStateOf().

    ويمكن استعادة السلوك السابق من خلال إضافة مَعلمة السياسة policy = referentialEqualityPolicy() إلى طلبات البيانات إلى mutableStateOf() وambientOf() وsavedInstanceStateOf(). (Ic21a7)

  • تعمل Row وColumn الآن على تقليل معدّل استخدامهما بشكل كبير. (I75c10)

إصلاح الأخطاء

  • تم إيقاف setViewContent نهائيًا. يجب استخدام setContent بدلاً منه. (I7e497، b/160335130)
  • تمت إضافة MonotonicFrameAnimationClock التي تتيح لك استخدام MonotonicFrameClock كـ AnimationClockObscreenable لسد الفجوة بين الساعات الجديدة المستندة إلى الكوروتينات وواجهات برمجة التطبيقات التي لا تزال تستخدم الساعات القديمة المستندة إلى معاودة الاتصال.

    أصبح اسم MonotonicFrameClock المكافئ لـ manualAnimationClock الآن يدوي الإطار. (I111c7، b/161247083)

  • تمت إعادة صياغة Modifier.stateDraggable بالكامل وإعادة تسميتها إلى Modifier.squickable. تم طرح فئة جديدة لـ ShortableState، وأعيدت هيكلة DrawerState وBottomDrawerState لاكتسابها. [Modal/Bottom]لم يعد DrawerLayout يستخدم معلمة onStateChange. (I72332، b/148023068)

  • تم إيقاف Modifier.plus نهائيًا، لذا يُرجى استخدام Modifier.ثم بدلاً من ذلك. تحتوي كلمة "ثم" على إشارة أقوى للطلب، بينما تمنع أيضًا كتابة Modifier.padding().background() + anotherModifier، ما يؤدي إلى فصل السلسلة ويصعب قراءته (Iedd58، b/161529964)

  • تمت إضافة SubcomposeLayout. وهي دالة بدائية منخفضة المستوى تتيح تكوين الأطفال أثناء القياس إذا أردنا استخدام بعض القيم المتاحة فقط في وقت لاحق أثناء قياس تكوين الشجرة الفرعية. على سبيل المثال، لا يتم تنفيذ WithConstraints باستخدام SubcomposeLayout. (I25cc8)

  • تمت إعادة تسمية Material filledTextField ليصبح TextField، كما تمت إعادة تسمية حقل TextField الأساسي إلى BaseTextField لتسهيل العثور على واجهة برمجة التطبيقات المطلوبة واستخدامها (Ia6242، وb/155482676).

  • تمت إعادة تسمية Modifier. drawBackground إلى Modifier.background (I13677).

الإصدار 0.1.0-dev15

22 تموز (يوليو) 2020

تم طرح androidx.compose.runtime:runtime-*:0.1.0-dev15. يحتوي الإصدار 0.1.0-dev15 على هذه العمليات.

تحديث التبعيات

  • لاستخدام إصدار 0.1.0-dev15 من Compose، يجب تعديل اعتمادياتك وفقًا لمقتطفات الرمز الجديدة الواردة أعلاه في توضيح التبعيات.

التغييرات في واجهة برمجة التطبيقات

  • تم الآن إيقاف التعليق التوضيحي @Model نهائيًا. استخدِم State وmutableStateOf كبدائل. وقد تم التوصل إلى قرار الإيقاف هذا بعد الكثير من المناقشات المتأنية.

    السبب

    وتشمل الأسباب، على سبيل المثال لا الحصر، ما يلي:

    • تقليل مساحة عرض واجهة برمجة التطبيقات والمفاهيم التي نحتاج إلى تدريسها
    • تتوافق بشكل أكبر مع مجموعات الأدوات الأخرى المشابهة (Swift UI وReact وFlutter).
    • قرار يمكن التراجع عنه. ويمكننا استعادة @Model في أي وقت لاحقًا.
    • تتخلص من استخدام الأحرف الكبيرة والإجابة عن الأسئلة التي يصعب الإجابة عنها بشأن إعداد "@Model" لأنّنا نحتاج إلى التعامل معها.
    • @Model فئة بيانات ويساوي ورمز التجزئة وما إلى ذلك
    • كيف يمكنني الاحتفاظ بخصوصية بعض السمات التي تم "تتبّعها" والبعض الآخر لم تتم ملاحظته؟
    • كيف يمكنني تحديد المساواة الهيكلية مقابل المساواة المرجعية لاستخدامها في الملاحظة؟
    • لتقليل "السحر" في النظام. التقليل من احتمالية افتراض شخص أن النظام أذكى مما هو عليه (أي معرفة كيفية الاختلاف في القائمة)
    • تجعل دقة الملاحظة أكثر سهولة.
    • تحسين قابلية إعادة التصنيع من المتغير -> في الفئة
    • إمكانية إجراء تحسينات يدوية مخصّصة للدولة
    • يتماشى بشكل أوثق مع بقية المنظومة المتكاملة ويقلل من الغموض تجاه الأشخاص غير القابل للتغيير أو "نتبنى الحالة القابلة للتغير"

    ملاحظات عن النقل

    تم إدخال تغييرات بسيطة إلى حدّ ما على جميع الاستخدامات الحالية لتطبيق "@Model" من خلال إحدى الطريقتَين. يحتوي المثال أدناه على فئة @Model تحتوي على سمتَين فقط، ويتم استخدامها في سمة قابلة للإنشاء.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
        p.x = it }
        p.y = it }
     )
    }
    

    الخيار البديل 1: استخدام State<OriginalClass> وإنشاء نُسخ

    تم تسهيل هذا النهج باستخدام فئات بيانات Kotlin. بشكل أساسي، يمكنك تحويل جميع سمات var السابقة إلى سمات val من فئة بيانات، ثم استخدام state بدلاً من remember، وتعيين قيمة الحالة للنُسخ المستنسَخة من الأصل باستخدام طريقة تسهيل فئة البيانات copy(...).

    تجدر الإشارة إلى أنّ هذه الطريقة لا تعمل إلا عند إجراء التغييرات على تلك الفئة فقط في النطاق نفسه الذي يتم فيه إنشاء المثيل State. إذا كانت الفئة تتحول داخليًا خارج نطاق الاستخدام، وكنت تعتمد على ملاحظة ذلك، فإن النهج التالي هو الذي تريد استخدامه.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
        p = p.copy(x=it) }
        p = p.copy(y=it) }
     )
    }
    

    البديل 2: استخدام التفويضات في حالة الميزات القابلة للتغيير ومفوَّضي الملكية

    وقد تم تسهيل هذه الطريقة باستخدام ميزة تفويض السمة في Kotlin وواجهة برمجة التطبيقات mutableStateOf التي تتيح لك إنشاء مثيلات MutableState خارج التركيبة. في الأساس، يجب استبدال جميع سمات var في الفئة الأصلية بسمات var مع استخدام mutableStateOf كتفويض ملكية خاص بها. وهذه ميزة مفادها أن استخدام الفئة لن يتغير على الإطلاق، بل فقط التنفيذ الداخلي لها. ومع ذلك، لا يتطابق السلوك تمامًا مع المثال الأصلي، إذ تتم الآن مراقبة/اشتراك كل خاصية على حدة، وبالتالي قد تكون تغييرات التركيبة التي تراها بعد إعادة العامل هذه أكثر تحديدًا (وهو أمر جيد).

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
        p.x = it }
        p.y = it }
     )
    }
    

    (I409e8 وb/152050010 وb/146362815 وb/146342522 وb/143413369 وb/135715219 وb/143263)Ⴏ

  • يغيّر استراتيجية إنشاء الرموز البرمجية للمحول البرمجي في Compose. قبل التغيير، كان المحول البرمجي للإنشاء يحول الاستدعاءات إلى دوال قابلة للإنشاء. مع هذا التغيير، نحوّل الآن نص دالة قابلة للإنشاء ونترك موقع الاتصال بدون تعديل (في الغالب).

    هذا يعني أن معظم المنطق الذي يتواصل مع بيئة تشغيل الإنشاء يحدث في بداية نص الدالة، بدلاً من موقع الاتصال.

    يجب أن يكون هذا التغيير متوافقًا مع المصدر لجميع استخدامات Compose. يجب ألا يضطر معظم مستخدمي واجهة برمجة التطبيقات إلى تحديث أي رمز نتيجة لهذا التغيير.

    ولدعم هذا العمل، تغيّر توقيع JVM لجميع الدوال القابلة للإنشاء. يتم تحويل دالة قابلة للتعديل تقبل معلَمة واحدة إلى دالة تقبل 3 معلَمات، والمعلَمات الإضافية هي Composer، وهو عدد صحيح لـ "مفتاح"، وعدد صحيح لقناع بت يُستخدم لنشر البيانات الوصفية من خلال الطلبات.

    تعمل ميزة "إنشاء" الآن على تحويل الوسيطات التلقائية إلى دالة قابلة للإنشاء. ويتم ذلك بدون إدخال حِمل زائد اصطناعي إضافي تلقائي على الدالة نفسها، وبالتالي سيؤدي هذا التغيير إلى تحديد عدد أقل من الدوال.

    التغييرات السلوكية المقصودة المعروفة الناتجة عن ما يلي:

    1. سيتم تخطّي بعض المكالمات إلى الأماكن التي لم يكن ممكنًا إجراؤها سابقًا
    2. التعبيرات القابلة للإنشاء في تعبيرات الوسيطات التلقائية مشتركة الآن وتعالجها بشكل صحيح

    وتضمّن هذا العمل بعض التحسينات: 1- يتم نشر نتيجة مقارنات المعلَمات من خلال الرسم البياني للاستدعاء إلى دوال أخرى قابلة للإنشاء. سيؤدي ذلك إلى تقليل المقارنات في وقت التشغيل، وتقليل حجم جدول الخانة، وتخطّي المزيد من الدوال القابلة للإنشاء التي لم يتمّ تخطّيها في السابق. 2- إنّ المقاييس التي يتم تحديدها على أنّها "ثابتة" في وقت التجميع لا تتم مقارنتها أو تخزينها في بيئة التشغيل بعد الآن. وهذا ما يقلّل من عدد المقارنات ويقلّل حجم جدول الخانة. 3. يتم استخدام هيكل تدفق التحكم في نص الدوال لتقليل عدد المجموعات التي يتم إنشاؤها. يقلل هذا من حجم جدول الخانة ويؤدي إلى تقليل العمل في بيئة التشغيل. 4. لا يتم تضمين معلمات الإرسال والاستقبال غير المستخدمة للدوال في تحديد قابلية تخطي الدالة في حال عدم استخدامها داخل نص الدالة.

    كانت معظم التغييرات التي قد تؤدي إلى أعطال في واجهات برمجة التطبيقات التي يستهدفها المحول البرمجي بشكل مباشر، ولن يتأثر الاستخدام المعتاد للإنشاء: 1. تمت إزالة Composer::startExpr 2. تمت إزالة Composer::endExpr. 3. تم إيقاف Composer::call نهائيًا 4. تمّت إزالة الأحمال الزائدة للسمة key والتي لا تتضمّن أيّ اختلافات. وسيتم استخدام إصدار vararg من الآن فصاعدًا. 5. تم إيقاف التعليق التوضيحي المحوري نهائيًا. يمكنك استخدام key كبديل. 6. تم تغيير ScopeUpdateScope::updateScope لتوقُّع Function3 بدلاً من Function1. 7. تم تعديل حزمة أدوات إعادة التشغيل ووظيفة إعادة التشغيل لتضمين مَعلمات إضافية لوقت التجميع (I60756 وb/143464846).

  • تمت إضافة sortWith وRemoveRange إلى MutableVector (Icccf7)

  • تمت إضافة عمليات تنفيذ الطريقة التلقائية لـ SubscriptionLifecycleObserver (I24289)

  • يتطلب Applier الآن طريقة clear() للتخلص من التركيبات (Ibe697)

  • تمت إضافة asMutableList() إلى MutableVector للسماح بتمريرها إلى واجهة برمجة التطبيقات العامة دون الحاجة إلى نسخ القائمة بالكامل. (I298df)

  • تمت إضافة writeCoroutineScope() للحصول على CoroutineScope مُدارًا لإطلاق الوظائف استجابةً للأحداث. (I0e264)

  • MutableVector هي مجموعة جديدة لا تنفذ أيًا من واجهة المجموعة القياسية. توفّر هذه المجموعة سرعة أعلى من المتطلبات الأخرى، ويهدف إلى استخدامها فقط في عمليات التنفيذ الداخلية. (I8ebd6)

  • تمت إزالة السمتَين StableMutableList وStableMutableMap مؤقتًا لتجنُّب حدوث مشكلة في إصدار لغة إنشاء الرسائل بلغة Kotlin. ستتم إعادة تقديم هذه الواجهات بمجرد تحديث الإنشاء إلى إصدار Kotlin الذي لا يحتوي على مشكلة.

    أصبحت SnapshotStateList وSnapshotStateMap متاحة للجميع الآن، ولكن سيتم إيقافهما نهائيًا بعد استعادة StableMutableList وStableMutableMap. (Ia7769)

  • إضافة دالة withFrameNanos ذات المستوى الأعلى لتوقيت الصورة المتحركة (Ie34c5)

  • تم إيقاف التعليق التوضيحي @Untracked نهائيًا. الاستبدال بـ @Composable خطوات(tracked=false) (Id211e)

  • تمت إعادة تسمية واجهة برمجة التطبيقات RedirectableFunction وواجهات برمجة التطبيقات المرتبطة بها إلى ComposableLambda وما إلى ذلك. وقد تم استهداف واجهات برمجة التطبيقات هذه من خلال برنامج التحويل البرمجي فقط، لذا لن يؤثر ذلك بشكل طبيعي على التوافق على مستوى المصدر. تم إجراء إعادة التسمية في الأساس لتوضيح ما هو أفضل في هذا الصف عند ظهوره في عمليات تتبُّع تسلسل استدعاء الدوال البرمجية (I7eb25).

  • لم يعُد التعليق التوضيحي @Composable صالحًا للفئات (Ia5f02).

  • أصبحت Ambient<T> الآن ثابتة بدلاً من @Immutable (I0b4bb).

  • قبل هذا التغيير، كان المكون الإضافي لبرنامج التحويل البرمجي يعترض بطريقة غير تافهة الطلبات الواردة إلى دوال الإنشاء داخل الدالة @Composable في حالة وجود (I5205a، b/158123804)

  • لم يعد العنصر "إعادة التركيب" تجريدًا مفيدًا. يُفترض أن تحدث معظم عمليات إعادة التركيب نتيجة تعيينات MutableState. لإجراء ذلك، ننصحك باستخدام الدالة invalidate لإعادة تركيب النطاق الحالي. (Ifc992)

  • لم تعد الملاحظة مجرد محتوى مفيد. إذا كنت بحاجة إلى تكرارها، يمكن تكرار تنفيذها من خلال إنشاء دالة قابلة للإنشاء تنفِّذ مَعلمة lambda قابلة للإنشاء. على سبيل المثال، @Composable fun Observe(body: @Composable () -> Unit) = body() (I40d37)

  • تم إيقاف @Direct نهائيًا لصالح @Composable أهدافك(restartable=false) (If4708).

  • تمت إضافة محوّل خاص بـ StateFlow الذي تم طرحه مؤخرًا، ويتيح تعبئة القيمة الأولية تلقائيًا بحيث تكون الحالة التي تم إرجاعها غير قابلة للقيم الفارغة (I61dd8 وb/156233789).

  • تمت إضافة محوّل لتطبيق Flow. مثال على الاستخدام: قيمة val من خلال flow.collectAsState() (If2198, b/153375923)

  • [Mutable]تم نقل عوامل تشغيل تفويض المواقع على مستوى الولاية إلى الإضافات لإتاحة تحسينات تفويض المواقع على Kotlin 1.4. وعلى المتّصلين إضافة عمليات استيراد لمواصلة استخدام by state { ... } أو by mutableStateOf(...). (I5312c)

  • تم نقل androidx.compose.ViewComposer إلى العنوان androidx.ui.node.UiComposer. تمّت إزالة androidx.compose.Emittable. وكان تكرارًا له مع ComponentNode. وتمت إزالة androidx.compose.ViewAdapters. لم تعد حالة استخدام متوافقة. تم إيقاف Compose.composeInto نهائيًا. يمكنك استخدام setContent أو setViewContent بدلاً منها. تم إيقاف واجهة برمجة التطبيقات Compose.disposeAccounts نهائيًا. يمكنك بدلاً من ذلك استخدام طريقة dispose على Composition التي يعرضها setContent. وقد تم نقل androidx.compose.Compose.subcomposeInto إلى androidx.ui.core.subcomposeInto إلى ComponentNode#emitInsertAt. تمت إعادة تسمية ComponentNode#emitInsertAt إلى ComponentNode#insertAt ComponentNode#emitRemoveAt قد تمت إعادة تسميته إلى ComponentNode#emitRemoveAt تمت إعادة تسمية Node#emitMode.

  • تم تعديل علامة ComposeFlags.COMPOSER_PARAM لتصبح true، ما سيؤدي إلى تغيير استراتيجية إنشاء الرموز في المكوّن الإضافي لإنشاء الرموز. على مستوى عالٍ، يؤدي هذا الأمر إلى إنشاء دوال @Composable باستخدام مَعلمة اصطناعية إضافية، والتي يتم تمريرها إلى استدعاءات @Composable اللاحقة لكي يدير بيئة التشغيل عملية التنفيذ بشكل صحيح. ويُعد هذا تغييرًا كبيرًا لأعطال النظام الثنائي، ولكن يجب أن يحافظ هذا التغيير على التوافق على مستوى المصدر في جميع الاستخدامات الخاضعة لعقوبات. (I7971c)

  • تغييرات قد تؤدي إلى تغيُّر واجهة برمجة تطبيقات البيئة المحيطة يمكنك الاطّلاع على مستندات "Ambient<T>" والسجلّ للحصول على التفاصيل (I4c7ee، وb/143769776).

  • تمت إضافة ui-livedata: عنصر جديد مزوّد بمحوّل لـ LiveData. مثال على الاستخدام: قيمة val حسب liveData.observeAsState() (Ie9e8c, b/150465596)

  • ويتم إيقاف محوّلات Rx التي لا تتضمّن قيمة أولية صريحة نهائيًا. لا يُعدّ استخدام القيمة "فارغ" الخيار التلقائي الأفضل دائمًا، على سبيل المثال، عندما تكون لديك قائمة، يُفضّل البدء بـ "blankList() " أو أي خيار تلقائي معقول آخر (I00025, b/161348384).

  • تمت إضافة ui-rxjava2 - عنصر جديد مع محوّلات لـ RxJava2. مثال على الاستخدام: قيمة val من خلال observerable.subscribeAsState() (Ifab4b, b/153369097)

  • يمكن الآن استخدام savedInstanceState() مع الأنواع القابلة للقيم الفارغة (I6847f وb/153532190).

  • New listSaver() وmapSaver() لتسهيل كتابة كائنات Saver المخصصة (I8cf68 وb/152331508)

  • الدالتان الجديدتان: savedInstanceState() وYouSavedInstanceState(). هما تتشابه أسماؤهما مع State() وتذكر() ولكنهما يدعمان حالة المثيل المحفوظة فيهما (If1987، b/152025209)

إصلاح الأخطاء

  • تمت إعادة تسمية runOnIdleCompose إلى runOnIdle (I83607).
  • تم تصميم واجهة برمجة التطبيقات LayoutNode تجريبية (I4f2e9)
  • تم إيقاف androidx.ui.foundation.TextFieldValue وandroidx.ui.input.EditorValue نهائيًا. تم أيضًا إيقاف العناصر القابلة للإنشاء TextField وFilledTextField وCoreTextField التي تستخدم هذا النوع. يُرجى استخدام androidx.ui.input.TextFieldValue بدلاً من ذلك (I4066d، وb/155211005)
  • تمت إزالة واجهة برمجة تطبيقات DrawBackground API المتوقّفة لصالح واجهات برمجة التطبيقات لإضافات إضافات drawBackground في Modifier. إعادة ضبط عمليات تنفيذ الألوان والفرشاة والطلاء drawBackground لتقليل مسارات التعليمات البرمجية وإزالة الحاجة إلى إنشاء أداة التعديل كجزء من التركيب. (I0343a)
  • تم تحديث واجهات برمجة التطبيقات التي يتم إنشاؤها على مستوى أعلى والتي تعرض لوحة رسم لعرض CanvasScope بدلاً من ذلك. يلغي ذلك حاجة المستهلكين إلى صيانة كائنات الطلاء الخاصة بهم. بالنسبة إلى المستهلكين الذين ما زالوا يطلبون الوصول إلى لوحة رسم، يمكنهم استخدام طريقة الإضافة drawCanvas التي توفر استدعاء لإصدار أوامر الرسم باستخدام "لوحة الرسم" الأساسية. (I80afd)
  • تم تغيير واجهة برمجة تطبيقات lambda اللاحقة بالقيود الخاصة بالقيود المفروضة على واجهة برمجة تطبيقات lambda. فبدلاً من مَعلمتَين، أصبح لديه نطاق للمستلِم، بالإضافة إلى القيود وLayoutDirection الذي يوفّر خصائص minRate وmaxwidth وminHeight وmaxHeight في Dp (I91b9a، وb/149979702)
  • تمت إضافة أداة تعديل المساحة المتروكة المتماثلة. (I39840)
  • تم تعديل wrapContentwidth وwrapContentHeight لتوقُّع محاذاة رأسية أو أفقية بدلاً من أي محاذاة. تم تحديث معدِّل الجاذبية لقبول المحاذاة العمودية أو الأفقية. تم تحديث الصف والعمود والتكديس لدعم المحاذاة المستمرة المخصصة. (Ib0728)
  • تمت إعادة تسمية وحدة ui-text باسم ui-text-core (I57dec).
  • تحسين واجهة برمجة تطبيقات DrawModifier:
    • تم إنشاء نطاق المُستلِم لـ draw() ContentDrawScope
    • تمت إزالة جميع المعلمات على draw()
    • واجهة DrawScope هي نفس واجهة تطبيق CanvasScope السابق
    • يحتوي ContentDrawScope على طريقة drawContent() (Ibaced، b/152919067)
  • تم إيقاف ColoredRect نهائيًا. يمكنك استخدام Box(Modifier.preferredSize(width, height).drawBackground(color)) كبديل. (I499fa، b/152753731)
  • تم استبدال أداة التعديل بالإضافة إلى عامل التشغيل بوظائف إضافة على الإعدادات الأصلية (I225e4).
  • يمكن الآن الوصول إلى أعضاء RowScope وColumnScope خارج الصف والعمود. (I3a641)
  • تمت إعادة تسمية Layoutflex إلى Layoutweight. تمت إعادة تسمية معلَمة ضيقة للتعبئة. (If4738)
  • حصلت WithConstraints على معلمة LayoutDirection (I6d6f7)
  • تمت إعادة تسمية الخلفية إلى DrawBackground وإدراجها في الذاكرة تلقائيًا (Ia0bd3).
  • تم استبدال ButtonStyle بدوال مميّزة وإزالة الحمل الزائد للنص (السلسلة). يمكنك الاطّلاع على النماذج المعدّلة للحصول على معلومات الاستخدام. (If63ab وb/146478620 وb/146482131)
  • تُعد runOnIdleCompose وrunOnUiThread دوال عمومية الآن بدلاً من طرق في ComposeTestRule. (Icbe8f)

مساهمة خارجية

  • إزالة واجهة برمجة التطبيقات غير اللازمة، مثل Looper وHatler، من طبقة نقل بيئة تشغيل Compose (I6847d)
  • إيقاف Flow<T>.collectAsState() بدون قيمة مبدئية يمكنك استخدام StateFlow<T> أو ضبط قيمة أوّلية صريحة بدلاً من ذلك. (I63f98، b/157674865)