ویجت BackdropFilter در فلاتر به شما اجازه میدهد که یک پوشش برای ویجت مورد نظر ایجاد کنید. این پوشش شامل یک پسزمینه نیمه شفاف است که به ویجت اعمال میشود و محتوای آن را مات و نیمه شفاف میکند. این ویژگی به شما اجازه میدهد که یک اثر بصری متفاوت و جذاب ایجاد کنید.
برای استفاده از ویجت BackdropFilter در فلاتر، ابتدا باید ویجتی که قصد دارید پوشش بگیرید را ایجاد کنید. سپس از کلاس BackdropFilter
استفاده کرده و آن را به عنوان ویجت فرعی به ویجت اصلی خود اضافه کنید.
در ادامه یک مثال ساده از استفاده از ویجت BackdropFilter در فلاتر را بررسی میکنیم:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Stack(
children: [
// ویجت اصلی که قصد دارید پوشش بگیرید
Container(
width: 200,
height: 200,
color: Colors.blue,
child: Center(
child: Text(
'My Widget',
style: TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
),
),
// ویجت BackdropFilter
BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: Container(
width: 200,
height: 200,
color: Colors.transparent,
),
),
],
),
);
}
}
در این مثال، ما یک ویجت اصلی از نوع Container
با یک پسزمینه آبی ایجاد کردهایم. سپس یک ویجت BackdropFilter
ایجاد کردهایم که فیلتر مربوط به آن را با استفاده از ImageFilter.blur
تنظیم کردهایم. سپس این ویجت را به عنوان ویجت فرعی به ویجت اصلی خود اضافه کردهایم.
با اجرای این کد، ویجت اصلی ما با یک پوشش نیمه شفاف و مات شده است و یک اثر با استفاده از اضافه کردن ویجت BackdropFilter
به ویجت اصلی یک پوشش مات و نیمه شفاف بر روی ویجت اصلی ایجاد میشود. اما شما میتوانید با تنظیمات مختلفی، این پوشش را به صورتی که میخواهید تغییر دهید.
در BackdropFilter
، میتوانید از تنظیمات ImageFilter
مختلفی استفاده کنید تا پوشش مات و نیمه شفاف را به صورت دلخواه تنظیم کنید. به عنوان مثال، میتوانید پوشش را با استفاده از فیلتر ImageFilter.blur
مات کنید یا از فیلتر ImageFilter.matrix
برای ایجاد یک پوشش با اثر ماتریسی استفاده کنید.
در اینجا یک مثال از استفاده از فیلتر ImageFilter.matrix
را بررسی میکنیم:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Center(
child: Stack(
children: [
// ویجت اصلی که قصد دارید پوشش بگیرید
Container(
width: 200,
height: 200,
color: Colors.blue,
child: Center(
child: Text(
'My Widget',
style: TextStyle(
color: Colors.white,
fontSize: 24,
fontWeight: FontWeight.bold,
),
),
),
),
// ویجت BackdropFilter با فیلتر ImageFilter.matrix
BackdropFilter(
filter: ImageFilter.matrix(<double>[
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 0.5, 0,
]),
child: Container(
width: 200,
height: 200,
color: Colors.transparent,
),
),
],
),
);
}
}
در این مثال، ما پوشش را با استفاده از فیلتر ImageFilter.matrix
تنظیم کردهایم. با استفاده از ماتریس داده شده، ما پوشش را به صورتی تنظیم کردهایم که تنها 50 درصد از محتوای ویجت اصلی نمایش داده میشود و بقیه از محتوای آن به صورت ماتریسی و نیمه شفاف نمایش داده میشود.
میتوانید با تغییر ارقام ماتریس، اثرات دیگری روی پوشش ایجاد کنید. به عنوان مثال، با استفاده از ماتریس زیر، پوششی با اثر تصویرسازی سهبعدی ایجاد میشود:
BackdropFilter(
filter: ImageFilter.matrix(<double>[
1.2, 0, 0, 0, -30,
0, 1.2, 0, 0, -30,
0, 0, 1.2, 0, -30,
0, 0, 0, 1, 0,
]),
child: Container(
width: 200,
height: 200,
color: Colors.transparent,
),
),
وقت آن است که کد نمونهای که بالا توضیح داده شد را به صورت کامل ببینید:
import 'dart:ui';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'BackdropFilter Example',
home: Scaffold(
appBar: AppBar(
title: Text('BackdropFilter Example'),
),
body: Center(
child: Stack(
children: [
Image.network(
'https://images.unsplash.com/photo-1530636791369-871dbd3bb3cd',
fit: BoxFit.cover,
width: double.infinity,
height: double.infinity,
),
BackdropFilter(
filter: ImageFilter.matrix(<double>[
1.2, 0, 0, 0, -30,
0, 1.2, 0, 0, -30,
0, 0, 1.2, 0, -30,
0, 0, 0, 1, 0,
]),
child: Container(
width: 200,
height: 200,
color: Colors.transparent,
),
),
],
),
),
),
);
}
}
اگر این کد را در پروژه خود قرار دهید، میتوانید با دیدن نتیجه، ایدهای دقیق از نحوه کار ویجت BackdropFilter در فلاتر کسب کنید.