زر Switch نيومورفيك داكن بتوهج أزرق في Figma، كيف تنفّذ هذا الزر بنفس التصميم في Flutter بخطوات منظمة:
✅ النتيجة النهائية:
زر تبديل (ON/OFF) أنيق بتصميم نيومورفيك داكن، مع توهج أزرق عند التفعيل، ومؤشر متحرك سلس.
---
✅ أولاً: المكتبات المطلوبة
dependencies:
flutter:
sdk: flutter
flutter_neumorphic: ^3.3.0 # لتصميم النيومورفيك
---
✅ ثانياً: الكود الكامل
import 'package:flutter/material.dart';
import 'package:flutter_neumorphic/flutter_neumorphic.dart';
class NeumorphicSwitch extends StatefulWidget {
@override
_NeumorphicSwitchState createState() => _NeumorphicSwitchState();
}
class _NeumorphicSwitchState extends State<NeumorphicSwitch> {
bool isOn = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => setState(() => isOn = !isOn),
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
width: 140,
height: 56,
padding: EdgeInsets.symmetric(horizontal: 4),
decoration: BoxDecoration(
color: Color(0xFF121212),
borderRadius: BorderRadius.circular(100),
boxShadow: [
// ظل خارجي
BoxShadow(
color: Colors.black.withOpacity(0.7),
offset: Offset(0, 4),
blurRadius: 10,
),
// ظل داخلي
BoxShadow(
color: Colors.black.withOpacity(0.25),
offset: Offset(0, 2),
blurRadius: 6,
spreadRadius: -1,
),
],
),
child: Stack(
alignment: Alignment.center,
children: [
// توهج خلفي عند التفعيل
if (isOn)
Positioned(
right: 0,
left: 70,
child: Container(
height: 56,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xFF00CFFF), Color(0xFF0066FF)],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
borderRadius: BorderRadius.circular(100),
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 25, sigmaY: 25),
child: Container(
color: Colors.transparent,
),
),
),
),
// النص
Positioned(
right: 20,
child: AnimatedOpacity(
duration: Duration(milliseconds: 200),
opacity: isOn ? 1.0 : 0.0,
child: Text(
"ON",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 14,
shadows: [
Shadow(
color: Colors.cyanAccent.withOpacity(0.5),
blurRadius: 10,
)
],
),
),
),
),
// المؤشر الدائري
AnimatedAlign(
duration: Duration(milliseconds: 300),
alignment: isOn ? Alignment.centerRight : Alignment.centerLeft,
child: Container(
width: 52,
height: 52,
decoration: BoxDecoration(
color: Color(0xFF2A2A2A),
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: Colors.cyanAccent.withOpacity(0.4),
blurRadius: 15,
spreadRadius: 1,
),
],
),
child: Center(
child: Container(
width: 6,
height: 6,
decoration: BoxDecoration(
color: Colors.white24,
shape: BoxShape.circle,
),
),
),
),
),
],
),
),
);
}
}
---
✅ ثالثاً: استخدام الزر في الشاشة
void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
backgroundColor: Color(0xFF0D0D0D),
body: Center(
child: NeumorphicSwitch(),
),
),
),
);
}
---
✅ ملاحظات إضافية:
يمكنك إضافة AnimatedSwitcher للنص لإضفاء سلاسة أكثر.
هذا التصميم متجاوب جزئيًا، ويمكن تعديله ليعمل على مختلف الشاشات بسهولة.
التوهج الأزرق تم بمحاكاة باستخدام BoxShadow وLinearGradient مع BackdropFilter.
---
هل تحب أجهز لك نسخة هذا التصميم كـ Component جاهز رائع! بما أنك صممت زر Switch نيومورفيك داكن بتوهج أزرق في Figma، الآن سأوضح لك كيف تنفّذ هذا الزر بنفس التصميم في Flutter بخطوات منظمة:
---
✅ النتيجة النهائية:
زر تبديل (ON/OFF) أنيق بتصميم نيومورفيك داكن، مع توهج أزرق عند التفعيل، ومؤشر متحرك سلس.
---
✅ أولاً: المكتبات المطلوبة
dependencies:
flutter:
sdk: flutter
flutter_neumorphic: ^3.3.0 # لتصميم النيومورفيك
---
✅ ثانياً: الكود الكامل
import 'package:flutter/material.dart';
import 'package:flutter_neumorphic/flutter_neumorphic.dart';
class NeumorphicSwitch extends StatefulWidget {
@override
_NeumorphicSwitchState createState() => _NeumorphicSwitchState();
}
class _NeumorphicSwitchState extends State<NeumorphicSwitch> {
bool isOn = false;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => setState(() => isOn = !isOn),
child: AnimatedContainer(
duration: Duration(milliseconds: 300),
width: 140,
height: 56,
padding: EdgeInsets.symmetric(horizontal: 4),
decoration: BoxDecoration(
color: Color(0xFF121212),
borderRadius: BorderRadius.circular(100),
boxShadow: [
// ظل خارجي
BoxShadow(
color: Colors.black.withOpacity(0.7),
offset: Offset(0, 4),
blurRadius: 10,
),
// ظل داخلي
BoxShadow(
color: Colors.black.withOpacity(0.25),
offset: Offset(0, 2),
blurRadius: 6,
spreadRadius: -1,
),
],
),
child: Stack(
alignment: Alignment.center,
children: [
// توهج خلفي عند التفعيل
if (isOn)
Positioned(
right: 0,
left: 70,
child: Container(
height: 56,
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [Color(0xFF00CFFF), Color(0xFF0066FF)],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
),
borderRadius: BorderRadius.circular(100),
),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 25, sigmaY: 25),
child: Container(
color: Colors.transparent,
),
),
),
),
// النص
Positioned(
right: 20,
child: AnimatedOpacity(
duration: Duration(milliseconds: 200),
opacity: isOn ? 1.0 : 0.0,
child: Text(
"ON",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 14,
shadows: [
Shadow(
color: Colors.cyanAccent.withOpacity(0.5),
blurRadius: 10,
)
],
),
),
),
),
// المؤشر الدائري
AnimatedAlign(
duration: Duration(milliseconds: 300),
alignment: isOn ? Alignment.centerRight : Alignment.centerLeft,
child: Container(
width: 52,
height: 52,
decoration: BoxDecoration(
color: Color(0xFF2A2A2A),
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: Colors.cyanAccent.withOpacity(0.4),
blurRadius: 15,
spreadRadius: 1,
),
],
),
child: Center(
child: Container(
width: 6,
height: 6,
decoration: BoxDecoration(
color: Colors.white24,
shape: BoxShape.circle,
),
),
),
),
),
],
),
),
);
}
}
---