مقدمة:
في هذا الدرس، سنستكشف استخدام عنصر الـ “Slider” في تطبيقات Flutter وكيفية التحكم في القيم وتخصيص مظهره. سنتعرف على دور عنصر الـ “Slider” في تطبيقات Flutter وكيفية استخدامه لضبط قيم متغيرة مثل مستوى الصوت والإضاءة والتأثيرات الأخرى. سنتعلم أيضًا كيفية تخصيص مظهر الـ “Slider” باستخدام الخصائص المختلفة مثل الألوان والشكل والتسمية. من خلال هذا الدرس، ستتمكن من فهم كيفية تطبيق واستخدام عنصر الـ “Slider” بشكل فعال في تطبيقات Flutter وتحقيق التحكم الكامل في القيم المتغيرة في التطبيقات.
Slider in flutter
الـ “Slider” في Flutter هو عنصر واجهة مستخدم يستخدم للتحكم في قيمة رقمية بين قيمتين معينتين عن طريق السحب. عند استخدامه، يمكن للمستخدم سحب المقبض (الشريط) لليمين أو اليسار لتحديد قيمة معينة على مقياس محدد. على سبيل المثال، يمكن استخدامه لضبط مستوى الصوت أو السطوع في التطبيقات، أو لأي استخدام آخر يتطلب تحديد قيمة رقمية بين نطاق معين. في Flutter، يمكن تخصيص الـ “Slider” بشكل كامل ليتناسب مع تصميم التطبيق بواسطة مجموعة متنوعة من الخصائص مثل الألوان والحجم والشكل.
ها هي الخطوات البسيطة لاستخدام عنصر الـ “Slider” في Flutter:
استيراد المكتبات اللازمة: تأكد من استيراد المكتبة الخاصة بـ “Flutter Material” حيث يتوفر عنصر الـ “Slider”.
import 'package:flutter/material.dart';
إنشاء عنصر الـ “Slider” في واجهة المستخدم: يمكنك إنشاء عنصر الـ “Slider” داخل واجهة المستخدم باستخدام واجهة المستخدم الرئيسية لتطبيق Flutter ووضعه في مكان مناسب. على سبيل المثال، يمكنك وضعه داخل عنصر “Column” أو “Row” أو أي واجهة أخرى حسب تصميم التطبيق الخاص بك.
Slider( value: _currentSliderValue, min: 0, max: 100, onChanged: (double value) { setState(() { _currentSliderValue = value; }); }, ),
تحديد القيم الأساسية والحد الأدنى والأقصى للـ “Slider”: في الشيفرة أعلاه، قمنا بتحديد القيمة الحالية لعنصر الـ “Slider” (_currentSliderValue) وتحديد الحد الأدنى (min) والحد الأقصى (max) لقيمة الـ “Slider”.
تحديث القيمة عند التغيير: يتم تحديث القيمة عندما يتم تغيير موضع المقبض (الشريط) عن طريق استخدام وظيفة onChanged. يتم تعيين القيمة الجديدة إلى _currentSliderValue ويتم استدعاء setState() لإعادة بناء واجهة المستخدم بما في ذلك القيمة الجديدة.
استخدام القيمة المحدثة: يمكنك استخدام القيمة المحدثة (_currentSliderValue) في التطبيق بحسب الحاجة، مثلاً لضبط مستوى الصوت أو حجم النص أو أي استخدام آخر يتطلب قيمة رقمية.
هذه هي الخطوات الأساسية لاستخدام عنصر الـ “Slider” في تطبيق Flutter. يمكنك تخصيص الـ “Slider” بمزيد من الخصائص مثل الألوان والحجم وغيرها لتناسب تصميم تطبيقك بشكل أفضل.
بالطبع، هيا بنا نقوم بإنشاء تطبيق بسيط يستخدم عنصر الـ “Slider” في Flutter. في هذا التطبيق، سنقوم بإنشاء عنصر “Slider” لضبط مستوى الصوت.
الخطوات:
إنشاء مشروع جديد في Flutter:
يمكنك إنشاء مشروع جديد Flutter باستخدام أحد محررات النص مثل Visual Studio Code أو Android Studio. يمكنك استخدام الأمر التالي في الطرفية:
flutter create slider_app
حيث “slider_app” هو اسم المشروع.
فتح ملف main.dart:
قم بفتح الملف main.dart الذي يقع داخل مجلد المشروع وقم بتعديله.
إضافة استيرادات المكتبات اللازمة:
ضمن الملف main.dart، أضف استيرادات المكتبات اللازمة:
import 'package:flutter/material.dart';
إنشاء الواجهة الرئيسية:
ضمن الدالة ()main, قم بإنشاء واجهة المستخدم الرئيسية للتطبيق باستخدام MaterialApp و Scaffold:
void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Slider App', theme: ThemeData( primarySwatch: Colors.blue, ), home: MySliderApp(), ); } }
إنشاء واجهة المستخدم الخاصة بتطبيق الـ Slider:
قم بإنشاء واجهة المستخدم لتطبيق الـ Slider في صفحة جديدة. يمكنك تسميتها MySliderApp وإضافة عنصر Slider إليها.
class MySliderApp extends StatefulWidget { @override _MySliderAppState createState() => _MySliderAppState(); } class _MySliderAppState extends State<MySliderApp> { double _currentSliderValue = 50; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Slider App'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Volume: $_currentSliderValue', style: TextStyle(fontSize: 20.0), ), SizedBox(height: 20.0), Slider( value: _currentSliderValue, min: 0, max: 100, onChanged: (double value) { setState(() { _currentSliderValue = value; }); }, ), ], ), ), ); } }
الكود النهائي:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Slider App', theme: ThemeData( primarySwatch: Colors.blue, ), home: MySliderApp(), ); } } class MySliderApp extends StatefulWidget { @override _MySliderAppState createState() => _MySliderAppState(); } class _MySliderAppState extends State<MySliderApp> { double _currentSliderValue = 50; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Slider App'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Volume: $_currentSliderValue', style: TextStyle(fontSize: 20.0), ), SizedBox(height: 20.0), Slider( value: _currentSliderValue, min: 0, max: 100, onChanged: (double value) { setState(() { _currentSliderValue = value; }); }, ), ], ), ), ); } }
تشغيل التطبيق:
نقم بتشغيل التطبيق على محاكي الجهاز أو جهازك الفعلي باستخدام الأمر:
flutter run
وسترى تطبيق الـ Slider الخاص بك، يمكنك سحب المقبض لضبط مستوى الصوت.
هذه هي الخطوات الكاملة لإنشاء تطبيق بسيط باستخدام عنصر الـ “Slider” في Flutter.
شرح الكود:
ها هو الكود الذي شرحته مقسمًا إلى أقسام معنونة:الشرح داخل التعليقات
// 1. استيراد المكتبات الضرورية import 'package:flutter/material.dart'; // 2. دالة الـ main لتشغيل التطبيق void main() { runApp(MyApp()); } // 3. تعريف فئة التطبيق الرئيسية class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // 4. إنشاء تطبيق Flutter مع MaterialApp return MaterialApp( title: 'Slider App', theme: ThemeData( primarySwatch: Colors.blue, ), // 5. تعيين صفحة البداية للتطبيق home: MySliderApp(), ); } } // 6. تعريف فئة واجهة المستخدم الخاصة بالـ Slider class MySliderApp extends StatefulWidget { @override _MySliderAppState createState() => _MySliderAppState(); } // 7. تعريف الحالة لواجهة المستخدم الخاصة بالـ Slider class _MySliderAppState extends State<MySliderApp> { // 8. تعريف قيمة الـ Slider الحالية double _currentSliderValue = 50; @override Widget build(BuildContext context) { // 9. بناء واجهة المستخدم return Scaffold( appBar: AppBar( title: Text('Slider App'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ // 10. عرض قيمة الـ Slider الحالية Text( 'Volume: $_currentSliderValue', style: TextStyle(fontSize: 20.0), ), SizedBox(height: 20.0), // فصل بين النص والـ Slider // 11. إنشاء عنصر الـ Slider Slider( value: _currentSliderValue, min: 0, max: 100, // 12. التفاعل مع تغييرات الـ Slider وتحديث قيمته onChanged: (double value) { setState(() { _currentSliderValue = value; }); }, ), ], ), ), ); } }
هذه الأسطر توضح معنى ووظيفة كل جزء من الكود في التطبيق، وهو مفيد لتفهم كيفية عمل التطبيق وبناؤه.
شجرة العناصر لهذا التطبيق
شجرة العناصر (Widget tree) توضح كيفية تركيب العناصر المختلفة في التطبيق وتداخلها. هنا شجرة العناصر لتطبيقنا:
MaterialApp └─ MySliderApp └─ Scaffold ├─ AppBar │ └─ Text └─ Center └─ Column ├─ Text ├─ SizedBox └─ Slider
وهذا يعني أنه يوجد تطبيق يحتوي على عنصر MySliderApp الذي يتضمن واجهة المستخدم الخاصة بتطبيق الـ Slider. داخل Scaffold، يتم وضع AppBar في أعلى الصفحة يحتوي على عنوان التطبيق. أسفل الـ AppBar، يوجد Center يحتوي على Column لتنظيم العناصر بشكل رأسي. داخل Column، يتم وضع Text لعرض قيمة الـ Slider وSizedBox لإضافة مسافة بين النص والـ Slider، وأخيرًا يتم وضع Slider نفسه لضبط قيمة الصوت.
عنصر الـ “Slider” في Flutter يأتي مع العديد من الخصائص التي يمكن تخصيصها لتناسب احتياجات تطبيقك. إليك قائمة بأهم الخصائص والوظائف لعنصر الـ “Slider”:
value: القيمة الحالية للـ “Slider”.
min: الحد الأدنى للقيمة التي يمكن أن يصل إليها الـ “Slider”.
max: الحد الأقصى للقيمة التي يمكن أن يصل إليها الـ “Slider”.
onChanged: دالة تُستدعى عندما يتم تغيير قيمة الـ “Slider”.
onChangeStart: دالة تُستدعى عندما يبدأ المستخدم في تغيير قيمة الـ “Slider”.
onChangeEnd: دالة تُستدعى عندما ينتهي المستخدم من تغيير قيمة الـ “Slider”.
divisions: يقوم بتقسيم نطاق القيم بين الحد الأدنى والأقصى إلى عدد معين من القطاعات.
label: تسمية تظهر أثناء التفاعل مع الـ “Slider”.
activeColor: لون المسار النشط للـ “Slider”.
inactiveColor: لون المسار الغير نشط للـ “Slider”.
thumbColor: لون المقبض (الشريط) في الـ “Slider”.
thumbShape: شكل المقبض (الشريط) في الـ “Slider”.
overlayColor: لون الغطاء الذي يظهر عند التفاعل مع الـ “Slider”.
overlayShape: شكل الغطاء الذي يظهر عند التفاعل مع الـ “Slider”.
mouseCursor: تحديد المؤشر الماوس الذي يستخدم لتشغيل الـ “Slider”.
تمثل هذه الخصائص والوظائف الأساسية مجموعة متنوعة من الإعدادات التي يمكنك استخدامها لتخصيص وظهور عنصر الـ “Slider” في تطبيقك بالطريقة التي تراها مناسبة.
سنقوم بإنشاء تطبيق Flutter يستخدم عنصر الـ “Slider” مع استخدام مجموعة من الخصائص والوظائف. سنقوم بإنشاء تطبيق يتيح للمستخدم ضبط مستوى الصوت باستخدام الـ “Slider” وعرض قيمة الصوت المحدثة وتخصيص المظهر ببعض الخصائص المختلفة.
ها هي الخطوات:
إنشاء مشروع Flutter جديد:
قم بإنشاء مشروع Flutter جديد باستخدام أداة Flutter SDK.
flutter create slider_app
فتح ملف main.dart:
قم بفتح الملف main.dart داخل مجلد المشروع.
تحديث ملف main.dart:
قم بتحديث الملف main.dart ليتضمن التطبيق الجديد.
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Slider App', theme: ThemeData( primarySwatch: Colors.blue, ), home: MySliderApp(), ); } } class MySliderApp extends StatefulWidget { @override _MySliderAppState createState() => _MySliderAppState(); } class _MySliderAppState extends State<MySliderApp> { double _currentSliderValue = 50; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Volume Control'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'Volume: ${_currentSliderValue.toInt()}', style: TextStyle(fontSize: 20.0), ), SizedBox(height: 20.0), Slider( value: _currentSliderValue, min: 0, max: 100, divisions: 5, label: _currentSliderValue.round().toString(), onChanged: (double value) { setState(() { _currentSliderValue = value; }); }, activeColor: Colors.blue, inactiveColor: Colors.grey, thumbColor: Colors.blue, overlayColor: MaterialStateProperty.resolveWith<Color?>( (Set<MaterialState> states) { if (states.contains(MaterialState.pressed)) { return Colors.blue.withOpacity(0.3); } return Colors.blue.withOpacity(0.1); }, ), ), ], ), ), ); } }
تشغيل التطبيق:
نقم بتشغيل التطبيق على محاكي الجهاز أو جهازك الفعلي.
ما الذي قمنا به هنا؟
قمنا بتعريف تطبيق Flutter الأساسي وواجهة المستخدم الرئيسية (MyApp).
قمنا بإنشاء واجهة المستخدم الخاصة بتطبيق الـ “Slider” (MySliderApp) كفئة تستخدم StatefulWidget.
داخل MySliderApp، قمنا بتعريف متغير _currentSliderValue لتتبع قيمة الـ “Slider”.
استخدمنا عنصر Slider لتمثيل قيمة الصوت والسماح للمستخدم بضبطه.
قمنا بتخصيص مظهر الـ “Slider” باستخدام الخصائص المختلفة مثل الألوان وعدد القطاعات والتسمية.
قمنا بعرض قيمة الصوت المحدثة ديناميكيًا داخل نص بجانب الـ “Slider”.
هذا التطبيق يوضح كيفية استخدام العديد من خصائص ووظائف عنصر الـ “Slider” في تطبيق Flutter. يمكنك تعديله وتخصيصه حسب احتياجاتك الخاصة.
سنقوم بإنشاء تطبيق متقدم يستخدم عنصر الـ “Slider” بشكل أكثر تعقيدًا. سنقوم بإنشاء تطبيق يمكن فيه المستخدم من خلال الـ “Slider” تخصيص تأثيرات الصوت المختلفة مثل مستوى الصوت، والباس، والتردد.
هاكم الشيفرة:
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Audio Effects', theme: ThemeData( primarySwatch: Colors.blue, ), home: AudioEffectsApp(), ); } } class AudioEffectsApp extends StatefulWidget { @override _AudioEffectsAppState createState() => _AudioEffectsAppState(); } class _AudioEffectsAppState extends State<AudioEffectsApp> { double _volume = 50; double _bass = 50; double _treble = 50; @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Audio Effects'), ), body: Padding( padding: EdgeInsets.all(20.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ _buildSlider('Volume', _volume, (value) { setState(() { _volume = value; }); }), _buildSlider('Bass', _bass, (value) { setState(() { _bass = value; }); }), _buildSlider('Treble', _treble, (value) { setState(() { _treble = value; }); }), ], ), ), ); } Widget _buildSlider(String label, double value, Function(double) onChanged) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ Text( label, style: TextStyle(fontSize: 20.0), ), Slider( value: value, min: 0, max: 100, divisions: 5, onChanged: onChanged, label: value.round().toString(), ), SizedBox(height: 20.0), ], ); } }
هذا التطبيق يسمح للمستخدم بضبط ثلاثة تأثيرات صوتية مختلفة: مستوى الصوت، الباس، والتريبل. كل تأثير له Slider مستقل لضبط القيمة.
شرح الكود:
هاكم شرح الشيفرة مع عناوين لكل قسم داخل التعليقات:
// 1. استيراد المكتبات اللازمة import 'package:flutter/material.dart'; // 2. دالة الـ main لتشغيل التطبيق void main() { runApp(MyApp()); } // 3. تعريف فئة التطبيق الرئيسية class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { // 4. إنشاء تطبيق Flutter مع MaterialApp return MaterialApp( title: 'Audio Effects', // 5. عنوان التطبيق theme: ThemeData( primarySwatch: Colors.blue, ), // 6. تعيين صفحة البداية للتطبيق home: AudioEffectsApp(), ); } } // 7. تعريف فئة واجهة المستخدم الرئيسية لتطبيق التأثيرات الصوتية class AudioEffectsApp extends StatefulWidget { @override _AudioEffectsAppState createState() => _AudioEffectsAppState(); } // 8. تعريف الحالة لواجهة المستخدم الرئيسية class _AudioEffectsAppState extends State<AudioEffectsApp> { double _volume = 50; // 9. قيمة مستوى الصوت الافتراضية double _bass = 50; // 10. قيمة الباس الافتراضية double _treble = 50; // 11. قيمة التريبل الافتراضية @override Widget build(BuildContext context) { // 12. بناء واجهة المستخدم return Scaffold( appBar: AppBar( title: Text('Audio Effects'), // 13. عنوان الشريط العلوي ), body: Padding( padding: EdgeInsets.all(20.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ // 14. إنشاء وعرض عناصر الـ Slider _buildSlider('Volume', _volume, (value) { setState(() { _volume = value; }); }), _buildSlider('Bass', _bass, (value) { setState(() { _bass = value; }); }), _buildSlider('Treble', _treble, (value) { setState(() { _treble = value; }); }), ], ), ), ); } // 15. دالة لإنشاء عنصر Slider Widget _buildSlider(String label, double value, Function(double) onChanged) { return Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ // 16. عنوان الـ Slider Text( label, style: TextStyle(fontSize: 20.0), ), // 17. إنشاء وعرض عنصر Slider Slider( value: value, // 18. قيمة الـ Slider min: 0, // 19. الحد الأدنى للقيمة max: 100, // 20. الحد الأقصى للقيمة divisions: 5, // 21. عدد الأقسام onChanged: onChanged, // 22. التفاعل مع تغييرات القيمة label: value.round().toString(), // 23. تسمية القيمة ), SizedBox(height: 20.0), // 24. مسافة بين عناصر الـ Slider ], ); } }
هذه العناوين تساعد في فهم كل قسم في الشيفرة ودوره في تطبيق التأثيرات الصوتية.
شجرة العناصر لهذا التطبيق
شجرة العناصر (Widget tree) لتطبيق التأثيرات الصوتية تبدو كالتالي:
MaterialApp └─ AudioEffectsApp └─ Scaffold ├─ AppBar │ └─ Text └─ Padding └─ Column └─ Column (Volume Slider) ├─ Text └─ Slider └─ Column (Bass Slider) ├─ Text └─ Slider └─ Column (Treble Slider) ├─ Text └─ Slider
هذه الشجرة توضح تنظيم وتركيب العناصر داخل التطبيق، حيث يتكون التطبيق من مكون رئيسي MaterialApp يحتوي على واجهة المستخدم الرئيسية AudioEffectsApp. داخل AudioEffectsApp، يتم استخدام Scaffold لتنظيم العناصر. يحتوي Scaffold على AppBar لعرض العنوان وPadding لإضافة حواف داخلية. داخل Padding، يتم استخدام Column لترتيب العناصر بشكل عمودي.
تحتوي كل من الـ Column الثلاثة داخل الـ Column الرئيسية على عنصر Text لعرض عنوان الـ Slider و Slider نفسه لضبط قيمة التأثير الصوتي (مستوى الصوت، الباس، والتريبل).
تشغيل التطبيق:
هاكم بعض الأسئلة التي يمكن استخدامها لاختبار فهم الدرس حول استخدام عنصر الـ “Slider” في تطبيقات Flutter:
يتيح للمستخدم ضبط قيمة رقمية متغيرة بين قيمتين محددتين.
value
min
max
onChanged
يتم تعيين قيمة الـ “Slider” على مستوى الصوت الحالي، واستخدام onChanged لتحديث مستوى الصوت عند تغيير المستخدم للقيمة.
تقسيم نطاق القيمة إلى عدد معين من الأقسام المتساوية، مما يسهل على المستخدم تحديد القيم بدقة.
يمكن تخصيص الألوان والشكل والعديد من الخصائص الأخرى مثل thumbColor، activeColor، inactiveColor، وغيرها.
تُستخدم لعرض تسمية للقيمة المحددة على الـ “Slider” أثناء التفاعل معه.
تُستخدم لتحديث قيمة المتغيرات أو الحالة في التطبيق عندما يقوم المستخدم بتغيير قيمة الـ “Slider”.
تحديد قيم الحد الأدنى والأقصى للـ “Slider”.
تعيين قيمة افتراضية للـ “Slider”.
تحديد دالة onChanged لتحديث قيمة المتغير عندما يتم تغيير الـ “Slider”.
يسمح لتخصيص مظهر عناصر الـ “Slider” بشكل عام في التطبيق، مثل الألوان والشكل وغيرها، وذلك باستخدام محور ThemeData.
يمكن استخدام دوال الرياضيات لتعديل قيمة الـ “Slider” مثل الضرب في عامل معين أو إضافة قيمة ثابتة لتطبيق تأثيرات تصفية أو تحويرات عليها.
الإجابات على الأسئلة:
خاصية label في عنصر الـ “Slider” تُستخدم لعرض تسمية للقيمة المحددة على الـ “Slider” أثناء التفاعل معه.
خاصية onChanged في عنصر الـ “Slider” تُستخدم لتحديث قيمة المتغيرات أو الحالة في التطبيق عندما يقوم المستخدم بتغيير قيمة الـ “Slider”.
الخطوات الأساسية لإنشاء عنصر الـ “Slider” في تطبيق Flutter تشمل:
تحديد قيم الحد الأدنى والأقصى للـ “Slider”.
تعيين قيمة افتراضية للـ “Slider”.
تحديد دالة onChanged لتحديث قيمة المتغير عندما يتم تغيير الـ “Slider”.
دور العنصر SliderTheme في تطبيقات Flutter هو تمكين تخصيص مظهر عناصر الـ “Slider” بشكل عام في التطبيق، مثل الألوان والشكل وغيرها، وذلك باستخدام محور ThemeData.
يمكن إضافة تأثيرات تصفية أو تحويرات على قيمة الـ “Slider” في تطبيق Flutter بالاعتماد على الدوال الرياضيات لتعديل قيمة الـ “Slider”، مثل الضرب في عامل معين أو إضافة قيمة ثابتة لتطبيق تأثيرات تصفية أو تحويرات عليها.
هذه الإجابات توضح الأفكار الرئيسية والمفاهيم حول عنصر الـ “Slider” في تطبيقات Flutter وكيفية استخدامه وتخصيصه بشكل فعال.