شارك المقالة
تعرف على كيفية استخدام Flutter Shaders لإنشاء تأثيرات بصرية احترافية مثل Motion Blur و RGB Split مع شرح عملي للكود وتحسين أداء التطبيق بسهولة.

دليل احترافي لاستخدام Flutter Shaders لإنشاء تأثيرات بصرية مذهلة (Motion Blur و RGB Split)

دليل احترافي لاستخدام Flutter Shaders لإنشاء تأثيرات بصرية مذهلة


إذا كنت ترغب في إضافة تأثيرات بصرية متقدمة إلى تطبيق Flutter الخاص بك مثل ضبابية الحركة (Motion Blur) أو تأثير RGB Split، فإن مكتبة Flutter Shaders توفر لك أدوات قوية لإنشاء تجربة مستخدم احترافية ومبهرة بسهولة.

في هذا الدليل سنشرح كيفية استخدام Flutter Shaders خطوة بخطوة، مع تطبيق عملي لتأثير Motion Blur وشرح أهم المفاهيم المرتبطة بها.

ما هي مكتبة Flutter Shaders؟

مكتبة Flutter Shaders هي أداة قوية تتيح للمطورين استخدام التظليل (Shaders) لإنشاء تأثيرات رسومية متقدمة داخل تطبيقات Flutter.

تساعدك هذه المكتبة على إضافة تأثيرات مثل:
– تشتت الألوان (RGB Split) – ضبابية الحركة (Motion Blur) – تأثيرات بصرية ديناميكية

وهي مثالية للتطبيقات التي تحتاج إلى تجربة مستخدم حديثة وجذابة.

ما هو ShaderProvider ولماذا نحتاجه؟

يُعد ShaderProvider مكونًا مهمًا يعتمد على InheritedWidget، ويستخدم لتوفير التظليل داخل شجرة التطبيق بحيث يمكن الوصول إليه بسهولة من أي Widget.


class ShaderProvider extends InheritedWidget {
  const ShaderProvider({
    super.key,
    required this.shader,
    required super.child,
  });

  final ShaderCollection shader;

  static ShaderCollection of(BuildContext context) {
    final provider =
    context.dependOnInheritedWidgetOfExactType();
    return provider!.shader;
  }

  @override
  bool updateShouldNotify(covariant ShaderProvider oldWidget) {
    return oldWidget.shader != shader;
  }
}

شرح الكود

– يعتمد ShaderProvider على InheritedWidget لمشاركة التظليل عبر التطبيق – يمكن الوصول إلى ShaderCollection بسهولة من أي عنصر – يتم إعادة البناء فقط عند تغيير القيم لتحسين الأداء

ما هو ShaderCollection؟

ShaderCollection هو كلاس يحتوي على مجموعة من التأثيرات (Shaders) مثل:
– Motion Blur – RGB Split

ويساعدك على تنظيم وإدارة التظليلات داخل التطبيق بشكل احترافي.

طريقة تنفيذ ShaderProvider في التطبيق


import 'dart:ui' as ui;

void main() async {

  WidgetsFlutterBinding.ensureInitialized();
  final motionBlurDistortionShader = await ui.FragmentProgram.fromAsset('lib/widgets/blur.frag');

  runApp(MyApp(design: motionBlurDistortionShader));
}

class MyApp extends StatelessWidget {
  final FragmentProgram design;
  const MyApp({super.key,required this.design});

  @override
  Widget build(BuildContext context) {

    return ShaderProvider(
        shader: ShaderCollection(
        motionBlurDistortionShader: design,
          rgbSplitDistortionShader: design,
    ),
      child: MaterialApp(
          title: 'My Application Test',
          home: const MotionBlurDistortionPage(),
      ),
    );
  }
}

تطبيق تأثير Motion Blur في Flutter

تأثير Motion Blur هو تأثير بصري يجعل العناصر تبدو وكأنها تتحرك بسلاسة عبر تشويش الصورة بناءً على سرعة الحركة.


class MotionBlurDistortionPage extends StatefulWidget {
  const MotionBlurDistortionPage({super.key});

  @override
  State createState() =>
      _MotionBlurDistortionPageState();
}

class _MotionBlurDistortionPageState extends State {
  late final ScrollController _controller;
  ui.Image? previosImage;
  double offset = 0;
  double velocity = 0;

  @override
  void initState() {
    super.initState();
    _controller = ScrollController()
      ..addListener(scrollListener)
      ..addListener(() {
        if (!_controller.position.isScrollingNotifier.value) {
          setState(() {
            previosImage = null;
            velocity = 0;
          });
        }
      });
  }

  void scrollListener() {
    velocity = offset - _controller.offset;
    offset = _controller.offset;
  }
}

ملف Shader (blur.frag)


#version 460 core
#include <flutter/runtime_effect.glsl>

uniform vec2 u_size;
uniform vec2 u_velocity;
uniform sampler2D u_texture;

out vec4 frag_color;

void main() {
    const int q = 24;
    vec2 p = FlutterFragCoord().xy / u_size;
    vec2 v = u_velocity / (u_size * 2.0);

    float o = -pow((p.y * 2.0) - 1.0, 6.0) + 1.0;
    vec4 new_p = vec4(0.0);

    for (int i = 0; i < q; i++) {
        float offset_x = (o - 1.0) * length(v.y) * 6.0 * (p.x - 0.5);
        vec2 sample_pos = vec2(p.x + offset_x + (v.x * float(i)) / float(q), p.y + 0.01 + (v.y * float(i)) / float(q));
        new_p += texture(u_texture, sample_pos);
    }

    new_p /= float(q);
    frag_color = new_p;
}

إضافة ملف Shader في pubspec.yaml


flutter:

  shaders:
    - lib/widgets/blur.frag

نصائح لتحسين أداء Flutter Shaders

– إعادة استخدام الشيدر بدلاً من إنشائه في كل مرة – تقليل العمليات الحسابية داخل Shader – اختبار الأداء على أجهزة مختلفة – استخدام shaders محلية لتقليل استهلاك الموارد

أفضل استخدامات Flutter Shaders

– تطبيقات الألعاب – تطبيقات الصور والفيديو – تطبيقات UI الحديثة – تطبيقات تحتوي على Animations متقدمة

الخلاصة

تمنحك مكتبة Flutter Shaders القدرة على إنشاء تأثيرات بصرية مذهلة داخل تطبيقك بسهولة ومرونة.

سواء كنت ترغب في إضافة Motion Blur أو RGB Split، يمكنك تحسين تجربة المستخدم بشكل كبير دون تعقيد كبير في الكود.

إذا كنت تسعى لبناء تطبيق احترافي بواجهة حديثة، فإن استخدام Shaders في Flutter خطوة قوية تستحق التجربة.

لمزيد من الدروس المتقدمة في Flutter تابع مقالاتنا القادمة , وايضا يمكنك مشاهده المقاله التاليه : اضافه تاثيرات حركيه (Animations) على النصوص في Flutter
شاهد أيضًا
مقالات ذات صلة
خطوات بسيطة لتنفيذ قواعد البيانات في Android مع Room وHilt

إتقان Room وHilt: أدوات فعالة لقواعد البيانات في Android إتقان التعامل مع قواعد البيانات في…

كيف تقوم باخفاء AppBar اثناء النزول الى الاسفل في اندرويد ستوديو – how to hide Appbar on scroll android studio

كيفية اظهار واخفاء appbar في اندرويد ستوديو اثناء عمل scrolling down.في كثر من الاحيان اثناء…

كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام مستشعر القرب (مثل تطبيق الاتصال تمامًا!)
كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام proximity sensor (مثل تطبيق الاتصال تمامًا!)

كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام proximity sensor لمحاكاة قفل الشاشة يُعد…

🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع