Dart: یہ کیا ہے، Flutter زبان کی خصوصیات اور پروگرامنگ

مصنف: IT Sectr اشاعت: 2026-02-10 مطالعے کا وقت: 12 منٹ

Dart گوگل کی ایک پروگرامنگ زبان ہے، جو خاص طور پر کراس پلیٹ فارم فریمرک Flutter کے لیے بنائی گئی ہے۔ یہ تیز سے تیز ہاٹ ریلوڈ کے لیے JIT ترتیب اور ریلیز بلڈ میں نیٹو کارکردگی کے لیے AOT ترتیب کو اکٹھا کرتی ہے۔ Dart صرف موبائل ڈویلپمنٹ میں ہی نہیں، بلکہ ویب ایپلیکیشنز (AngularDart) اور سرور سائڈ حلول کے لیے بھی استعمال ہوتی ہے۔ زبان کی صلاحیتوں کے بارے میں مزید جاننے کے لیے سرکاری Dart دستاویزات دیکھیں۔

اہم نکات

  • Dart — گوگل کا بنایا ہوا Flutter زبان، JIT/AOT ترتیب کے ساتھ
  • Null safety — Dart 2.12 سے sound null safety null خطاؤں کی غیرموجودگی کی ضمانت دیتا ہے
  • Isolate — مشترکہ میموری کے بغیر علیحدہ تھریڈز کے ذریعے متوازیتا
  • Flutter — UI فریمرک جو Skia/Impeller کے ذریعے وجٹ رینڈر کرتا ہے
  • Pub.dev — Dart اور Flutter کے لیے 45,000+ لائبریریوں کا پیکیج مینیجر

Dart کیا ہے؟

Dart C کی طرح کے نحو والی ایک پروگرامنگ زبان ہے، جو Google نے Lars Bak (Eclipse کے بنانے والے) کی قیادت میں تیار کی ہے۔ پہلی ریلیز 2011 میں ہوئی تھی، لیکن Dart نے حقیقی مقبولیت 2018 میں Flutter 1.0 کے ریلیز کے ساتھ حاصل کی۔ یہ زبان یوزر انٹرفیس بنانے کے لیے ڈیزائن کی گئی ہے: اس میں stream، future اور ریئکٹو پیٹرنز کے لیے مضمراتی سپورٹ ہے۔

Dart کا فلسفہ «کارکردگی اور پیداواری کا توازن» ہے۔ زبان دو ترتیبی حکمت عملیوں کی حمایت کرتی ہے: ہاٹ ریلوڈ کے ساتھ ڈویلپمنٹ کے لیے JIT (Just-In-Time) اور نیٹو کارکردگی کے ساتھ ریلیز بلڈ کے لیے AOT (Ahead-Of-Time)۔ JIT کامپائلر APK دوبارہ ترتیب کی ضرورت کے بغیر ملی سیکنڈ میں چلنے والی ایپلیکیشن میں ترمیم شدہ کوڈ انجیکٹ کرتا ہے — موبائل ڈویلپمنٹ میں دوسری زبانوں کے مقابلے میں Dart کا یہ بنیادی فائدہ ہے۔

Dart کی ایک اہم خصوصیت sound null safety ہے، جو Dart 2.12 (2021) میں متعارف کرائی گئی تھی۔ ٹائپ سسٹم اس بات کی ضمانت دیتا ہے کہ ویری ایبل واضح اعلان (int?) کے بغیر null نہیں ہو سکتا۔ یہ ترتیب کے وقت NullPointerException کو ختم کرتا ہے۔ Google کے مطابق، null safety اپنانے سے پیداوار ماحول میں Flutter ایپلیکیشنز میں کریش کی شرح 30% کم ہوئی ہے۔

Dart ایکوسسٹم

Dart ایکوسسٹم میں تین اہم شعبے شامل ہیں: Flutter (موبائل اور ڈیسک ٹاپ ایپلیکیشنز)، AngularDart (ویب ایپلیکیشنز) اور Dart Server (سرور سائڈ حلول)۔ Flutter غالب پلیٹ فارم ہے: Statista (2025) کے مطابق، Flutter 46% کراس پلیٹ فارم موبائل منصوبوں میں استعمال ہوتا ہے، جو React Native (38%) اور Xamarin (8%) سے آگے ہے۔

Dart نحو: اقسام، فنکشنز اور کلاسیز

Dart نحو Java اور JavaScript سے ملتا جلتا ہے لیکن اس کے خود کے منفرد ڈھانچے ہیں۔ Dart میں سب کچھ ایک آبجیکٹ ہے — int، double اور bool بھی Object سے وراثت پاتے ہیں۔ ٹائپنگ اختیاری ہے: var کے طور پر اعلان کردہ ویری ایبل خودکار قسم کا اندازہ لگاتا ہے، لیکن پڑھنے میں آسانی اور کارکردگی کے لیے اقسام کو واضح طور پر متعین کرنے کی سفارش کی جاتی ہے۔

بنیادی اقسام اور اعلانات

Dart int، double، String، bool، List، Set، Map، Record، Symbol اور Runes کو سپورٹ کرتا ہے۔ Nullable قسم — ? لائق کے ساتھ کوئی بھی قسم (int?، String?)۔ ?? آپریٹر (null-aware) بائیں طرف null ہونے پر دائیں طرف کی قیمت واپس کرتا ہے۔ کیسکیڈ نوٹیشن (..) حوالہ دہرانے کے بغیر ایک ہی آبجیکٹ پر کئی میتھڈز کو کال کرنے کی اجازت دیتا ہے۔

dart
// Dart میں بنیادی اقسام اور اعلانات
void main() {
  // واضح ٹائپنگ
  int age = 25;
  double price = 19.99;
  String name = 'Dart';
  bool isValid = true;

  // Null safety — متغیر null ہو سکتا ہے
  int? nullableAge = null;
  int result = nullableAge ?? 0; // null-aware آپریٹر

  // جنرکس کے ساتھ کلیکشنز
  List<String> items = ['Dart', 'Flutter', 'Mobile'];
  Map<String, dynamic> config = {
    'version': '3.0',
    'mode': 'debug',
  };

  // کیسکیڈ نوٹیشن
  final list = <String>[]
    ..add('one')
    ..add('two')
    ..sort();
}

// Record — گمنام ناقابل تبدیل قسم
(String, int) user = ('Alice', 30);
print(user.$1); // 'Alice'

قسم dynamic قسم کی جانچ کو منتفی کرتا ہے — اسے صرف JSON یا ڈائنامک ڈیٹا کے ساتھ کام کرتے وقت استعمال کریں۔ Record Dart 3.0 میں ایک نئی قسم ہے جو علیحدہ کلاس بنائے بغیر قیمتوں کو گروپ کرنے کی اجازت دیتی ہے۔ Null-aware آپریٹر ?? لمبی if-else جانچوں کی جگہ nullable قیمتوں کے ساتھ کام کرنے کا معیاری طریقہ ہے۔

کلاسیز اور مکسینز

Dart میں کلاسیز — واحد وراثت (extends)، mixin کے ذریعے کئی (mixin)۔ Dart انٹرفیسز کو علیحدہ تصور کے طور پر سپورٹ نہیں کرتا — کوئی بھی کلاس نافذ (implements) کیا جا سکتا ہے۔ Mixin بغیر کنسٹریکٹر کی ایک کلاس ہے جس کے میتھڈز اور فیلڈز کو with کی ورڈ کا استعمال کرکے کسی بھی کلاس میں شامل کیا جا سکتا ہے۔

dart
// Dart میں کلاسیز، وراثت اور مکسینز
abstract class Animal {
  void sound(); // تجربہ میتھڈ
}

mixin Swimmer {
  void swim() => print('Swimming...');
}

mixin Flyer {
  void fly() => print('Flying...');
}

class Duck extends Animal with Swimmer, Flyer {
  @override
  void sound() => print('Quack!');
}

void main() {
  final duck = Duck();
  duck.sound(); // Quack!
  duck.swim();  // Swimming...
  duck.fly();   // Flying...
}

// نامزد کنسٹریکٹر
class Config {
  final String env;

  Config.development() : env = 'dev';
  Config.production()  : env = 'prod';
}

کلاس Duck Animal سے وراثت پاتا ہے اور دو mixin — Swimmer اور Flyer کا استعمال کرتا ہے۔ یہ یریز کے مسئلے کے بغیر کئی وراثت کو ظاہر کرتا ہے: mixin لینیئر طور پر حل کیے جاتے ہیں (super chain)۔ نامزد کنسٹریکٹرز (Config.development) پہلے سے متعین پیرامیٹرز کے ساتھ آبجیکٹ بنانے کے لیے سٹیٹک فیکٹری میتھڈز کا متبادل ہے۔

Dart میں غیر ہم زمانی: Future، Stream اور async/await

Dart میں غیر ہم زمانی Future (واحد قیمت)، Stream (قیمتوں کی ترتیب) اور async/await کے ذریعے نافذ کی جاتی ہے۔ Dart JavaScript کے مشابہ ایونٹ لوپ کے ساتھ ایک واحد تھریڈ ماڈل استعمال کرتا ہے، لیکن ایک اہم فرق کے ساتھ: لمبے حساب کام UI کو بلاک نہیں کرتے کیونکہ Dart کوڈ Isolate میں چلتا ہے — مشترکہ میموری کے بغیر ایک علیحدہ تھریڈ۔

Future ایک غیر ہم زمانی آپریشن کی نمائندگی کرتا ہے جو کچھ وقت کے بعد مکمل ہو گا۔ Future منتظر، قیمت کے ساتھ مکمل یا غلطی کے ساتھ مکمل حالت میں ہو سکتا ہے۔ زنجیر .then().catchError() async/await کا متبادل ہے، لیکن پڑھنے میں آسانی کے لیے await استعمال کرنے کی سفارش کی جاتی ہے۔

dart
// Future اور Stream کے ساتھ غیر ہم زمانی ڈیٹا لوڈنگ
import 'dart:convert';
import 'package:http/http.dart' as http;

class ApiService {
  final String baseUrl;

  ApiService(this.baseUrl);

  // ایک درخواست کے لیے Future
  Future<Map<String, dynamic>> fetchUser(int id) async {
    final response = await http.get(
      Uri.parse('$baseUrl/users/$id'),
    );

    if (response.statusCode == 200) {
      return jsonDecode(response.body);
    } else {
      throw Exception('Failed to load user: ${response.statusCode}');
    }
  }

  // ڈیٹا کی ترتیب کے لیے Stream
  Stream<int> countStream(int max) async* {
    for (var i = 1; i <= max; i++) {
      await Future.delayed(Duration(seconds: 1));
      yield i;
    }
  }
}

void main() async {
  final api = ApiService('https://api.example.com');

  // await کا استعمال
  final user = await api.fetchUser(1);
  print('User: ${user['name']}');

  // await for کے ساتھ Stream کی پروسیسنگ
  await for (final count in api.countStream(5)) {
    print('Count: $count');
  }
}

کلاس ApiService دو اقسام کی غیر ہم زمانی کو ظاہر کرتی ہے: HTTP درخواست (واحد جواب) کے لیے Future اور ترتیبی کاؤنٹر (async* اور yield کے ساتھ جنریٹر) کے لیے Stream۔ Stream سنسرز، جیولوکیشن، Firebase Realtime Database کے ساتھ کام کرنے کے لیے موثر ہے — جہاں بھی ڈیٹا لگاتار آتا ہے۔ Isolate علیحدہ میموری استعمال کرتا ہے — ڈیٹا SendPort/ReceivePort کے ذریعے منتقل ہوتا ہے۔

Dart اور Flutter: ایپلیکیشن آرکیٹیکچر

Dart اور Flutter ایک واحد اسٹیک بناتے ہیں: Flutter UI فریمرک ہے، Dart UI تفصیل کی زبان ہے۔ Flutter میں، سب کچھ ایک وجٹ (Widget) ہے — ایک بٹن سے لے کر پوری ایپلیکیشن تک۔ وجٹ stateful (قابل تبدیلی حالت کے ساتھ) اور stateless (ناقابل تبدیل) ہو سکتے ہیں۔ Dart اعلانی UI کو بیان کرتا ہے: build() ایک وجٹ ٹری لوٹاتا ہے جسے Flutter Skia (یا iOS پر Impeller) کا استعمال کرکے رینڈر کرتا ہے۔

Flutter ایپلیکیشن کی ساخت

Dart میں Flutter ایپلیکیشن main() → runApp(MyApp()) → MaterialApp پر مشتمل ہے۔ MaterialApp میں راوٹنگ (routes)، تھیم (theme) اور لوکلائزیشن شامل ہے۔ ہر سکرین ایک Scaffold ہے جس میں AppBar، Body (عام طور پر Column/ListView) اور BottomNavigationBar ہوتا ہے۔ Navigator.push/pop یا نامزد route کے ذریعے نیویگیشن۔

dart
// Dart میں سادہ Flutter ایپلیکیشن
import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Dart Demo',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int _counter = 0;

  void _increment() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Dart + Flutter')),
      body: Center(
        child: Text('Counter: $_counter'),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _increment,
        child: Icon(Icons.add),
      ),
    );
  }
}

وجٹ HomeScreen اندرونی حالت _counter کے ساتھ ایک StatefulWidget ہے۔ setState() کا استعمال Flutter کو UI دوبارہ بنانے کے لیے مطلع کرتا ہے — Dart کوڈ build() کو دوبارہ چلاتا ہے، ایک نیا وجٹ ٹری بناتا ہے۔ Flutter پرانے اور نئے ٹری کا موثر طور پر موازنہ (diff) کرتا ہے، صرف سکرین کے تبدیل شدہ حصوں کو اپ ڈیٹ کرتا ہے۔ Hot Reload _counter حالت کو ری سیٹ کیے بغیر build() کو بدل دیتا ہے۔

Dart ترتیب: JIT بنام AOT

Dart ترتیب ہائبرڈ ہے: ترقی کے لیے JIT اور پیداوار کے لیے AOT۔ ڈیبگ موڈ میں، Dart VM ایک JIT کامپائلر چلاتا ہے جو کوڈ کے ہاٹ سوئپ کی صلاحیت کے ساتھ بائٹ کوڈ کی تشریح کرتا ہے۔ ریلیز موڈ میں، dart compile exe یا flutter build ایک مخصوص آرکیٹیکچر (arm64، x86_64، armv7) کے لیے نیٹو AOT بائنری بناتا ہے۔

موڈترتیبعمل کی رفتاربائنری کا حجمہاٹ ریلوڈ
DebugJIT (VM)درمیانی~50 MBہاں
ReleaseAOT (نیٹو)انتہائی~15-20 MBنہیں
Webdart2jsبراؤزر پر منحصرمتغیرڈیو سرور

ڈیبگ موڈ میں Dart کی JIT ترتیب تقریباً 1 سیکنڈ میں ہاٹ ریلوڈ فراہم کرتی ہے — ڈویلپرز ایپلیکیشن کی حالت کو کھوئے بغیر UI تبدیلیاں دیکھ سکتے ہیں۔ AOT ترتیب نیٹو Swift/Kotlin ایپلیکیشنز کے قریب کارکردگی دیتی ہے۔ Google کے مطابق، Dart AOT پر Flutter درمیانی رینج کے آلات پر بھی 60 FPS اینیمیشنز حاصل کرتا ہے۔

Dart ڈویلپر آلات

Dart ڈویلپر آلات میں Dart SDK (dart کامپائلر، dartanalyzer، dartfmt، pub)، Flutter SDK اور IDE پلگ ان شامل ہیں۔ Dart SDK Flutter SDK کے ساتھ flutter/bin/cache/dart-sdk فولڈر میں انسٹال ہوتا ہے۔ Pub پیکیج مینیجر ہے جو pubspec.yaml پڑھتا ہے اور pub.dev سے ڈیپنڈنسیاں ڈاؤن لوڈ کرتا ہے۔

کلیدی آلات

dart analyze — سٹیٹک تجزیہ کار جو اقسام، غیر استعمال شدہ امپورٹس اور ممکنہ غلطیوں کی جانچ کرتا ہے۔ dart format — فارمیٹر جو خودکار طور پر کوڈ کو یکساں اسٹائل میں فارمیٹ کرتا ہے۔ dart doc — /// کمنٹس سے دستاویزات جنریٹر۔ Flutter DevTools — وجٹ ٹری انسپکٹر، لاگز، میموری اور نیٹ ورک کے ساتھ پروفائلر۔ Dart VM Service — WebSocket کے ذریعے چلنے والی ایپلیکیشن کا ڈیبگنگ۔

yaml
# pubspec.yaml — Dart پروجیکٹ کنفگریشن
name: my_flutter_app
description: A new Flutter project.
version: 1.0.0

environment:
  sdk: '>=3.0.0 <4.0.0'

dependencies:
  flutter:
    sdk: flutter
  http: ^1.2.0
  provider: ^6.1.0
  shared_preferences: ^2.2.0
  json_annotation: ^4.8.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.0
  json_serializable: ^6.7.0
  flutter_lints: ^3.0.0

فائل pubspec.yaml Dart پروجیکٹ کی ڈیپنڈنسیاں بیان کرتی ہے۔ فیلڈ environment:sdk Dart ورژن متعین کرتا ہے — موجودہ سٹیبل 3.x ہے۔ Dependencies اہم لائبریریاں ہیں، dev_dependencies ٹیسٹنگ اور کوڈ جنریشن کے لیے ہیں۔ json_annotation + json_serializable build_runner کے ذریعے JSON سیریلائزیشن کوڈ جنریٹ کرتے ہیں۔ flutter_lints تجزیہ کار کے لیے قوانین کا ایک سیٹ ہے۔

اکثر پوچھے گئے سوالات

Dart کیا ہے؟

Dart گوگل (2011) کی ایک پروگرامنگ زبان ہے، جو Flutter کے ساتھ کراس پلیٹ فارم ڈویلپمنٹ کے لیے ڈیزائن کی گئی ہے۔ C جیسے نحو، مضبوط ٹائپنگ، JIT اور AOT ترتیب کی حمایت کرتی ہے۔ sound null safety (Dart 2.12 سے) اور Future و Stream کے ذریعے غیر ہم زمانی سے ممتاز ہے۔ موبائل، ویب اور ڈیسک ٹاپ ایپلیکیشنز کے لیے استعمال ہوتی ہے۔

Dart JavaScript سے کیسے مختلف ہے؟

Dart نیٹو کوڈ (AOT) یا JS (dart2js) میں کمپائل ہوتی ہے، JavaScript تشریح کی جاتی ہے۔ Dart میں sound null safety کے ساتھ مضبوط ٹائپنگ، بلٹ ان کلاسز اور mixin ہیں۔ Dart کی غیر ہم زمانی Isolate (مشترکہ میموری کے بغیر علیحدہ تھریڈ) پر مبنی ہے، JS — Web Workers کے ساتھ ایونٹ لوپ پر مبنی ہے۔ موبائل منظرناموں میں Dart AOT کارکردگی V8 JIT سے 30-50% زیادہ ہے۔

Dart موبائل ایپلیکیشن میں کیسے کمپائل ہوتی ہے؟

Dart Dart Native کے ذریعے AOT میں نیٹو ARM کوڈ میں کمپائل ہوتی ہے۔ ڈیبگ موڈ میں، Dart VM ہاٹ ریلوڈ کے ساتھ JIT استعمال کرتی ہے۔ Flutter Engine (C++) Skia/Impeller کے ذریعے UI رینڈر کرتا ہے۔ Android کے لیے — flutter build apk، iOS کے لیے — flutter build ios۔ ویب بلڈ dart2js یا dart2wasm استعمال کرتا ہے۔ ریلیز APK کا حجم 15-20 MB ہے (AAB تقسیم کے بغیر)۔

Dart کون سے ڈیٹا کی اقسام کو سپورٹ کرتی ہے؟

Dart پرائمیٹو اقسام کو سپورٹ کرتی ہے: int، double، String، bool۔ کلیکشنز: List، Set، Map، Record۔ خصوصی: Symbol، Runes، Null۔ پرائمیٹو سمیت سب کچھ ایک آبجیکٹ ہے۔ Null safety: int? null کی اجازت دیتا ہے، int کبھی null نہیں۔ ??، ??= آپریٹرز محفوظ null ہینڈلنگ کے لیے۔ جنرکس: List<String>، Map<String, dynamic>۔

Dart ڈویلپمنٹ کے لیے کون سے آلات ضروری ہیں؟

Flutter SDK میں Dart SDK، Flutter Engine اور وجٹ لائبریری شامل ہے۔ IDE — Flutter پلگ ان کے ساتھ Android Studio یا VS Code۔ DevTools — وجٹ انسپکٹر کے ساتھ پروفائلر۔ Pub.dev — 45,000+ لائبریریوں کے ساتھ پیکیج مینیجر۔ dart analyze اور dart format آلات کوڈ کوالٹی کو یقینی بناتے ہیں۔ JSON ماڈلز کے کوڈ جنریشن کے لیے Build_runner۔

خلاصہ

  • Dart — Flutter کے لیے گوگل کی زبان، JIT ڈویلپمنٹ اور AOT کارکردگی کو یکجا کرتی ہے
  • Sound null safety Dart 2.12 (+3.0) سے — ٹائپ لیول پر لازمی null حفاظت
  • غیر ہم زمانی Future (واحد نتیجہ)، Stream (ترتیب)، Isolate (متوازیتا) کے ذریعے
  • Flutter — اعلانی UI فریمرک جہاں سب کچھ وجٹ ہے (StatelessWidget / StatefulWidget)
  • Hot Reload — ایپلیکیشن کی حالت کھوئے بغیر تقریباً 1 سیکنڈ میں JIT کوڈ ریلوڈ
  • Pub.dev — پیکیج ایکوسسٹم (45,000+)، pubspec.yaml کے ذریعے منظم
  • Flutter DevTools — وجٹ انسپکٹر، میموری اور نیٹ ورک کے ساتھ پروفائلر

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں