شروع فلاتر از صفر: نصب، اولین اپ و ساختار پروژه
اگر میخواهید فلاتر را شروع کنید، این راهنما قدمبهقدم شما را از نصب SDK تا اجرای اولین اپ و فهمیدن ساختار پروژه میبرد؛ همراه با نکاتی که در شروع کار وقتتان را نجات میدهد.
Dart در سالهای اخیر خیلی قدرتمندتر شده است. این ده قابلیت، از null safety و async/await تا records و pattern matching، کد فلاتر شما را کوتاهتر، امنتر و خواناتر میکند.

Dart زبان فلاتر است و نسخههای اخیرش قابلیتهایی دارد که اگر بلد باشید، کد فلاتر شما کوتاهتر، امنتر و خواناتر میشود. این ده قابلیت را حتماً بشناسید.
در Dart هیچ متغیری بهطور پیشفرض نمیتواند null باشد. اگر null لازم است، صریحاً با ? اعلامش میکنید و کامپایلر شما را مجبور میکند حالت null را مدیریت کنید:
String? name;
print(name?.length ?? 0); // safe call + default valueعملیات زمانبر مثل درخواست شبکه، با Future و await شبیه کد معمولی نوشته میشود:
Future<String> loadTitle() async {
final response = await fetchFromServer();
return response.title;
}Stream دنبالهای از مقادیر در طول زمان است (مثل پیامهای یک چت). با await for یا ویجت StreamBuilder مصرفش میکنید.
class User {
final String name;
final int age;
const User({required this.name, this.age = 18});
}خوانایی هنگام ساخت شیء خیلی بالاتر میرود: User(name: 'علی').
میتوانید به کلاسهای موجود متد اضافه کنید، بدون ارثبری:
extension Greeting on String {
String get shout => '${toUpperCase()}!';
}
print('hi'.shout); // HI!برای ساخت لیستهای شرطی داخل رابط کاربری عالی است:
final items = [
'خانه',
if (isLoggedIn) 'حساب من',
...extraItems,
];بدون ساخت کلاس، چند مقدار را با هم برگردانید:
(String, int) nameAndAge() => ('سارا', 28);
final (name, age) = nameAndAge();String label(int score) => switch (score) {
>= 90 => 'عالی',
>= 70 => 'خوب',
_ => 'تلاش بیشتر',
};برای مدلکردن «چند حالت ممکن» (مثل loading / data / error) ایدهآل است، چون کامپایلر کاملبودن switch را چک میکند:
sealed class UiState {}
class Loading extends UiState {}
class Data extends UiState { final String text; Data(this.text); }
class Failure extends UiState { final String message; Failure(this.message); }برای چند عملیات پشتسرهم روی یک شیء:
final paint = Paint()
..color = Colors.blue
..strokeWidth = 4
..style = PaintingStyle.stroke;لازم نیست همه را یکجا یاد بگیرید. با null safety و async/await شروع کنید، بعد sealed class و pattern matching را برای مدیریت وضعیت رابط کاربری یاد بگیرید. همینها تفاوت کد «کار میکند» با کد «حرفهای» هستند.
دورهی VIP فست فلاتر از صفر تا انتشار اپلیکیشن، با پشتیبانی مستقیم مدرس.