شروع فلاتر از صفر: نصب، اولین اپ و ساختار پروژه
اگر میخواهید فلاتر را شروع کنید، این راهنما قدمبهقدم شما را از نصب SDK تا اجرای اولین اپ و فهمیدن ساختار پروژه میبرد؛ همراه با نکاتی که در شروع کار وقتتان را نجات میدهد.
انتخاب راهحل مدیریت state یکی از اولین سؤالهای هر برنامهنویس فلاتر است. این مقاله فرق setState، Provider، Riverpod و Bloc را با مثال کد توضیح میدهد و میگوید در چه پروژهای کدام را انتخاب کنید.

«State» یعنی دادهای که رابط کاربری بر اساس آن ساخته میشود و با گذر زمان عوض میشود: شمارندهی سبد خرید، کاربر واردشده، نتیجهی یک جستجو. سؤال اصلی این است: این داده کجا نگه داشته شود و چطور رابط با تغییرش بهروز شود؟
برای state محلی یک ویجت (مثل باز یا بسته بودن یک پنل) کافی است:
class CounterPage extends StatefulWidget {
const CounterPage({super.key});
@override
State<CounterPage> createState() => _CounterPageState();
}
class _CounterPageState extends State<CounterPage> {
int count = 0;
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () => setState(() => count++),
child: Text('$count'),
);
}
}مشکل وقتی شروع میشود که چند صفحه به یک داده نیاز دارند. تا آنجا که ممکن است state را به بالا ببرید، ولی بعد از یک حدی بدون ابزار مناسب پیچیده میشود.
لایهی سادهای روی InheritedWidget است. یک کلاس ChangeNotifier میسازید و بالای درخت ویجتها قرار میدهید:
class CartModel extends ChangeNotifier {
final List<String> items = [];
void add(String item) {
items.add(item);
notifyListeners();
}
}
// near the root
ChangeNotifierProvider(create: (_) => CartModel(), child: const MyApp());
// in any widget below
final cart = context.watch<CartModel>();یادگیریاش آسان است و برای پروژههای کوچک تا متوسط عالی کار میکند.
نسل تکاملیافتهی Provider: وابسته به BuildContext نیست، تستپذیری بهتری دارد و کامپایلتایم امنتر است:
final counterProvider = NotifierProvider<Counter, int>(Counter.new);
class Counter extends Notifier<int> {
@override
int build() => 0;
void increment() => state++;
}
// in a ConsumerWidget
final count = ref.watch(counterProvider);
ref.read(counterProvider.notifier).increment();برای کار با دادههای ناهمگام (درخواست شبکه) هم ابزارهای آماده دارد.
الگوی «رویداد ← حالت». هر عملیات یک رویداد است و خروجی یک state جدید. کدنویسی بیشتری میخواهد ولی نظم و قابلپیشبینیبودنش برای تیمهای بزرگ و اپهای پیچیده ارزشمند است.
setState و ValueNotifier.بهترین ابزار مدیریت state ابزاری است که تیم شما خوب بلد است.
دورهی VIP فست فلاتر از صفر تا انتشار اپلیکیشن، با پشتیبانی مستقیم مدرس.