Liquid Glass Easy

الاستخدام الكفء

اختر القطعة الصحيحة، وتتكفّل الكلفة بنفسها في الغالب.

معظم مشكلات أداء الزجاج ليست مشكلات ضبط، بل عنصرٌ يؤدي عملاً بُني له عنصر أرخص. هذه الصفحة هي ذلك القرار.

ابدأ مما تبنيه#

ما تريدهمدّ يدك إلىلماذا
زجاج يجب أن يكون رخيصاً، وجاهزاً للنشرالزجاج الخفيفأكفأ قطعة هنا: لا شيدر ولا التقاط ولا ميزانية عدسات. صقيع ولون وحافة مضاءة، مرسومة من هندسة اللوحة العادية. على Skia والويب ضع التطبيق كله عليه (LiquidGlassEngine.liteGlassOnSkia = true) وانشر — فلا خلفية تُلتقط ولا أداء يُقلقك. وعلى أيٍّ من المحركين، الزر الملوَّن أو البطاقة ذات الحافة التي لا تحتاج أن تثني شيئاً تسمّي LiquidGlassLitePickup في liteGlass نمطها، بدل شيدر الخلفية على Impeller أو الخلفية الملتقَطة على Skia.
لوح واحد يطفو فوق صفحةLiquidGlassLensقراءة واحدة وشيدر واحد — ومروران على Impeller حين يضبّب. لا شيء يتفوّق عليه في الانكسار.
شريط وصفحة وتبويباتLiquidGlassScaffoldعلى Skia يلتقط الجسم مرة واحدة لكل العدسات التي تحته. وعلى Impeller لا التقاط إطلاقاً، ويُجمّع عناصر واجهته في قراءة واحدة. والتكيّف موصول فيه على المحركين.
زجاجات كثيرةالدفعةأي عدد من العدسات بكلفة قراءة واحدة — على Impeller. أما على Skia فالعارض يلتقط مرة واحدة لها كلها أصلاً، فالدفعة هناك خاملة لا خاطئة.
عنقود ينبغي أن يُقرأ لوحاً واحداًالانصهار مع smoothness: 0سطح واحد ومادة واحدة وقراءة واحدة — حتى ثمانية أعضاء. وكان LiquidGlassGroup هذا بعينه، وهو مهمَل الآن.
شكلان ينبغي أن يذوبا معاًالانصهارالجسر الكروي هو المقصود كله.
عنصر يتغيّر حجمه بتغيّر محتواهالتحوّليقيس الابن. والكتلتان مرورٌ واحد للمازج، لكن بشيدر أثقل من شيدر العدسة — وLiquidGlassMorphMotion.plain عدسة واحدة على نابض واحد، حين لا تحتاج الخصر.
مزلاج أو مفتاحLiquidGlassSlider / LiquidGlassSwitchمكتفيان بذاتيهما. على Impeller يقرأ المقبض الخلفية الحية ولا يُلتقط شيء؛ وعلى Skia يأخذ عارضهما الصغير لقطة واحدة للمسار ولا يعمل حياً إلا ما دام المقبض ممسوكاً. ولا تُلتقط صفحتك أبداً.

السؤال الوحيد المهم على Skia#

هل تتحرك الخلفية فعلاً؟ على Impeller تقرأ العدسة الخلفية الحية ولا التقاط يُفكَّر فيه. أما على Skia والويب فالغالي هو رسم الخلفية ليجد الشيدر ما يقرؤه — وفعل ذلك ستين مرة في الثانية لتدرّج لا يتغيّر أبداً هو أشيع هدر في واجهة زجاجية.

Dart
// A background that never changes: one snapshot, refracted forever.
final controller = LiquidGlassViewController();

LiquidGlassView(
  controller: controller,
  backgroundWidget: const MyGradient(),
  realTimeCapture: false,
  child: const MyGlassUI(),
);

// …and again only when the background genuinely changed:
await controller.captureOnce();
  • تدرّج مرسوم أو صورة أو رسم ثابت ← التقاط واحد.
  • قائمة تنساب أو فيديو أو خلفية متحركة ← أبقِه حياً.
  • خلفية تتغيّر نادراً ← التقاط واحد، ثم captureOnce() مرة أخرى حين تتغيّر فعلاً.

قائمة تحقّق قبل النشر#

  • هل يلتقط شيء لا حاجة له بذلك؟ LiquidGlassView واحد لكل شاشة، لا واحد لكل عنصر. والمزلاج والمفتاح يجلبان عارضهما الصغير: عارضٌ حول الصفحة لا بأس به، وعارضٌ حول كل عنصر لا حاجة إليه. وإن استغنت الصفحة عن الانكسار فالزجاج الخفيف لا يلتقط شيئاً إطلاقاً.
  • هل ما زال `pixelRatio` عند `1.0`؟ الزجاج يثني ويضبّب ما يقرؤه، فيخفي الالتقاط الناعم جيداً. و0.7 غير مرئي عادةً وأرخص بوضوح.
  • هل تؤدي الضبابية عملاً لا تراه؟ على Skia، الضبابية أغلى مقابض المظهر على مسار الالتقاط، وفوق 7 تقريباً تكفّ عن الظهور كضبابية خلفية حقيقية.
  • هل تستحق الحبة المتحولة خط رسمها الثاني؟ LiquidGlassPillMode.impellerOnly يمنحك الحبة الكاملة حيث تكون مجانية والإبراز الخفيف في كل مكان آخر — إلا إن كان التطبيق على الزجاج الخفيف، فهناك لا يكلّف both شيئاً على Skia أيضاً.
  • هل تتراكب عدسات داخل دفعة؟ يجب ألا تفعل. أخرِج المتراكبة بـ LiquidGlassBatch.exclude.

أخطاء تبدو كأنها عِلل#

العَرَضالسبب
الزجاج ضبابية مصنفرة مسطّحة بلا ثني.على Skia أو الويب بلا LiquidGlassView أب. لا يوجد ما يُكسر فيتراجع — ويقول ذلك مرة في وحدة التنقيح. والمظهر نفسه بلا تنبيه هو الزجاج الخفيف عن قصد، أو أول عدسة في التطبيق بينما يُترجَم شيدرها.
الزجاج يكسر نسخة قديمة من الصفحة.realTimeCapture: false بلا captureOnce() بعد تغيّر الخلفية.
عدستان في دفعة تبدوان واحدة.إنهما متراكبتان. فكل عضو يعاين النسخة نفسها المأخوذة قبل أن يرسم أيٌّ منهم، فلا ترى العليا زجاج السفلى.
عدسة داخل قائمة تسودّ بينما تُسحب القائمة إلى ما بعد نهايتها (Impeller).يرسم تمدّد التمرير الزائد في Android العنصرَ القابل للتمرير في نسيج خاص به، يحمل ما رسمته القائمة لا الصفحة التي تحتها. وتحتفظ العدسة بمكانها وتكسر ذلك — سوداء حيثما كانت القائمة فارغة خلفها، ما دام السحب مستمراً. فإن ظهر ذلك، أزل مؤشّر التمرير الزائد عن القوائم التي تحمل عدسات.
التحوّل لا يتحرك حين يتغيّر المحتوى.الأبناء بلا مفاتيح، فالابن الذي احتفظ بنوعه لم يُرَ جديداً.

مجاني بحكم البناء#

  • touch: null — وهو الافتراضي — لا يضيف مستمعاً ولا مؤقتاً.
  • visibility: false يزيل كلفة الخلفية فوراً، ومعها الابن.
  • التكيّف لا يعاين إلا بينما يوجد شيء متكيّف على الشاشة، ببضعة كيلوبايتات وثماني مرات في الثانية على الأكثر — ولا يعاين إطلاقاً ما دامت لا إطارات تُرسم.
  • LiquidGlassSlider وLiquidGlassSwitch لا يلتقطان صفحتك أبداً: لا شيء إطلاقاً على Impeller، ولقطة واحدة لمسارهما على Skia.
  • الزجاج الخفيف — عدسة واحدة، أو التطبيق كله لكل محرك — لا يترجم شيدراً ولا يأخذ التقاطاً ولا يشغل مقعد عدسة.

التعليقات

التعليقات هي مناقشات GitHub — يمكنك الرد من أيٍّ من المكانين.