فارسی
باز کردن در Telegram
|| کانال توسعه‌دهندگان فلاتر |

| کانال توسعه‌دهندگان فلاتر |

@DevelopixFlutter · کانال · ایندکس از 2026-08-16
1 959مشترک
41پست در ایندکس
|
| کانال توسعه‌دهندگان فلاتر |
‏اصل Single Responsibility توی ویجت‌های Flutter 🧩 یکی از راحت‌ترین راه‌ها برای تمیز و قابل‌نگهداری موندن کد Flutter اینه که واقعاً به Single Responsibility Principle (SRP) پایبند بمونیم. طبق SRP هر کلاس باید فقط یک دلیل برای تغییر داشته باشه. توی Flutter یعنی هر ویجت بهتره فقط روی یک نقش مشخص تمرکز کنه: نمایش، منطق، یا مدیریت state؛ نه همۀ این‌ها با هم. 😄 وقتی یه صفحه همه‌چیزو قاطی خودش نگه می‌داره: - تست‌نویسی سخت می‌شه - ریفکتور خطرناک‌تر می‌شه - کامپایل hot-reload کندتر حس می‌شه نمونه‌ی یه ویجت خلاف SRP 👇 class ProfilePage extends StatefulWidget { const ProfilePage({super.key}); @override State<ProfilePage> createState() => _ProfilePageState(); } class _ProfilePageState extends State<ProfilePage> { bool _loading = false; String? _name; Future<void> _loadProfile() async { setState(() => _loading = true); await Future.delayed(const Duration(seconds: 1)); setState(() { _name = 'Ali'; _loading = false; }); } @override void initState() { super.initState(); _loadProfile(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Profile')), body: Center( child: _loading ? const CircularProgressIndicator() : Column( mainAxisSize: MainAxisSize.min, children: [ Text(_name ?? 'Unknown'), ElevatedButton( onPressed: _loadProfile, child: const Text('Reload'), ), ], ), ), ); } } اینجا یک کلاس هم: - API call شبیه‌سازی می‌کنه - state رو نگه می‌داره - UI کامل صفحه رو می‌سازه حالا همون ایده رو با احترام به SRP تکه‌تکه می‌کنیم 👇 ۱) جدا کردن منطق لود پروفایل class ProfileController extends ChangeNotifier { bool loading = false; String? name; Future<void> loadProfile() async { loading = true; notifyListeners(); await Future.delayed(const
4 · 1.2K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
خروجی اجرای این کد Dart در Flutter چیست؟ در نظر بگیرید این کد در تابع main یک اپ Flutter اجرا می‌شود و ترتیب اجرا بین microtask queue و event queue اهمیت دارد. خروجی نهایی (متن کامل چاپ‌شده روی کنسول با در نظر گرفتن ترتیب خطوط) چیست؟ 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
5 · 1.3K ·
|
| کانال توسعه‌دهندگان فلاتر |
پیوند
برای نمایش کلیک کنید
📌 دسترسی به ۴ سرویس مهم حوزه برنامه‌نویسی روی اینترنت ملی مجدداً برقرار شد: 🔹 Vercel https://vercel.com/ 🔹 Next.js https://nextjs.org/ 🔹 SourceForge https://sourceforge.net/ 🔹 Let's Encrypt https://letsencrypt.org/ این سرویس‌ها از ابزارهای مهم در توسعه، انتشار و امنیت پروژه‌ها محسوب می‌شوند. 🔖 #Flutter #فلاتر 👤 Alireza 💎 Channel: @DevelopixFlutter
20 · 1.4K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
در کد زیر سعی شده ترتیب اجرای کد هنگام صدا زدن runApp و استفاده از scheduleMicrotask و Future.microtask بررسی شود. خروجی نهایی این برنامه (به‌ترتیب خطوط چاپ‌شده در کنسول) چه خواهد بود؟ پاسخ را دقیقا مطابق خروجی کنسول بنویسید، هر خط در یک سطر جدا. 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
1 · 1.4K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
عکس
برای نمایش کلیک کنید
در کد اشتباه بالا، هر بار که لیست اسکرول یا بازسازی می‌شود، متد _heavyComputation مستقیماً داخل build صدا زده می‌شود و عملاً هر بار محاسبات سنگین دوباره انجام می‌گیرد که باعث لگ، مصرف CPU بالا و افت فریم در لیست‌های بزرگ می‌شود. در نسخه‌ی اصلاح‌شده، نتیجه‌ی محاسبه‌ی سنگین را یک بار در initState به کمک memoization و Future محاسبه کرده و با FutureBuilder فقط همان نتیجه‌ی کش‌شده را استفاده می‌کنیم؛ در نتیجه تعداد اجرای محاسبات سنگین به شدت کم می‌شود و عملکرد اسکرول در <ListView.builder> بهبود چشمگیری پیدا می‌کند. به‌جای اجرای مستقیم محاسبات پرهزینه در متد build، از تکنیک‌هایی مانند memoization، FutureBuilder و جابه‌جا کردن منطق سنگین به initState استفاده کنید تا هم مصرف منابع کمتر شود و هم تجربه‌ی کاربری در لیست‌های پیچیده بهتر شود. 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
5 · 1.7K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
عکس
برای نمایش کلیک کنید
در نمونه‌کد بالا در نسخهٔ اول، برای هر بار ساختن ویجت، یک TextEditingController جدید داخل متد build ساخته می‌شود و هیچ‌وقت dispose نمی‌شود؛ این کار هم باعث Memory Leak می‌شود و هم روی پرفورمنس فرم‌های بزرگ اثر منفی دارد. در نسخهٔ دوم، کنترلر به‌صورت فیلد در State نگه‌داری شده، فقط یک‌بار در initState ساخته و در متد dispose آزاد می‌شود. شما در فرم‌های پیچیده و ویجت‌های stateful مشابه، کدام الگو را به‌عنوان روش استاندارد مدیریت Controller‌ها و منابع قابل dispose در Flutter استفاده می‌کنید تا هم از Memory Leak جلوگیری شود و هم مصرف مموری و زمان رندر کنترل شود؟ 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
5 · 1.7K ·
|
| کانال توسعه‌دهندگان فلاتر |
ویدیو
magnific_this_image_does_not_change_the_text_it_just_transf_ · 4.8 MB · برای نمایش کلیک کنید
🏆آفرهای جام جهانی ۲۰۲۶ هاست‌ایران فعال شد! با کمپین «ترکیب برنده سایتت»، زیرساخت سایتت رو برای روزهای پرترافیک آماده کن: 🔥 ۲۵٪ تخفیف روی پلن‌های ۳ ماهه هاست اشتراکی ایران ⚡ ۵۰٪ تخفیف روی پلن‌های یک‌ماهه سرویس ابری در دیتاسنترهای تهران، مشهد و اهواز 🧠 مشاوره رایگان زیرساخت توسط کارشناسان هاست‌ایران فرصت استفاده از تخفیف‌ها و ثبت فرم مشاوره محدود است. 📌 برای کپی کدهای تخفیف و ثبت‌نام در فرم مشاوره، روی لینک زیر کلیک کنید: 📌صفحه فرم مشاوره 📌تلگرام هاست‌ایران 📌بله هاست‌ایران #هاست_ایران #سرور_ابری_هاست_ایران #هاست_اشتراکی #دیتاسنتر #مشاوره_زیرساخت #جام_جهانی2026
1.4K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Dio منتشر شده است 🔸 ارتقا از نسخه 5.9.2 به 5.10.0 🔖 #dio, #flutter, #release 💎 @DevelopixFlutter
3 · 1.2K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
عکس
برای نمایش کلیک کنید
در نمونه‌کد بالا در نسخهٔ اول داخل StreamBuilder برای هر رویداد استریم از setState() استفاده شده؛ در حالی‌که خود ویجت StreamBuilder با هر تغییر در stream ری‌بیلد می‌شود و نیازی به مدیریت دستی state نیست. این کار می‌تواند باعث ری‌بیلدهای اضافی، پیچیدگی بیشتر و بروز باگ در سناریوهای پیچیده‌تر شود. در نسخهٔ دوم با تکیه بر snapshot و حذف setState()، هم کد تمیزتر شده و هم رفتار UI قابل پیش‌بینی‌تر و کاراتر می‌شود. در چنین مواقعی ترجیح می‌دهید state را چطور مدیریت کنید؟ 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
5 · 1.4K ·
|
| کانال توسعه‌دهندگان فلاتر |
🌀 مدیریت State تمیز در Flutter با Provider + API اگه پروژه‌هات کم‌کم داره شلوغ می‌شه و setState دیگه جواب نمیده، وقتشه با Provider یه معماری تمیزتر بسازی؛ مخصوصاً وقتی پای درخواست‌های HTTP و API وسطه. این مثال یه todo list ساده‌ست که از یه API واقعی داده می‌گیره و با Provider مدیریت می‌کنه. این ایده بر اساس مثال‌های رسمی مستندات Provider و مثال‌های Flutter در GitHubه 👇 https://pub.dev/packages/provider https://docs.flutter.dev/development/data-and-backend/state-mgmt/simple در این سناریو: • اپ یه لیست todo از API رایگان JSONPlaceholder می‌گیره. • State لودینگ، خطا و داده‌ها رو داخل یه ChangeNotifier نگه می‌داریم. • UI فقط گوش می‌کنه؛ منطق توی لایه provider می‌مونه. مزیتش؟ کد تمیزتر، testableتر و قابل گسترش‌تر؛ مخصوصاً وقتی بعداً auth، pagination یا کش اضافه می‌کنی. اول تو pubspec.yaml اینو اضافه کن: dependencies: flutter: sdk: flutter provider: ^6.1.2 http: ^1.2.2 حالا یه Provider ساده برای todo ها: import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; class Todo { final int id; final String title; final bool completed; Todo({required this.id, required this.title, required this.completed}); factory Todo.fromJson(Map<String, dynamic> json) { return Todo( id: json['id'] as int, title: json['title'] as String, completed: json['completed'] as bool, ); } } class TodoProvider extends ChangeNotifier { List<Todo> _todos = []; bool _isLoading = false; String? _error; List<Todo> get todos => _todos; bool get isLoading => _isLoading; String? get error => _error; Future<void> fetchTodos() async { _isLoading = true; _error = null; notifyListeners(); try { final response = await http.get( Uri.parse('https://jsonplaceholder.typicode.com/todos?_limit=10'), ); if (response.statusCode == 200) { final List data = jsonDecode(response.body) as List; _todos = data.map((e) => Todo.fromJson(e)).toList();
7 · 1.3K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Dio منتشر شده است 🔸 ارتقا از نسخه 5.10.0 به 5.11.0 🔖 #dio, #flutter, #release 💎 @DevelopixFlutter
4 · 1.1K ·
|
| کانال توسعه‌دهندگان فلاتر |
مدیریت state تو پروژه‌های متوسط و بزرگ فلاتر اگر از اول درست طراحی نشه، به‌سرعت تبدیل به spaghetti می‌شه. یکی از تمیزترین راه‌حل‌ها 👇 flutter_riverpod یک state management مدرن و type-safe برای Flutter هست که نسبت به Provider انعطاف و تست‌پذیری خیلی بهتری می‌دهد. چند نکتهٔ مهم 🔧 • بدون نیاز به InheritedWidget و context-heavy code • پشتیبانی عالی از hot-reload • مناسب برای پروژه‌های multi-module و scalable • تست واحد ساده‌تر برای logic ها نصب در pubspec.yaml: dependencies: flutter_riverpod: ^2.5.0 یک مثال سریع: final counterProvider = StateProvider<int>((ref) => 0); class CounterText extends ConsumerWidget { const CounterText({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final count = ref.watch(counterProvider); return Text('$count'); } } FloatingActionButton( onPressed: () => ref.read(counterProvider.notifier).state++, ) برای پروژه‌هایی که جلوتر از یک todo ساده می‌رن، Riverpod کمک می‌کند ساختار app تمیز، قابل تست و قابل گسترش بمونه. 🚀 Docs رسمی: https://riverpod.dev GitHub 🔖 #Flutter #فلاتر #Flutter #Riverpod #State_Management #Dart #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
13 · 1.1K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Go Router منتشر شده است 🔸 ارتقا از نسخه 17.3.0 به 17.4.0 🔖 #go_router, #flutter, #release 💎 @DevelopixFlutter
2 · 1.1K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Go Router منتشر شده است 🔸 ارتقا از نسخه 17.4.0 به 17.5.0 🔖 #go_router, #flutter, #release 💎 @DevelopixFlutter
4 · 1.1K ·
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کیت توسعه فلاتر (Flutter) منتشر شده است 🔸 ارتقا از نسخه 3.44.9 به 3.47.0 🔹 لیست تغییرات این نسخه: 🔖 #flutter, #flutter, #android, #release 💎 @DevelopixFlutter
2 · 984 ·
|
عکس
برای نمایش کلیک کنید
‏در کد زیر رفتار Zone در دارت را روی زمان‌بندی scheduleMicrotask و Future می‌بینید. خروجی نهایی برنامه (ترتیب لاگ‌ها) در کنسول چه خواهد بود؟ به حروف کوچک/بزرگ دقت کنید و ترتیب دقیق خطوط را بنویسید. 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
3 · 1.1K ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Go Router منتشر شده است 🔸 ارتقا از نسخه 17.5.0 به 18.0.0 🔖 #go_router, #flutter, #release 💎 @DevelopixFlutter
904 ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
‏یک ویجت فلاتر این تکه کد دارت را قبل از اولین رندر اجرا می‌کند. خروجی نهایی این برنامه چیست؟ (به ترتیب و دقیقاً همان چیزی که در کنسول چاپ می‌شود) پیشنهاد: با دقت به ترتیب مقداردهی late و اجرای توابع سازنده و getter نگاه کن 😉 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
1 · 914 ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
🔥 پکیج: پکیج شبکهٔ Dio برای فلاتر برای درخواست‌های HTTP جدی تو فلاتر، پکیج Dio تقریبا استانداردِ de facto حساب می‌شود 🚀 چیزهایی مثل interceptor برای لاگ، auth token و هندل‌کردن ریسپانس، CancelToken برای لغو ریکوئست‌ها (مثلا وقت اسکرول لیست)، و تنظیم timeout، همه آماده است. آپلود و دانلود فایل، فرم‌دیتا، retry با interceptor سفارشی و adapter/transformer قابل‌تعریف هم دارد. اگر الان با http خام کار می‌کنی، یه بار اینو امتحان کن 😉 لینک پکیج در pub.dev 📥 دانلود ماهانه: 3,956,008 ⭐️ 8,349 لایک 🔖 #Flutter #فلاتر #فلاتر #Dio #شبکه 💎 @DevelopixFlutter
2 · 970 ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
💠 نسخه جدید کتابخانه Get It منتشر شده است 🔸 ارتقا از نسخه 9.2.1 به 9.3.0 🔖 #get_it, #flutter, #release 💎 @DevelopixFlutter
672 ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
🔥 پکیج: باز کردن لینک در فلاتر برای باز کردن لینک از داخل اپ فلاتر، پکیج url_launcher راه سرراستی است. هم آدرس‌های وب را باز می‌کند، هم لینک‌های تماس، پیامک و ایمیل را به اپ مناسب می‌سپارد. وقتی کاربر باید از صفحهٔ پشتیبانی مستقیم به تماس یا ایمیل برسد، همین پکیج کلی کد اضافه را کم می‌کند. قبل از اجرا هم می‌توانی بررسی کنی که باز کردن آن آدرس ممکن است یا نه. مستندات و نمونه‌کدش را در pub.dev ببین؛ برای پروژهٔ بعدی به کار می‌آید. 📥 دانلود ماهانه: 6,821,535 ⭐️ 8,176 لایک 🔖 #Flutter #فلاتر #Flutter #پکیج_فلاتر #url_launcher 💎 @DevelopixFlutter
3 · 490 ·
|
| کانال توسعه‌دهندگان فلاتر |
عکس
برای نمایش کلیک کنید
با جابه‌جا شدن ترتیب کارت‌ها، چرا وضعیت هر کارت ممکنه به کارت دیگه منتقل بشه؟ مشکل کد رو چطور درست می‌کنی؟ 🔖 #Flutter #فلاتر 👤 Developix 💎 Channel: @DevelopixFlutter
418 ·

فید عمومی باز از ایندکس جست‌وجو ChatCrawler — «Google برای Telegram عمومی»؛ با خزش انجمن به‌روز می‌شود. زمان‌ها به UTC است.

فقط محتوای عمومی، API رسمی Telegram. دربارهٔ ما · پرسش‌ها · محدودیت‌های ایندکس · حذف یک صفحه · کاتالوگ · جست‌وجو · روش محاسبهٔ ما