DXCode - Flutter
175 subscribers
16 photos
17 links
قصد داری محتوای تخصصی‌ت رو منتشر کنیم؟
قبل از ارسال، حتماً شرایط رو کامل بخون:
📋Terms: @DXTerms
حمایت از ما:
💎 t.me/boost/DXFlutter
Download Telegram
✍️ توام‌ تو این کانال بنویس!

اگه تجربه، ترفند یا آموزشی درباره‌ی فلاتر داری؛
محتوای ارزشمندت رو برامون بفرست تا بعد از بررسی، با اسم‌خودت تو کانال منتشرش کنیم.

📌 قبل از ارسال، حتماً شرایط رو بخون:
https://t.me/DXTerms
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4👍41
This media is not supported in your browser
VIEW IN TELEGRAM
📰 ساخت اسپلش‌اسکرین انیمیشنی در فلاتر

✏️ اگه می‌خوای توی فلاتر یک اسپلش اسکرین متحرک و حرفه‌ای بسازی که حسابی ظاهر اپ رو زیبا کنه، این ترفند دقیقاً همون چیزیه که دنبالش بودی.

با استفاده از روش زیر یادمیگیری:
• چطور یه Splash Screen انیمیشنی بزنی
• چطور با تجربه کاربری رو ببری بالا
• بدون سختی، با یه پکیج مطمئن!
• و همه اینا رو فقط با چند خط کد انجام بدی

📦 پکیج‌های مورد نیاز :
animated_splash_screen
page_transition

🔨 کد آماده استفاده:
import 'package:flutter/material.dart';
import 'package:animated_splash_screen/animated_splash_screen.dart';
import 'package:page_transition/page_transition.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: AnimatedSplashScreen(
splash: Icons.flutter_dash,
nextScreen: HomePage(),
splashTransition: SplashTransition.scaleTransition,
pageTransitionType: PageTransitionType.rightToLeft,
backgroundColor: Colors.blueAccent,
duration: 2500,
),
);
}
}

class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Welcome to Flutter App 👋', style: TextStyle(fontSize: 24)),
),
);
}
}


Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤‍🔥2
📰 کاهش مصرف حافظه با const هوشمندانر

✏️ میدونستی توی فلاتر فقط با یک const، می‌تونی صدها کیلوبایت حافظه رو ذخیره کنی؟
این ترفند دقیقاً همون چیزیه که دنبالش بودی.

📊 اگر چند ویجت دارید که ظاهر یا ساختارشون کاملاً یکیه (مثلاً چند دکمه تکراری یا آیکن مشابه) می‌تونی اونا رو در سطح بالاتر const کنی و share بدی بین صفحه‌ها یا لیست‌ها

🔨 کد نمونه برای استفاده:
const sharedIcon = Icon(Icons.star, color: Colors.amber);
...
List.generate(10, (i) => ListTile(leading: sharedIcon, title: Text('Item $i'))); d


⚡️نتیجه؟
• حافظه کمتر
• و GC کمتر
• و UI سریع‌تر

این یه تکنیک ساده ولی ناشناخته‌ست که توی اپ‌های پر آیتم یا پرکامپوننت، معجزه می‌کنه.

Flutter Jungle | @DXFlutter

✍️ #DXFlutter
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3👍2
📰 متون گرادینت/رنگارنگ در Flutter

✏️ اگه می‌خوای توی فلاتر بدون هیچ پکیج خاصی، به متن‌هات افکت گرادینت رنگی بدی و اپتو خاص‌تر کنی، این ترفند دقیقاً همون چیزیه که دنبالش بودی.

• بدون پکیج
• کاملاً قابل شخصی‌سازی
• استفاده از ShaderMask
• و همه اینا رو فقط با چند خط کد انجام بدی

🔨 کد آماده استفاده
import 'package:flutter/material.dart';

void main() {
runApp(GradientTextApp());
}

class GradientTextApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.grey[900],
body: Center(
child: ShaderMask(
shaderCallback: (bounds) => LinearGradient(
colors: [Colors.purple, Colors.blue, Colors.cyan],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
).createShader(bounds),
blendMode: BlendMode.srcIn, // این خط باعث میشه فقط متن رنگ بگیره
child: Text(
'Gradient Text',
style: TextStyle(
fontSize: 40,
fontWeight: FontWeight.bold,
color: Colors.white, // باید سفید باشه تا ShaderMask درست کار کنه
),
),
),
),
),
);
}
}


Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🙏422
📰 حفظ وضعیت ویجت‌ها در تب‌ها یا لیست‌های طولانی

✏️ چالشی که اکثر ما فلاتر کارا ممکنه داشته باشیم این هست که وقتی از PageView یا TabBarView استفاده می‌کنی، ویجت‌ها به‌طور پیشفرض هنگام تغییر صفحه از حافظه پاک میشن و وضعیتشون مثل اسکرول از بین میرن.

راه حل:
با اضافه کردن AutomaticKeepAliveClientMixin و override کردن متد wantKeepAlive به true، وضعیت ویجت حفظ میشه و بار بعد که بهش برمی‌گردی دقیقاً همون حالت قبلی هست.

class MyPage extends StatefulWidget {
@override
_MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> with AutomaticKeepAliveClientMixin {
@override
bool get wantKeepAlive => true;

@override
Widget build(BuildContext context) {
super.build(context);
return ListView(...);
}
}


Flutter Jungle | @DXFlutter

✍️ #DXFlutter
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72❤‍🔥11
DXCode - Flutter
📰 حفظ وضعیت ویجت‌ها در تب‌ها یا لیست‌های طولانی ✏️ چالشی که اکثر ما فلاتر کارا ممکنه داشته باشیم این هست که وقتی از PageView یا TabBarView استفاده می‌کنی، ویجت‌ها به‌طور پیشفرض هنگام تغییر صفحه از حافظه پاک میشن و وضعیتشون مثل اسکرول از بین میرن. راه حل:…
↩️ هوشمندانه استفاده کن

استفاده زیاد یا نادرست از keepAlive و cacheExtent به راحتی می‌تونه باعث رسیدن به سقف memory heap اندروید بشه.

❗️ نتیجه؟ مصرف زیاد رم، لگ، یا حتی کرش!

Flutter Jungle | @DXFlutter

✍️ #Amirreza_Khezerlou
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
8👍4❤‍🔥1
📰 بررسی فارسی زبان بودن کاربر

✏️ این روش کاملا آفلاین فارسی زبان بودن کاربر رو بررسی میکنه و میاد بر اساس چهار تا متود چک میکنه که کاربر فارسی زبان است یا نه؛ روش مناسبی هست برای دوستانی که با تبلیغات AdMob و مارکت‌های گوگل‌پلی و اپ‌استور کار میکنن؛

مواردی که باهاش سرو‌کار داریم:
• زبان اصلی و فرعی گوشی
• کانتری کد
• تایم زون
• بررسی پکیج اپ‌های نصب شده ایرانی

📦 پکیج های موردنیاز:
installed_apps
flutter_native_timezone_latest

🍎 نکته iOS: {کلیک کنید}

🤖 نکته اندروید: {کلیک کنید}

🔨 کد کلاس Checker: {کلیک‌کنید}

Flutter Jungle |
@DXFlutter

✍️ #Amin_Pourabazari
🔗 Telegram 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
103👍2🙏1
📰 لاگ رنگی در ترمینال Flutter

✏️ توی توسعه با Flutter می‌تونید با escape codeهای ANSI لاگ‌هاتون رو توی ترمینال رنگی کنید؛

🔨 نمونه کد : { کلیک کنید }

💡 استفاده از Live Template؟
با Live Template یا Snippet دیگه لازم نیست هر بار این کدها رو بنویسی، فقط تایپ کن redlog، Tab بزن، و لاگ رنگی آماده‌ست.

⚙️ کاربا Live Template: { کلیک کنید }


Flutter Jungle | @DXFlutter

✍️ #Amin_Pourabazari
🔗 Telegram 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍51
📰 کپی کردن متن در کلیپ‌بورد

✏️ این روش ساده و کاربردیه؛ ولی یه نکته مهم توی نسخه‌های جدید اندروید وجود داره:
از اندروید ۱۲ به بعد (یعنی SDK 31)، خود سیستم‌عامل موقع کپی شدن متن، یه toastmessage به کاربر نشون میده. اما تو نسخه‌های پایین‌تر یا iOS لازمه خودمون به کاربر اطلاع بدیم که متن کپی شده؛ این موضوع مخصوصاً برای تجربه کاربری بهتر مهمه.


📦 پکیج موردنیاز:
device_info_plus

🔨 نمونه کد: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Amin_Pourabazari
🔗 Telegram 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍21🙏1
📰 ترفند Spread Operator در Flutter:

✏️ وقتی یه لیست ویجت داری و می‌خوای بندازیش توی Column یا Row، باید از ... (Spread Operator) استفاده کنی.
چون مستقیم گذاشتن لیست توی لیست ارور می‌ده!

🔨 نحوه استفاده: {کلیک کنید}

اگه Spread Operator رو بلد باشی، خیلی جاها کارت راحت می‌شه!

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
72❤‍🔥2👍2🙏2
📰 ترفند استفاده از addPostFrameCallback برای اجرای کد بعد از build

✏️ وقتی می‌خوای بعد از اینکه ویجت کامل رندر شد، یه کاری انجام بدی (مثلاً نمایش یه دیالوگ، اسکرول، یا گرفتن سایز ویجت).
اما وقتی اون کد رو مستقیم تو initState یا build بذاری، خطا می‌گیری چون هنوز context یا layout کامل نشده.

💡 راه‌حل: استفاده از
WidgetsBinding.instance.addPost rameCallback

📦 کاربردهای این ترفند:
✔️ نمایش دیالوگ یا SnackBar بعد لود
✔️ گرفتن سایز یا موقعیت ویجت‌ها با context
✔️ اسکرول به یک بخش خاص
✔️ انجام عملیات async بعد از UI

🔨 نحوه استفاده: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
12❤‍🔥3👍3
حمایت میکنید ادامه بدیم؟🧑‍💻
معرفی نمیکنید که به دوستاتون😫
Please open Telegram to view this post
VIEW IN TELEGRAM
👍224❤‍🔥3
📰 جلوگیری از اجرای دوباره Future در FutureBuilder:

✏️ اگه توی FutureBuilder هر بار ویجت rebuild بشه، Future دوباره اجرا میشه و باعث درخواست‌های تکراری یا کندی اپ میشه.
برای حلش کافیه Future رو فقط یه‌بار در initState مقداردهی کنی!

🔨 نحوه استفاده: {کلیک کنید}

هر بار که setState() صدا زده بشه، FutureBuilder دوباره build میشه،
اما چون Future رو خارج از build ذخیره کردیم، دیگه دوباره اجرا نمیشه!

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4👍31
📰 جلوگیری از دوبار کلیک روی دکمه (Double Tap Protection):

✏️ اگه کاربر چند بار سریع روی دکمه بزنه، ممکنه چند تا درخواست پشت سر هم به سرور بره و دردسر درست کنه .
با این ترفند ساده، جلوی این اتفاق رو بگیر!

🔨 نحوه استفاده: {کلیک کنید}

برای پروژه‌های بزرگ‌تر می‌تونی از debounce توی پکیج‌های rxdart یا easy_debounce استفاده کنی تا کنترل دقیق‌تری داشته باشی.

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
🙏53
📰 چک کردن وضعیت اتصال اینترنت در فلاتر:

✏️ برای اینکه قبل از هر درخواست (مثل API Call یا دانلود فایل) مطمئن بشی کاربر اینترنت داره، می‌تونی از پکیج connectivity_plus استفاده کنی.
خیلی ساده و تمیز!

🔨 نحوه استفاده: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3
📰 Floating Action Button
فقط وقتی اسکرول کردی ظاهر بشه:

✏️ گاهی توی طراحی، می‌خوای FAB فقط وقتی کاربر کمی اسکرول کرد ظاهر شه…
مثلاً تو صفحه‌ای که لیست بلندی داره، FAB همیشه جلو چشم باشه شلوغ می‌کنه.

این ترفند باعث میشه تجربه کاربری حرفه‌ای‌تر و مینیمال‌تر داشته باشی.

📌ایده‌ی اصلی:

با استفاده از ScrollController تشخیص می‌دیم کاربر اسکرول کرده یا نه،
و FAB رو با AnimatedOpacity مخفی/ظاهر می‌کنیم.

🔨 نحوه استفاده: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤‍🔥41
📰 تغییر رنگ StatusBar و NavigationBar در اندروید و iOS:

✏️ خیلی وقت‌ها می‌خوای تم صفحه‌ت با رنگ StatusBar یکی باشه تا ظاهر اپ حرفه‌ای‌تر و یکپارچه بشه.
این ترفند مخصوصاً توی صفحات fullscreen یا صفحه‌هایی با تم روشن/تاریک خیلی مهمه.


🔨 نحوه استفاده: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
📰 دسترسی به context از هرجای اپ (بدون دردسر!):

✏️گاهی داخل:

Controller

Service

یا callbackهایی که context ندارن

لازمت میشه BuildContext داشته باشی (برای SnackBar، Dialog، Theme و …).
این ترفند تمیز و استاندارده


⚠️ نکته مهم:

از
این روش بیش از حد استفاده نکن
برای معماری تمیز، بهتره بیشتر منطق‌ها داخل UI یا ViewModel باشن.
این ترفند مخصوص مواقع خاصه 👌

🧠 جای استفاده مناسب:
نمایش SnackBar سراسری
دیالوگ‌های سیستمی
ارور هندلینگ مرکزی


🔨 نحوه استفاده: {کلیک کنید}

Flutter Jungle | @DXFlutter

✍️ #Yekta_Soltani
🔗 LinkedIn 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍2❤‍🔥1
📰 روشی برای رفع تحریم و مشکل Sync گریدل

✏️ اگر هنگام اجرای پروژه فلاتر یا کاتلین با خطاهای Connection Timeout یا 403 مواجه می‌شوید و VPN شما روی گریدل جواب نمی‌دهد، از این تنظیمات در فایل android/build.gradle استفاده کنید. حتی اگر vpn دارید هم این تنظیمات رو ست کنید که سریعتر مخازن رو دریافت کنید.

تنظیم مخازن (بدون نیاز به VPN)

ابتدا منابع را از مایکت و سپس از Aliyun (علی‌بابا) دریافت می‌کنیم. این دو مورد تحریم نیستند و سرعت بسیار بالایی دارند. اگر پکیجی در آن‌ها نباشد، نگران نباشید گریدل به سراغ گوگل و MavenCentral می‌رود.


🔨 نحوه استفاده : {کلیک‌کنید}

Flutter Jungle |
@DXFlutter

✍️ #Amin_Pourabazari
🔗 Telegram 📱 | GitHub 4️⃣
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1🙏1