در ورژن 1.7 فریمورک فلاتر ویجت جدیدو جالبی به نام RangeSlider را معرفی کرد که به کاربر امکان این را میدهد بین دو رنج مقدار مختلف انتخاب انجام دهد.
مانند وب سایت های فروشگاهی که میتوانید رنج قیمت محصولات و فیلتر گذاری کنید تا نتایج بهتری را مشاهده کنید.
در این مطلب نحوه استفاده از کامپوننت متریال دیزاین RangeSlider و همچنین چگونگی شخصی سازی آن را باهم بررسی میکنیم.
ویجت range slider دارای دو نقطه مهم می باشد که کمترین و بیشترین مقدار رنج را مشخص می کند. در واقع ابتدا باید بازه مقدار را مشخص کنیم.
در تصویر زیر بخش های اصلی RangeSlider را مشاهده می کنید.
مقدار ا نتخابی 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(
// ...
),
),
به این شکل از ویجت مورد نظر میتوانید استفاده کنید.
مقاله: آموزش کار با تصاویر در فلاتر
گیتهاب اکشن GitHub Actions یکی از ابزارهای گیتهاب است که به شما کمک میکنه تا…
اگر یک برنامه نویس فلاتر هستید و با از نسخه وب اپلیکیشن پروژتون استفاده میکنید…
به عنوان یک برنامه نویس فلاتر یا اندروید بعد از اتمام پروسه طراحی اپلیکیشن نیاز…
طراحی رابط کاربری اپلیکیشن پادکست خود را با استفاده از این کیت توسعه UI/UX فلاتر…
فایربیس، پلتفرمی قدرتمند از شرکت گوگل برای توسعه و مدیریت برنامههای موبایل و وب است.…
فلاتر یک فریم ورک برنامه نویسی چندسکویی است که این امکان را برای برنامه نویس…