Categories: فلاتر

ساخت RangeSlider متریال در فلاتر

در ورژن 1.7 فریمورک فلاتر ویجت جدیدو جالبی به نام RangeSlider  را معرفی کرد که به کاربر امکان این را میدهد بین دو رنج مقدار مختلف انتخاب انجام دهد.

مانند وب سایت های فروشگاهی که میتوانید رنج قیمت محصولات و فیلتر گذاری کنید تا نتایج بهتری را مشاهده کنید.

در این مطلب نحوه استفاده از کامپوننت متریال دیزاین RangeSlider  و همچنین چگونگی شخصی سازی آن را باهم بررسی میکنیم.

بخش های ویجت RangeSlider

ویجت range slider دارای دو نقطه مهم می باشد که کمترین و بیشترین مقدار رنج را مشخص می کند. در واقع ابتدا باید بازه مقدار را مشخص کنیم.

در تصویر زیر بخش های اصلی RangeSlider  را مشاهده می کنید.

  1. مسیر و حد فاصل بین دو نقطه
  2. تیک مارک, در اسلایدر هایی که بخش بخش هستند.
  3. دکمه هایی که هم بصورت تکی و هم به صورت دوتایی برای تعیین بیشترین و کمترین مقدار استفاده می شود.
  4. مقدار شاخص که به همراه یک برچسب نمایش داده می شود.
  5. افکت ریپل که موقع لمس کردن نمایش داده می شود.

طراحی تولبار در Flutter

مقدار ا نتخابی range slider در یک state ذخیره میشه و با هر بار صدا زدن متد onChange() این مقدار آپدیت می شود.

پس برای استفاده از آن باید یک statefullwidget داشته باشیم.

 RangeValues _values = RangeValues(0.3, 0.7);

RangeSlider(
  values: _values,
  onChanged: (RangeValues values) {
    setState(() {
      _values = values;
    });
  },
);

برای شخصی سازی شکل رنج بار باید بدونید که این ویجت از RenderBox استفاده میکنه که تمام 5 قسمت مختلف ویجت توسط این ویژگی ساخته می شود.

برای مثال اگر میخواهید شکل دکمه های رنج اسلایدر را در فلاتر تغییر بدید میتونید از کد زیر کمک بگیرید.

 
class _CustomRangeThumbShape extends RangeSliderThumbShape {
  static const double _thumbSize = 4.0;

  @override
  Size getPreferredSize(bool isEnabled, bool isDiscrete) ()=> _thumbSize;

  @override
  void paint(
    PaintingContext context,
    Offset center, {
    @required Animation<double> activationAnimation,
    @required Animation<double> enableAnimation,
    bool isDiscrete = false,
    bool isEnabled = false,
    bool isOnTop,
    @required SliderThemeData sliderTheme,
    TextDirection textDirection,
    Thumb thumb,
  }) {
    final Canvas canvas = context.canvas;

    Path thumbPath;
    switch (textDirection) {
      case TextDirection.rtl:
        switch (thumb) {
          case Thumb.start:
            thumbPath = _rightTriangle(_thumbSize, center);
            break;
          case Thumb.end:
            thumbPath = _leftTriangle(_thumbSize, center);
            break;
        }
        break;
      case TextDirection.ltr:
        switch (thumb) {
          case Thumb.start:
            thumbPath = _leftTriangle(_thumbSize, center);
            break;
          case Thumb.end:
            thumbPath = _rightTriangle(_thumbSize, center);
            break;
        }
        break;
    }
    canvas.drawPath(thumbPath, Paint()..color = sliderTheme.thumbColor);
  }
}

Path _rightTriangle(double size, Offset thumbCenter, {bool invert = false}) {
  final Path thumbPath = Path();
  final double halfSize = size / 2.0;
  final double sign = invert ? -1.0 : 1.0;
  thumbPath.moveTo(thumbCenter.dx + halfSize * sign, thumbCenter.dy);
  thumbPath.lineTo(thumbCenter.dx - halfSize * sign, thumbCenter.dy - size);
  thumbPath.lineTo(thumbCenter.dx - halfSize * sign, thumbCenter.dy + size);
  thumbPath.close();
  return thumbPath;
}


Path _leftTriangle(double size, Offset thumbCenter) ()=>_rightTriangle(size, thumbCenter, invert: true);


در کد بالا از طریق بازنویسی متد Paint امکان پیاده سازی طراحی های مختلف را خواهید داشت و دست شما در این زمینه کاملا بازخواهد بود. کلاس Canvas در اکثر زبان های برنامه نویسی وجود دارد و وظیفه آن پیاده سازی طراحی های دو بعدی برروی صفحه است که در این متد یک نمونه از این کلاس ایجاد میکنیم و با کمک متد drawPath طراحی انجام شده را ثبت میکنیم.

حالا طراحی خودتون باید داخل SliderThemeData قرار دهید.

 
SliderTheme(
  data: SliderThemeData(
    rangeThumbShape: _CustomRangeThumbShape(),
    // ...
  ),
  child: RangeSlider(
    // ...
  ),
),

به این شکل از ویجت مورد نظر میتوانید استفاده کنید.

مقاله: آموزش کار با تصاویر در فلاتر

Hesam

Recent Posts

گیتهاب اکشن چیست؟ آموزش استفاده از گیتهاب اکشن در برنامه نویسی فلاتر

گیتهاب اکشن GitHub Actions یکی از ابزارهای گیتهاب است که به شما کمک می‌کنه تا…

2 هفته ago

آموزش افزایش سرعت اجرای وب اپلیکیشن های فلاتر

اگر یک برنامه نویس فلاتر هستید و با از نسخه وب اپلیکیشن پروژتون استفاده میکنید…

1 ماه ago

آموزش جامع انتشار اپلیکیشن اندروید و فلاتر در فروشگاه گوگل پلی Google play

به عنوان یک برنامه نویس فلاتر یا اندروید بعد از اتمام پروسه طراحی اپلیکیشن نیاز…

2 ماه ago

دانلود سورس کد رابط کاربری اپلیکیشن فلاتر پروژه پادکست

طراحی رابط کاربری اپلیکیشن پادکست خود را با استفاده از این کیت توسعه UI/UX فلاتر…

3 ماه ago

فایربیس چیست؟ معرفی سرویس ابری Firebase و کاربردهای آن

فایربیس، پلتفرمی قدرتمند از شرکت گوگل برای توسعه و مدیریت برنامه‌های موبایل و وب است.…

3 ماه ago

آموزش پیاده سازی Method Channel در فلاتر + فیلم

فلاتر یک فریم ورک برنامه نویسی چندسکویی است که این امکان را برای برنامه نویس…

4 ماه ago