ਸਿੱਖੋ Dart ਕਿਉਂ ਬਣਾਈ ਗਈ, ਇਹ ਅਸਲ ਸਮੱਸਿਆਵਾਂ ਕਿਹੜੀਆਂ ਹੱਲ ਕਰਦੀ ਹੈ, ਅਤੇ ਇਸ ਦਾ ਰਨਟਾਈਮ, ਟੂਲਿੰਗ ਤੇ Flutter ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਕਿਵੇਂ ਤੇਜ਼ ਤੇ ਨਰਮ ਮੋਬਾਈਲ ਐਪਾਂ ਯੋਗ ਬਣਾਉਂਦੇ ਹਨ।

Dart ਇੱਕ ਆਧੁਨਿਕ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ ਹੈ ਜੋ Google ਨੇ ਬਣਾਈ ਅਤੇ ਇਹ ਮੁੱਖ ਤੌਰ 'ਤੇ ਸੁਚੱਜੇ ਅਤੇ ਨਰਮ UI ਵਾਲੀਆਂ ਐਪਾਂ ਬਣਾਉਣ 'ਤੇ ਧਿਆਨ ਦਿੰਦੀ ਹੈ। ਬਹੁਤ ਸਾਰੇ ਲੋਕ Dart ਨਾਲ Flutter ਰਾਹੀਂ ਮਿਲਦੇ ਹਨ: ਜੇ ਤੁਸੀਂ ਕਿਸੇ Flutter-ਬਣਾਈ ਮੋਬਾਈਲ ਐਪ ਦਾ ਉਪਯੋਗ ਕੀਤਾ ਹੈ, ਤਾਂ ਸੰਭਾਵਨਾ ਹੈ ਕਿ ਉਸ ਦੀ UI ਅਤੇ ਬਹੁਤ ਸਾਰਾ ਲਾਜਿਕ Dart ਵਿੱਚ ਲਿਖਿਆ ਹੋਵੇਗਾ। ਡਿਵੈਲਪਰ Dart ਨੂੰ ਇਸ ਲਈ ਨੋਟਿਸ ਕਰਦੇ ਹਨ ਕਿਉਂਕਿ ਇਹ UI ਕੰਮ ਲਈ ਖਾਸ ਤੌਰ 'ਤੇ ਬਣੀ ਮਹਿਸੂਸ ਹੁੰਦੀ ਹੈ—ਇਤਰੇਟ ਕਰਨ ਵਿੱਚ ਤੇਜ਼, ਪੜ੍ਹਨ ਵਿੱਚ ਅਸਾਨ, ਅਤੇ ਪੇਸ਼ਗੀ ਨਿਰਧਾਰਿਤ ਪ੍ਰਦਰਸ਼ਨ ਨਾਲ ਡਿਜ਼ਾਇਨ ਕੀਤੀ ਗਈ।
ਜੇ ਕੋਈ ਐਪ iOS ਅਤੇ Android 'ਤੇ ਇੱਕੋ ਹੀ UI ਸਲੂਕ ਅਤੇ ਨਿਰੰਤਰ, ਪਾਲਿਸ਼ਡ ਅਪਡੇਟਸ ਦਿਖਾਉਂਦਾ ਹੈ, ਤਾਂ ਉਹ ਸੰਭਵਤ: Flutter ਐਪ ਹੋ ਸਕਦੀ ਹੈ—ਅਤੇ ਵਰਕ ਅਕਸਰ Dart ਦੇ ਥੱਲੇ ਹੁੰਦਾ ਹੈ। ਟੀਮਾਂ Dart ਨੂੰ ਚੁਣਦੀਆਂ ਹਨ ਜਦੋਂ ਉਹ ਇੱਕ ਹੀ ਕੋਡਬੇਸ ਨਾਲ ਕਈ ਪਲੇਟਫਾਰਮਾਂ ਲਈ ਚਾਹੁੰਦੇ ਹਨ ਬਿਨਾਂ ਰਿਸਪਾਂਸਿਵਨੈਸ ਨੂੰ ਦੱਸੇ।
Dart ਕੁਝ ਪ੍ਰੈਕਟਿਕਲ ਲਕਸ਼ਾਂ ਨਾਲ ਬਣੀ ਸੀ ਜੋ ਹਕੀਕਤੀ ਐਪ ਵਿਕਾਸ ਨਾਲ ਮਿਲਦੀਆਂ ਹਨ:
ਇਹ ਆਲੇ-ਦੁਆਲੇ ਵਿਆਖਿਆ ਕਰੇਗਾ ਡਾਰਟ ਕਿਉਂ ਬਣਾਇਆ ਗਿਆ, ਉਹਨਾਂ ਸਮੱਸਿਆਵਾਂ ਦਾ ਵੇਰਵਾ ਜੋ ਇਹ ਹੱਲ ਕਰਦੀ ਹੈ ਆਧੁਨਿਕ ਮੋਬਾਈਲ ਐਪਾਂ ਲਈ, ਅਤੇ ਇਹ Flutter ਨੂੰ ਅਮਲ ਵਿੱਚ ਕਿਵੇਂ ਸਮਰਥਿਤ ਕਰਦੀ ਹੈ। ਅਸੀਂ ਵੇਖਾਂਗੇ ਕਿ Dart ਵਿਕਾਸ ਦੌਰਾਨ ਅਤੇ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਕਿਵੇਂ ਚਲਦੀ ਹੈ, ਇਹ async ਕੰਮਾਂ ਨੂੰ UI ਨੂੰ ਜਮ੍ਹਾ ਕੀਤੇ ਬਿਨਾਂ ਕਿਵੇਂ ਨਿਭਾਉਂਦੀ ਹੈ, ਅਤੇ ਕਿਹੜੀਆਂ ਭਾਸ਼ਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਸਮੇਂ ਨਾਲ ਬਗ ਅਤੇ ਕੋਈ-maintenance ਖ਼ਰਚੇ ਘਟਾਉਂਦੀਆਂ ਹਨ।
Dart ਨੂੰ ਉਸ ਫੰਕਸ਼ਨਲ ਖੇਤਰ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਬਣਾਇਆ ਗਿਆ ਸੀ ਜੋ ਕਈ ਟੀਮਾਂ ਨੇ ਕਲਾਇੰਟ ਪਾਸੇ ਮਹਿਸੂਸ ਕੀਤਾ: ਇੰਟਰਐਕਟਿਵ ਐਪਾਂ ਬਣਾਉਣਾ ਜਿਸ ਵਿੱਚ ਰਿਚ UI ਹੋਵੇ ਪਰ ਫਿਰ ਵੀ ਤੇਜ਼ ਲੋਡ, ਨਰਮ ਅਨੁਭਵ ਅਤੇ ਵੱਧਣ ਤੇ ਸੰਭਾਲ ਯੋਗ ਹੋਵੇ।
ਉਸ ਸਮੇਂ, ਡਿਵੈਲਪਰਅਕਸਰ ਐਹੋ ਜਿਹੇ ਚੋਣਾਂ ਵਿੱਚ ਫਸ ਰਹੇ ਸਨ—ਜੋ ਭਾਸ਼ਾ ਸਕ੍ਰਿਪਟਿੰਗ ਅਤੇ ਤੁਰੰਤ ਪ੍ਰੋਟੋਟਾਈਪ ਲਈ ਵਧੀਆ ਸੀ, ਜਾਂ ਜੋ ਵੱਡੇ ਕੋਡਬੇਸ ਅਤੇ ਲੰਮੀ ਮਿਆਦ ਵਾਲੀ ਰਖ-ਰਖਾਵ ਲਈ ਵਧੀਆ ਸੀ—ਪਰ ਦੋਹਾਂ ਨਹੀਂ। Dart ਦਾ ਲਕਸ਼ ਇਹ ਸੀ ਕਿ ਇੱਕ ਆਧੁਨਿਕ, ਪਹੁੰਚਯੋਗ ਭਾਸ਼ਾ ਦਿੰਵੇ ਜੋ ਛੋਟੇ ਡੈਮੋ ਤੋਂ ਲੈ ਕੇ ਵੱਡੇ ਉਤਪਾਦ ਤੱਕ ਸਕੇਲ ਕਰ ਸਕੇ ਬਿਨਾਂ ਮੁੜ ਲਿਖਣ ਦੇ।
Dart ਦਾ ਡਿਜ਼ਾਇਨ ਇੱਕ ਪ੍ਰੈਕਟਿਕਲ ਸਵਾਲ ਤੋਂ ਸ਼ੁਰੂ ਹੋਇਆ: ਜਦੋਂ ਭਾਸ਼ਾ ਯੂਜ਼ਰ-ਫੇਸਿੰਗ ਐਪਾਂ ਬਣਾਉਣ ਲਈ ਵਰਤੀ ਜਾਏ—ਜਿਹੜੀਆਂ ਰਿਸਪਾਂਸਿਵ ਇੰਟਰਫੇਸ, ਕਾਫ਼ੀ ਸਟੇਟ ਅਪਡੇਟਸ, ਐਨੀਮੇਸ਼ਨ, ਨੈੱਟਵਰਕਿੰਗ ਅਤੇ ਲਗਾਤਾਰ ਫੀਚਰ ਕੰਮ ਹਨ—ਉਸ ਸੰਦਰਭ ਵਿੱਚ ਭਾਸ਼ਾ ਕਿਵੇਂ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ?
ਇਸ ਨੇ ਪੇਸ਼ਗੀ ਨਿਰਧਾਰਿਤ ਪ੍ਰਦਰਸ਼ਨ, ਟੂਲਿੰਗ ਅਤੇ ਇੱਕ ਐਕੋਸਿਸਟਮ 'ਤੇ ਧਿਆਨ ਦਿੱਤਾ ਜੋ ਸਾਫ਼, ਪੜ੍ਹਨਯੋਗ ਕੋਡ ਨੂੰ ਉਤਸ਼ਾਹਿਤ ਕਰੇ। ਇੰImportantly, Dart ਇਹਨਾ ਤੌਰ 'ਤੇ ਜਾਣ ਪਛਾਣਯੋਗ ਹੋਣ ਲਈ ਬਣੀ ਸੀ ਕਿ Java, JavaScript ਜਾਂ C-ਸਟਾਈਲ ਭਾਸ਼ਾਵਾਂ ਤੋਂ ਆਏ ਵਿਕਾਸਕਰਤਾ ਤੇਜ਼ੀ ਨਾਲ ਉਤਪਾਦਕ ਹੋ ਸਕਣ।
Dart ਕੁਝ ਸਾਫ਼ ਟਾਰਗਟ ਲਈ ਸੀ:
ਇਹ ਲਕਸ਼ ਭਾਸ਼ਾ ਦੇ ਬਾਅਦ ਦੇ ਫੈਸਲਿਆਂ ਨੂੰ ਰੂਪ ਦਿੱਤਾ—ਜਿਵੇਂ ਮਜ਼ਬੂਤ ਸਟੈਂਡਰਡ ਲਾਇਬਰੇਰੀ, ਇੱਕ ਸੰਰਚਿਤ async ਮਾਡਲ, ਅਤੇ ਅਜਿਹੇ ਫੀਚਰ ਜੋ ਗਲਤੀਆਂ ਨੂੰ ਪਹਿਲਾਂ ਫੜਨ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ।
Dart ਬਹੁਤ ਸਾਰਿਆਂ ਮੋਬਾਈਲ ਡਿਵੈਲਪਰਾਂ ਲਈ ਤਦੋਂ ਹੀ ਨਹੀਂ ਦਿੱਖੀ ਜਦ ਤੱਕ Flutter ਤੇਜ਼ੀ ਨਾਲ ਵਧਿਆ ਨਾ। Flutter ਨੇ Dart ਨੂੰ ਇੱਕੋ ਕੋਡਬੇਸ ਨਾਲ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ, ਕ੍ਰਾਸ-ਪਲੇਟਫਾਰਮ UI ਬਣਾਉਣ ਦਾ ਡਿਫੌਲਟ ਢੰਗ ਬਣਾ ਦਿੱਤਾ।
ਸਪਸ਼ਟ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ: Dart ਮੂਲ ਰੂਪ ਵਿੱਚ "Flutter ਲਈ" ਬਣੀ ਨਹੀਂ ਸੀ। ਪਰ Flutter ਆਖਿਰਕਾਰ ਉਹ ਉਤਪਾਦ ਬਣਿਆ ਜੋ Dart ਦੇ ਲਕਸ਼ਾਂ ਨਾਲ ਬਹੁਤ ਚੰਗੀ ਤਰ੍ਹਾਂ ਮਿਲਦਾ—ਤੇਜ਼ ਡਿਵੈਲਪਰ ਇਟਰੇਸ਼ਨ, UI-ਭਾਰੀ ਐਪ, ਅਤੇ ਵਧਦਿਆਂ ਕੋਡ ਨੂੰ ਸਮਝਣਯੋਗ ਰੱਖਣ ਦੀ ਲੋੜ।
Dart "ਸਿਰਫ ਦੂਜੀ ਭਾਸ਼ਾ" ਬਣਨ ਲਈ ਨਹੀਂ ਸੀ। ਇਹ ਉਹ ਹੱਕੀਕਤੀ ਸਮੱਸਿਆਵਾਂ ਟਾਰਗਟ ਕਰਦੀ ਹੈ ਜੋ ਟੀਮਾਂ ਨੂੰ ਸਾਹਮਣੇ ਆਉਂਦੀਆਂ ਹਨ—ਉਹਨਾਂ ਮੋਬਾਈਲ ਐਪਾਂ ਲਈ ਜਿਹੜੀਆਂ ਨਰਮ ਮਹਿਸੂਸ ਹੁੰਦੀਆਂ ਹਨ, ਅਕਸਰ ਰਿਲੀਜ਼ ਹੁੰਦੀਆਂ ਹਨ, ਅਤੇ ਵੱਧਣ 'ਤੇ ਸੰਭਾਲਯੋਗ ਰਹਿੰਦੀਆਂ ਹਨ।
ਰਵਾਇਤੀ ਮੋਬਾਈਲ ਵਰਕਫਲੋਜ਼ ਅਕਸਰ ਪ੍ਰਯੋਗਾਂ ਨੂੰ ਸਜ਼ਾ ਦਿੰਦੇ ਹਨ: ਤੁਸੀਂ ਬਟਨ ਦਾ ਰੰਗ ਜਾਂ ਲੇਆਉਟ ਬਦਲਦੇ ਹੋ, ਫਿਰ rebuild, reinstall ਅਤੇ ਉਹ ਸਕ੍ਰੀਨ ਤੇ ਦੁਬਾਰਾ ਜਾਣ ਲਈ ਉਡੀਕ ਕਰਦੇ ਹੋ।
Dart (Flutter ਦੇ ਨਾਲ) ਬਹੁਤ ਤੇਜ਼ ਇਟਰੇਸ਼ਨ ਲਈ ਡਿਜ਼ਾਇਨ ਕੀਤਾ ਗਿਆ—ਮਕਸਦ ਸਧਾਰਨ ਹੈ: UI ਕੰਮ ਨੂੰ ਇਕ ਦਸਤਾਵੇਜ਼ ਸੋਧਣ ਵਰਗਾ ਮਹਿਸੂਸ ਕਰਵਾਉਣਾ—ਸੋਧੋ, ਵੇਖੋ, ਠੀਕ ਕਰੋ—ਤਾਂ ਜੋ ਵਿਕਾਸਕਰਤਾ ਵੱਧ ਕਦਮ ਬੰਦ ਕਰਕੇ ਵਿਚਾਰਾਂ ਦਾ ਟੈਸਟ ਕਰ ਸਕਣ ਅਤੇ ਸਮੱਸਿਆਵਾਂ ਜਲਦੀ ਠੀਕ ਹੋਣ।
ਮੋਬਾਈਲ ਯੂਜ਼ਰ ਗੰਭੀਰਤਾ ਨਾਲ jank ਨੂੰ ਤੁਰੰਤ ਮਹਿਸੂਸ ਕਰਦੇ ਹਨ, ਖ਼ਾਸ ਕਰਕੇ ਐਨੀਮੇਸ਼ਨ-ਭਾਰੀ ਇੰਟਰਫੇਸਾਂ ਵਿੱਚ: ਸਕ੍ਰੋਲਿੰਗ ਲਿਸਟਾਂ, ਟ੍ਰਾਂਜ਼ਿਸ਼ਨ, ਅਤੇ ਜੈਸਚਰ-ਚਲਿਤ ਪ੍ਰਭਾਵ।
Dart ਲਕਸ਼ ਕਰਦੀ ਹੈ ਕਿ ਫਰੇਮ-ਟਰੈਫਿਕ ਸਥਿਰ ਹੋਵੇ—ਫਰੇਮ-ਟਾਈਮਾਂ ਲੱਗਾਤਾਰ ਮਿਲਣ—ਫਰੇਮ ਛੱਡਣ ਘਟ ਸਕਣ। ਇਹ frameworks ਨੂੰ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਨੈਟਿਵ ਕੋਡ ਵਿੱਚ ਕੰਪਾਈਲ ਕਰਨ ਦੀ ਸਹੂਲਤ ਦਿੰਦਾ ਅਤੇ concurrency ਨੂੰ ਐਸੇ ਢੰਗ ਨਾਲ ਬਣਾਂਦਾ ਜੋ UI ਥਰੇਡ ਨੂੰ ਜਮ੍ਹਾ ਨਾ ਕਰੇ।
ਦੋ ਅਲੱਗ ਨੈਟਿਵ ਐਪਾਂ ਦੀ ਰਖ-ਰਖਾਵ ਅਕਸਰ ਮਤਲਬ:
Dart ਇੱਕ ਸਾਂਝੀ ਕੋਡਬੇਸ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ ਜੋ ਅਸਲ ਨੈਟਿਵ ਐਪਸ ਤਿਆਰ ਕਰ ਸਕਦਾ ਹੈ, ਨਕਲ ਘਟਾਉਂਦਾ ਹੈ ਬਿਨਾਂ ਟੀਮਾਂ ਨੂੰ ਐਪ-ਸਟੋਰ-ਤਿਆਰ ਪ੍ਰਦਰਸ਼ਨ ਛੱਡਣ 'ਤੇ ਮਜ਼ਬੂਰ ਕੀਤੇ।
ਐਪ ਵੱਧਣ ਨਾਲ, ਬਗ ਅਕਸਰ glue ਕੋਡ ਤੋਂ ਆਉਂਦੇ ਹਨ: ਨੈੱਟਵਰਕ ਕਾਲਾਂ, ਬੈਕਗ੍ਰਾਊਂਡ ਟਾਸਕ, ਸਟੇਟ ਅਪਡੇਟ ਅਤੇ ਡੇਟਾ ਮਾਡਲ।
Dart ਇਸਨੂੰ ਉਨ੍ਹਾਂ ਭਾਸ਼ਾ ਫੀਚਰਾਂ ਨਾਲ ਹੱਲ ਕਰਦਾ ਹੈ ਜੋ asynchronous ਵਰਕਫਲੋ ਨੂੰ ਪੜ੍ਹਨਯੋਗ ਬਣਾਂਦੇ ਹਨ (ਇਸ ਤਰ੍ਹਾਂ ਘੱਟ callback tangles) ਅਤੇ strong null-safety tooling ਨਾਲ crashes ਘਟਾਉਂਦੇ ਹਨ—ਉਹ ਮੁਦਦੇ ਜੋ ਬਾਅਦ ਵਿੱਚ ਮਹਿੰਗੇ ਸਫਾਈ ਕੰਮ ਬਣ ਜਾਂਦੇ ਹਨ।
Dart ਇੱਕ ਅਜਿਹਾ ਭਾਸ਼ਾ ਹੈ ਜੋ ਦੋ "ਮੋਡ" ਲਈ ਡਿਜ਼ਾਇਨ ਕੀਤੀ ਗਈ ਹੈ, ਜੋ ਤੁਹਾਡੇ ਕੰਮ ਦੇ ਪਰਕਾਰ ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ: ਬਿਲਡ ਕਰਨਾ ਜਾਂ ਸ਼ਿਪ ਕਰਨਾ।
ਡਿਵੈਲਪਮੈਂਟ ਦੌਰਾਨ, ਤੁਹਾਡਾ ਕੋਡ ਆਮ ਤੌਰ 'ਤੇ Dart VM 'ਤੇ ਚਲਦਾ ਹੈ—ਇਕ ਰਨਟਾਈਮ ਇੰਜਨ ਜੋ ਤੁਹਾਡੀ ਐਪ ਨੂੰ ਲੋਡ ਕਰ ਸਕਦਾ ਹੈ, ਚਲਾ ਸਕਦਾ ਹੈ ਅਤੇ ਚੱਲਦੇ ਸਮੇਂ ਇਸ ਨੂੰ ਅਪਡੇਟ ਵੀ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ Dart ਕੋਡ ਲਿਖਦੇ ਹੋ, run ਦਬਾਉਂਦੇ ਹੋ, ਅਤੇ VM ਉਹ ਕੋਡ ਡਿਵਾਈਸ ਲਈ ਚਲਨਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।
ਇਹ ਸੈਟਅੱਪ ਹੀ ਤੇਜ਼ edit–run ਚੱਕਰ ਦੀ ਸਹੂਲਤ ਦਿੰਦਾ ਹੈ: VM ਲਚਕੀਲਾ ਹੈ ਅਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਬਿਨਾਂ ਪੂਰੇ ਰੀਬਿਲਡ ਦੇ ਲਾਗੂ ਕਰ ਸਕਦਾ ਹੈ।
Ahead-of-time ਕੰਪਾਈਲ ਕਰਨ ਨਾਲ ਉਹ ਚੀਜ਼ਾਂ ਸੁਧਾਰਦੀਆਂ ਹਨ ਜੋ ਯੂਜ਼ਰ ਤੁਰੰਤ ਮਹਿਸੂਸ ਕਰਦੇ ਹਨ:
ਇਸਦਾ ਸਾਰ ਇਹ ਹੈ: JIT ਡਿਵੈਲਪਰ ਨੂੰ ਤੇਜ਼ੀ ਦੇਂਦਾ ਹੈ; AOT ਉਪਭੋਗਤਾ ਅਨੁਭਵ ਦੀ ਉਤਮਤਾ ਲਈ।
ਜਦੋਂ ਤੁਸੀਂ ਬਰਾਊਜ਼ਰ ਨੂੰ ਟਾਰਗਟ ਕਰਦੇ ਹੋ, Dart VM ਨਹੀਂ ਭੇਜੀ ਜਾਂਦੀ। ਬਰਾਊਜ਼ਰ ਲਈ Dart ਆਮ ਤੌਰ 'ਤੇ JavaScript ਵਿੱਚ ਕੰਪਾਈਲ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਕਿਉਂਕਿ ਬਰਾਊਜ਼ਰ ਉਹੀ ਚਲਾਉਂਦੇ ਹਨ। ਲਕਸ਼ ਇੱਕੋ ਜਿਹਾ ਰਹਿੰਦਾ ਹੈ: ਵਿਕਾਸਕ ਫੀਡਬੈਕ ਲੂਪ ਸਥਿਰ ਰੱਖੋ ਪਰ ਪਲੇਟਫਾਰਮ ਦੀ ਹਕੀਕਤ ਲਈ ਉਤਪਾਦ ਤਿਆਰ ਕਰੋ।
Hot reload ਇੱਕ ਦਿਨ-ਪ੍ਰਤੀ ਦਿਨ ਦਾ ਸਭ ਤੋਂ ਵੱਖਰਾ ਫਾਇਦਾ ਹੈ Dart + Flutter ਦੀ ਵਰਤੋਂ ਨਾਲ। ਬਦਲੇ ਹੋਏ ਕੋਡ ਲਈ ਤੁਹਾਨੂੰ ਐਪ ਨੂੰ ਰੋਕਣਾ, ਦੁਬਾਰਾ ਬਨਾਉਣਾ, ਦੁਬਾਰਾ ਇੰਸਟਾਲ ਕਰਨਾ ਅਤੇ ਉਸ ਸਕ੍ਰੀਨ ਤੇ ਵਾਪਸ ਜਾਣ ਦੀ ਲੋੜ ਨਹੀਂ—ਤੁਸੀਂ ਚੱਲ ਰਹੀ ਐਪ ਵਿੱਚ ਕੋਡ ਦੇ ਬਦਲਾਅ ਇਨਜੈਕਟ ਕਰ ਸਕਦੇ ਹੋ ਅਤੇ UI ਲਗਭਗ ਤੁਰੰਤ ਅਪਡੇਟ ਹੋ ਜਾਂਦੀ ਹੈ।
Hot reload ਤੁਹਾਡੇ ਐਪ ਦਾ ਕੋਡ ਅਪਡੇਟ ਕਰਦਾ ਹੈ ਜਦੋਂ ਕਿ ਮੌਜੂਦਾ session ਜਿੰਦਾ ਰਹਿੰਦੀ ਹੈ। ਇਸਦਾ ਅਰਥ ਆਮ ਤੌਰ 'ਤੇ ਇਹ ਹੈ:
UI-ਭਾਰੀ ਕੰਮ ਲਈ, ਇਹ ਵਿਕਾਸ ਦੇ ਤਰੀਕੇ ਨੂੰ "edit → wait → re-open → re-navigate" ਤੋਂ "edit → glance → adjust" ਵਿੱਚ ਬਦਲ ਦਿੰਦਾ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਸਪੇਸਿੰਗ, ਟਾਇਪੋਗ੍ਰਾਫੀ, ਐਨੀਮੇਸ਼ਨ ਜਾਂ ਇੰਟਰੈਕਸ਼ਨਾਂ ਟਿਉਨ ਕਰ ਰਹੇ ਹੁੰਦੇ ਹੋ, ਇਹ ਬਚੇ ਹੋਏ ਸਕਿੰਟ ਤੇਜ਼ੀ ਨਾਲ ਵੱਧਦੇ ਹਨ।
Hot reload ਜਾਦੂ ਨਹੀਂ ਹੈ ਅਤੇ ਇਸ ਦੀਆਂ ਹੱਦਾਂ ਨੂੰ ਜਾਣਨਾ ਗਲਤ ਫੈਸਲਿਆਂ ਤੋਂ ਬਚਾਉਂਦਾ ਹੈ:
ਕਲਪਨਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਇੱਕ checkout ਸਕ੍ਰੀਨ ਬਣਾ ਰਹੇ ਹੋ ਅਤੇ "Place order" ਬਟਨ ਤੰਗ ਲੱਗ ਰਿਹਾ ਹੈ। ਤੁਸੀਂ padding 12 ਤੋਂ 16 ਕਰਦੇ ਹੋ, ਫੋਂਟ ਵਜ਼ਨ ਠੀਕ ਕਰਦੇ ਹੋ, ਅਤੇ ਬਟਨ ਨੂੰ ਨੀਵੇਂ ਬਾਰ ਵਿੱਚ ਲਿਆਉਂਦੇ ਹੋ। Hot reload ਨਾਲ ਤੁਸੀਂ ਨਵੇਂ ਲੇਆਉਟ ਨੂੰ ਤੁਰੰਤ ਡਿਵਾਈਸ 'ਤੇ ਵੇਖਦੇ ਹੋ, ਟੈਪ ਕਰਕੇ ਜਾਂਚਦੇ ਹੋ ਕਿ ਕੁਝ ਓਵਰਲੈਪ ਨਹੀਂ ਹੋ ਰਿਹਾ, ਅਤੇ ਉਹਦੇ ਤੱਕ ਫਿਰ ਇਟਰੇਟ ਕਰਦੇ ਰਹਿੰਦੇ ਹੋ—ਹਰ ਵਾਰੀ ਐਪ ਰੀਸਟਾਰਟ ਕੀਤੇ ਬਿਨਾਂ।
ਅਸਲੀ ਮੋਬਾਈਲ ਐਪ "ਤੇਜ਼" ਇਸ ਲਈ ਨਹੀਂ ਮਹਿਸੂਸ ਹੁੰਦੇ ਕਿ ਕੋਈ ਬੈਂਚਮਾਰਕ ਉਹ ਦਰਸਾਉਂਦਾ ਹੈ—ਉਹ ਤੇਜ਼ ਮਹਿਸੂਸ ਹੁੰਦੇ ਹਨ ਜਦੋਂ UI ਵਾਸ਼ਤੇ ਸਧਾਰਨ ਰਹਿੰਦੀ ਹੈ ਜਦੋਂ ਐਪ ਅਸਲ ਕੰਮ ਕਰ ਰਹੀ ਹੋਵੇ।
ਨਰਮ UI ਦਾ ਮਤਲਬ ਲਗਾਤਾਰ ਫਰੇਮ ਰੇਂਡਰਿੰਗ (ਉਦਾਹਰਨ: ਲਗਾਤਾਰ 60 fps ਜਾਂ 120 fps) ਅਤੇ ਜਵਾਬਦੇਹ ਇਨਪੁੱਟ ਹੈ। ਜਦੋਂ ਫਰੇਮ ਦੇਰੀ ਹੁੰਦੀ ਹੈ, ਤੁਸੀਂ jank ਦੇਖਦੇ ਹੋ: ਸਕ੍ਰੋਲ ਰੁਕਦਾ ਹੈ, ਐਨੀਮੇਸ਼ਨ ਹਿਚ ਹੁੰਦੀ ਹੈ, ਅਤੇ ਟੈਪ ਦੇ ਜਵਾਬ ਦੇਰੀ ਨਾਲ ਆਉਂਦੇ ਹਨ। ਇੱਥੇ ਤੱਕ ਕਿ 50–100 ms ਦੀ ਛੋਟੀ ਰੋਕ ਵੀ ਨੋਟਿਸ ਹੋ ਸਕਦੀ ਹੈ।
Dart isolates ਦੀ ਵਰਤੋਂ UI ਦੇ ਜਮ੍ਹੇ ਹੋਣ ਤੋਂ ਰੋਕਣ ਲਈ ਕਰਦਾ ਹੈ। ਇੱਕ isolate ਆਪਣਾ ਅਲੱਗ ਵਰਕਰ ਹੋਂਦਾ ਹੈ ਜਿਸਦਾ ਮੈਮੋਰੀ ਵੀ ਵੱਖਰਾ ਹੁੰਦਾ ਹੈ, ਇਸ ਲਈ ਮਹਿੰਗੇ ਕੰਮ ਦੂਜੇ isolate 'ਤੇ ਚਲਾ ਸਕਦੇ ਹਨ ਬਿਨਾਂ ਮੁੱਖ isolate ਨੂੰ ਰੋਕਣ ਦੇ ਜੋ ਫਰੇਮ ਰੇਂਡਰ ਅਤੇ ਜੈਸਚਰ ਹੈਂਡਲ ਕਰਦਾ ਹੈ।
ਇਹ ਇਸ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿਉਂਕਿ ਕਈ ਆਮ ਓਪਰੇਸ਼ਨ ਕਾਫੀ ਭਾਰੀ ਹੋ ਸਕਦੇ ਹਨ:
ਇੱਕ ਸਧਾਰਨ ਪੈਟਰਨ ਇਹ ਹੈ: UI ਕੰਮ ਮੁੱਖ isolate ਵਿੱਚ ਰੱਖੋ, ਮੋਹਰੀ ਕੰਪਿਊਟੇਸ਼ਨ ਦੂਜੇ isolate ਨੂੰ ਭੇਜੋ, ਅਤੇ ਨਤੀਜੇ message passing ਰਾਹੀਂ ਵਾਪਸ ਲਵੋ।
ਹਰ ਕੰਮ ਨੂੰ ਵੱਖਰੇ isolate ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। ਬਹੁਤ ਸਮਾਂ I/O 'ਤੇ ਉਡੀਕ ਵਿੱਚ ਲੰਘਦਾ ਹੈ: ਨੈੱਟਵਰਕ ਕਾਲਾਂ, ਡੇਟਾਬੇਸ ਪੜ੍ਹਾਈ, ਫਾਇਲ ਐਕਸੈਸ। Dart ਦੇ Future ਅਤੇ async/await ਤੁਹਾਡੀ ਕੋਡ ਨੂੰ ਬਿਨਾਂ event loop ਨੂੰ ਬਲਾਕ ਕੀਤੇ ਉਡੀਕਣ ਦੇ ਸਕਦੇ ਹਨ, ਤਾਂ ਜੋ UI ਰੇਂਡਰ ਕਰਨ ਅਤੇ ਇਨਪੁੱਟ ਲਈ ਖੁੱਲਾ ਰਹੇ।
final data = await api.fetchProfile(); // waiting, not blocking UI
setState(() => profile = data);
ਮੁੱਖ ਫਰਕ: I/O ਉਡੀਕ ਲਈ async/await ਵਰਤੋ, ਅਤੇ ਜਦੋਂ CPU ਕੰਮ (ਪਾਰਸਿੰਗ, ਪ੍ਰੋਸੈਸਿੰਗ, ਕ੍ਰਿਪਟੋ) ਮੁੱਖ isolate ਤੋਂ ਫਰੇਮ ਰੇਂਡਰ ਸਮਾਂ ਚੋਰੀ ਕਰ ਸਕੇ ਤਾਂ isolates ਵਰਤੋਂ।
Dart ਨੂੰ ਇਸ ਤਰੀਕੇ ਨਾਲ ਤਿਆਰ ਕੀਤਾ ਗਿਆ ਕਿ ਟੀਮਾਂ UI-ਭਾਰੀ ਐਪਾਂ ਨੂੰ ਇੰਝ ਸ਼ਿਪ ਕਰ ਸਕਣ ਕਿ ਰਖ-ਰਖਾਵ ਸਦਾ ਦੀ ਲੜਾਈ ਨਾ ਬਣੇ। ਇਹ ਲਾਭ ਬਹੁਤ ਹੱਦ ਤੱਕ ਉਹਨਾਂ ਭਾਸ਼ਾ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਤੋਂ ਆਉਂਦਾ ਹੈ ਜੋ ਆਮ ਗਲਤੀਆਂ ਨੂੰ ਜਲਦੀ ਰੋਕਦੇ ਹਨ—ਉਹਨਾਂ ਨੂੰ ਪ੍ਰਬੰਧ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ—ਜੋ ਅਕਸਰ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ crashes ਜਾਂ ਬਾਅਦ ਦੇ ਸਪ੍ਰਿੰਟਾਂ ਵਿੱਚ ਮਹਿੰਗੇ ਸਾਫ਼-ਸੁਥਰੇ ਕੰਮ ਬਣ ਜਾਂਦੇ ਹਨ।
Null safety ਇਹ ਬਨਾਉਂਦੀ ਹੈ ਕਿ "ਕੀ ਇਹ ਖ਼ਾਲੀ ਹੋ ਸਕਦਾ ਹੈ?" ਇੱਕ ਜਾਣ-ਪਛਾਣਯੋਗ ਚੋਣ ਹੋਵੇ। ਜੇ ਮੁੱਲ ਲਾਜ਼ਮੀ ਹੈ, ਟਾਈਪ ਸਿਸਟਮ ਇਸ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ; ਜੇ ਇਹ ਗੈਰ-ਲਾਜ਼ਮੀ ਹੈ, ਤੁਹਾਨੂੰ ਉਸ ਨੂੰ ਸਪਸ਼ਟ ਤਰੀਕੇ ਨਾਲ ਸੰਭਾਲਣਾ ਪੈਂਦਾ ਹੈ।
ਦਿਨ-ਚਰਿਆਈ ਫਾਇਦੇ:
Dart ਦੀ ਸਟੈਟਿਕ ਟਾਈਪਿੰਗ IDE ਸਹਾਇਤਾ ਨੂੰ ਸੁਧਾਰਦੀ ਹੈ (autocomplete, ਨੈਵੀਗੇਸ਼ਨ, ਰੀਫੈਕਟਰ) ਅਤੇ subtle runtime surprises ਘਟਾਉਂਦੀ ਹੈ। Generics ਵੀ ਕੋਡ ਨੂੰ ਸੰਗਠਿਤ ਰੱਖਦੇ ਹਨ—ਕਲਾੈਕਸ਼ਨ ਅਤੇ APIs ਨੂੰ ਮਜ਼ਬੂਤ ਟਾਈਪ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ (ਉਦਾਹਰਨ ਲਈ List<User>), ਜਿਸ ਨਾਲ ਦੇਰ ਨਾਲ ਆਉਣ ਵਾਲੀਆਂ "ਗਲਤ ਡੇਟਾ ਆਕਾਰ" ਦੀਆਂ ਗਲਤੀਆਂ ਘਟਦੀਆਂ ਹਨ।
Extensions ਤੁਹਾਨੂੰ ਮੌਜੂਦਾ ਟਾਈਪਸ 'ਤੇ ਕੇਂਦਰਿਤਹੀਲਪ ਕਰ ਜੋੜਨ ਦਿੰਦੇ ਹਨ ਬਿਨਾਂ ਹਰ ਜਗ੍ਹਾ utility classes ਬਣਾਉਣ ਦੇ (ਉਦਾਹਰਨ, DateTime ਤੇ ਫਾਰਮੈਟਿੰਗ ਜਾਂ String ਤੇ ਵੈਲਿਡੇਸ਼ਨ)। ਇਹ async ਸ਼ੈਲੀ (async/await) ਨਾਲ ਮਿਲ ਕੇ ਆਮ ਐਪ ਲਾਜਿਕ ਨੂੰ ਪੜ੍ਹਨਯੋਗ ਰੱਖਦੇ ਹਨ, ਨਾ ਕਿ nested callbacks ਵਿੱਚ ਬਦਲ ਦਿੰਦੇ ਹਨ।
Dart ਦਾ ਪੈਕੇਜ ਇਕੋਸਿਸਟਮ ਇੱਕ ਤਾਕਤ ਹੈ, ਪਰ dependencies ਲੰਬੇ ਸਮੇਂ ਲਈ ਜ਼ਿੰਮੇਵਾਰੀਆਂ ਵੀ ਬਣ ਸਕਦੀਆਂ ਹਨ। ਵਧੇਰੇ-ਰੱਖ-ਰਖਾਵ ਵਾਲੇ ਪੈਕੇਜਾਂ ਨੂੰ ਤਰਜੀਹ ਦਿਓ, ਹਾਲੀਆ ਰਿਲੀਜ਼ ਅਤੇ issue activity ਚੈੱਕ ਕਰੋ, ਅਤੇ ਆਪਣੀ dependency ਸੂਚੀ ਛੋਟੀ ਰੱਖੋ। ਵਰਜਨ ਨੂੰ ਸੋਚ-ਸਮਝ ਕੇ ਪਿਨ ਕਰੋ ਅਤੇ ਨਿਯਮਤ ਅਪਡੇਟ ਕਰੋ ਤਾਂ ਜੋ ਸੁਰੱਖਿਆ ਅਤੇ breaking changes ਇਕੱਠੇ ਨਾ ਹੋ ਜਾਣ।
Flutter "ਨੈਟਿਵ ਕੰਟਰੋਲਾਂ ਉੱਤੇ UI ਲੇਅਰ" ਨਹੀਂ ਹੈ। ਇਹ ਆਪਣਾ UI ਫ੍ਰੇਮ-ਬਾਈ-ਫ੍ਰੇਮ ਡਰਾਇ ਕਰਦਾ ਹੈ, ਅਤੇ Dart ਉਹ ਭਾਸ਼ਾ ਹੈ ਜੋ ਇਹ ਕਰਨਾ ਯੋਗਯ ਬਣਾਉਂਦੀ ਹੈ ਬਿਨਾਂ ਟੀਮ ਨੂੰ ਸست ਕਰਦੇ ਹੋਏ।
Flutter ਐਪ widget ਤੋਂ ਬਣਦੇ ਹਨ—ਛੋਟੇ, ਰੀਯੂਜ਼ੇਬਲ ਬਲਾਕ ਜੋ ਵਰਤੋਂ-ਅਨੁਸਾਰ UI ਦੀ ਵਿਆਖਿਆ ਕਰਦੇ ਹਨ। Dart ਦੀ ਸੰਟੈਕਸ ਇਹ ਟਰੀਆਂ ਲਿਖਣਾ ਪਾਠਯੋਗ ਤਰੀਕੇ ਨਾਲ ਸਹਾਇਕ ਬਣਾਉਂਦੀ ਹੈ, ਅਤੇ ਇਸ ਦੀ async ਖ਼ੂਬੀ event (ਟੈਪ, ਨੈੱਟਵਰਕ ਨਤੀਜੇ, stream) ਦਾ ਸਾਫ਼ ਜਵਾਬ ਦੇਣਾ ਸੌਖਾ ਕਰਦੀ ਹੈ।
ਜਦੋਂ ਕੁਝ ਬਦਲਦਾ ਹੈ, Flutter ਉਸ widget ਟਰੀ ਦੇ ਉਹ ਹਿੱਸੇ rebuild ਕਰਦਾ ਹੈ ਜੋ ਉਸ ਸਟੇਟ 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। ਇਹ "rebuild ਸਧਾਰਣ ਹੈ" ਮਾਡਲ ਵਧੀਆ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਡਾ ਕੋਡ ਤੇਜ਼ ਹੋਵੇ ਅਤੇ ਰੀਫੈਕਟਰ ਕਰਨ ਵਿੱਚ ਸੌਖਾ ਹੋਵੇ—ਦੋ ਖੇਤਰ ਜਿੱਥੇ Dart ਦੀ ਟੂਲਿੰਗ ਅਤੇ ਭਾਸ਼ਾ ਡਿਜ਼ਾਇਨ ਮਦਦ ਕਰਦੀ ਹੈ।
Flutter ਨਰਮ UI ਅਪਡੇਟਸ ਨੂੰ ਟਾਰਗਟ ਕਰਦਾ ਹੈ, ਜੋ consistent frame times 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। Dart ਡਿਵੈਲਪਮੈਂਟ ਦੌਰਾਨ ਤੇਜ਼ iteration (JIT) ਸਮਰਥਨ ਕਰਦਾ ਹੈ ਅਤੇ ਰਿਲੀਜ਼ ਬਿਲਡਾਂ ਲਈ AOT 'ਚ ਕੰਪਾਈਲ ਕਰਦਾ ਹੈ। AOT ਨਿਕਾਸ ਰਨਟਾਈਮ ਓਵਰਹੈਡ ਨੂੰ ਦੂਰ ਕਰਦਾ ਹੈ ਜੋ ਐਨੀਮੇਸ਼ਨ-ਭਾਰੀ ਇੰਟਰਫੇਸ ਵਿੱਚ jank ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ।
ਇਸ ਤੋਂ ਇਲਾਵਾ: Flutter ਦਾ rendering pipeline ਪੇਸ਼ਗੀ ਨਿਰਧਾਰਿਤ ਹੈ। Dart ਕੋਡ ਇੱਕ managed runtime ਵਿੱਚ ਚਲਦਾ ਹੈ ਜਿਸ ਦਾ ਡਿਫਾਲਟ UI ਮਾਡਲ ਇੱਕ-ਥਰੇਡ ਵਾਲਾ ਹੈ, ਜੋ ਬਹੁਤ ਸਾਰੀਆਂ ਆਮ "UI ਥਰੇਡ" ਗਲਤੀਆਂ ਨੂੰ ਘਟਾਉਂਦਾ ਹੈ ਪਰ ਜਦੋਂ ਲੋੜ ਹੋਵੇ ਤਾਂ background work ਦੀ ਆਗਿਆ ਵੀ ਦਿੰਦਾ ਹੈ।
Buttons, padding, rows, themes, navigation—ਇਨ੍ਹਾਂ ਵਿੱਚੋਂ ਜ਼ਿਆਦਾਤਰ ਕੁਝ widget ਹੁੰਦੇ ਹਨ। ਇਹ ਤੱਤ abstract ਲੱਗ ਸਕਦੇ ਹਨ ਪਰ ਅਸਲ ਵਿੱਚ ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੈ ਕਿ ਰੀਯੂਜ਼ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਤਰੀਕੇ ਨਾਲ composition ਦੇ ਰਾਹੀਂ ਹੁੰਦੀ ਹੈ, inheritance ਦੇ ਬਦਲੇ। ਤੁਸੀਂ ਕਿਸੇ ਵੀ ਤੱਤ ਦੇ ਆਲੇ-ਦੁਆਲੇ spacing, styling, gestures ਵਰਗਾ ਵਿਹਾਰ consistent ਤਰੀਕੇ ਨਾਲ ਲਪੇਟ ਸਕਦੇ ਹੋ।
ਜ਼ਿਆਦਾਤਰ ਟੀਮਾਂ ਕੁਝ ਉੱਚ-ਸਤਰ ਦੇ approaches ਵਿੱਚੋਂ ਇੱਕ ਚੁਣਦੀਆਂ ਹਨ—ਸਧਾਰਨ ਸਕ੍ਰੀਨਾਂ ਲਈ local setState, ਐਪ-ਵਿਆਪਕ dependencies ਲਈ Provider/Riverpod, ਜਾਂ event-driven flows ਲਈ BLoC/Cubit। ਸ੍ਰੇਸ਼ਠ ਚੋਣ ਆਮ ਤੌਰ 'ਤੇ ਐਪ ਦੀ ਜਟਿਲਤਾ ਅਤੇ ਟੀਮ ਦੀ ਪਸੰਦ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ, ਨਾ ਕਿ ਸਿਧਾਂਤ।
ਜੇ ਤੁਹਾਨੂੰ ਇੱਕ ਪ੍ਰਯੋਗਿਕ ਤੁਲਨਾ ਚਾਹੀਦੀ ਹੈ, ਤਾਂ ਵੇਖੋ /blog/flutter-state-management।
ਕ੍ਰਾਸ-ਪਲੇਟਫਾਰਮ ਦਾ ਮਤਲਬ "ਕੋਈ ਨੈਟਿਵ ਕੋਡ ਨਹੀਂ" ਨਹੀਂ ਹੁੰਦਾ। ਅਸਲ ਐਪਾਂ ਨੂੰ ਹਮੇਸ਼ਾਂ ਪਲੇਟਫਾਰਮ-ਖਾਸ ਫੀਚਰਾਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ—ਕੈਮਰਾ ਕੰਟਰੋਲ, push ਨੋਟੀਫਿਕੇਸ਼ਨ, Bluetooth, biometrics, in-app payments, background services, ਅਤੇ ਡੀਪ OS ਇੰਟੀਗ੍ਰੇਸ਼ਨ। Dart ਦੀ ਐਕੋਸਿਸਟਮ (ਖ਼ਾਸ ਕਰਕੇ Flutter ਨਾਲ) ਇਸ ਤਰੀਕੇ ਨਾਲ ਬਣੀ ਹੈ ਕਿ ਤੁਸੀਂ ਉਹ ਖ਼ੂਬੀਆਂ ਪ੍ਰਾਪਤ ਕਰ ਸਕੋ ਬਿਨਾਂ ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਮਿਕਸ-ਲੈਂਗਵੇਜ ਬਣਾਉਣ ਦੇ।
Platform channels Dart ਕੋਡ ਲਈ ਇੱਕ ਸੰਰਚਿਤ ਤਰੀਕਾ ਹਨ ਨੈਟਿਵ ਕੋਡ (Kotlin/Java on Android, Swift/Obj‑C on iOS) ਨੂੰ ਕਾਲ ਕਰਨ ਅਤੇ ਨਤੀਜਾ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ।
ਉੱਚ ਤੌਰ 'ਤੇ, ਤੁਹਾਡਾ Dart ਕੋਡ ਸੁਨੇਹਾ ਭੇਜਦਾ ਹੈ ਜਿਵੇਂ "payment ਸ਼ੁਰੂ करो" ਜਾਂ "Bluetooth ਡਿਵਾਈਸ ਸਕੈਨ ਕਰੋ", ਅਤੇ ਨੈਟਿਵ ਪਾਸੇ OS-ਖਾਸ ਕੰਮ ਕਰਦਾ ਹੈ ਅਤੇ ਡੇਟਾ (ਜਾਂ error) ਵਾਪਸ ਭੇਜਦਾ ਹੈ। ਜ਼ਿਆਦਾਤਰ ਟੀਮਾਂ ਇਹ ਇਸ ਲਈ ਵਰਤਦੀਆਂ ਹਨ:
ਪੈਦਾ وار ਬਣਾਵਟ: ਤੁਸੀਂ ਅਕਸਰ ਆਪਣੀ ਬਹੁਤ ਜ਼ਿਆਦਾਤਰ ਐਪ Dart ਵਿੱਚ ਰੱਖਦੇ ਹੋ, ਅਤੇ ਪਲੇਟਫਾਰਮ-ਖਾਸ ਕੋਡ ਨੂੰ ਛੋਟੇ, ਵਧੀਆ ਪਰਿਭਾਸ਼ਿਤ ਸੀਮਾਵਾਂ ਵਿੱਚ ਰੱਖਦੇ ਹੋ।
Dart FFI (Foreign Function Interface) Dart ਨੂੰ C APIs ਨੂੰ ਸਿੱਧਾ ਕਾਲ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ, ਬਿਨਾਂ message-based channel ਮਾਡਲ ਦੇ। ਤੁਸੀਂ FFI ਵਰਤੋਂ ਜਦੋਂ:
ਨੈਟਿਵ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਸ਼ਕਤੀਸ਼ালী ਹਨ, ਪਰ ਇਹ ਪੇਚੀਦਗੀ ਵਧਾਉਂਦੇ ਹਨ:
ਬਿਹਤਰ ਅਭਿਆਸ ਇਹ ਹੈ ਕਿ ਨੈਟਿਵ ਕਾਲਾਂ ਨੂੰ ਛੋਟੇ Dart API ਵਿੱਚ ਰੈਪ ਕਰੋ, ਹਰ ਪਲੇਟਫਾਰਮ ਲਈ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਟੈਸਟ ਸ਼ਾਮਲ ਕਰੋ, ਅਤੇ Dart ਅਤੇ ਨੈਟਿਵ ਕੋਡ ਦੇ ਵਿਚਕਾਰ ਸਪਸ਼ਟ contract ਦਸਤਾਵੇਜ਼ ਕਰੋ।
Dart ਫੋਨ 'ਤੇ Flutter ਚਲਾਉਣ ਲਈ ਸਭ ਤੋਂ ਪ੍ਰਸਿੱਧ ਹੈ, ਪਰ ਉਹੀ ਭਾਸ਼ਾ ਅਤੇ ਇੱਕ ਵੱਡੀ ਹਿੱਸਾ ਕੋਡ ਦੀ ਉਹੀ ਲਾਇਬ੍ਰੇਰੀ ਹੋਰ ਥਾਵਾਂ 'ਤੇ ਵੀ ਚੱਲ ਸਕਦੀ ਹੈ। ਸੂਤਰ ਇਹ ਹੈ ਕਿ ਕੀਅਸੀ ਪੂਰੀ ਤਰ੍ਹਾਂ ਪੋਰਟੇਬਲ ਰਹਿੰਦਾ ਹੈ (ਆਮ ਤੌਰ 'ਤੇ ਬਿਜਨੈਸ ਲੋਜਿਕ) ਅਤੇ ਕੀ ਪਲੇਟਫਾਰਮ-ਖਾਸ ਰਹਿੰਦਾ ਹੈ (ਅਕਸਰ UI ਅਤੇ ਇੰਟੀਗ੍ਰੇਸ਼ਨ)।
Dart ਬਰਾਊਜ਼ਰ 'ਚ ਚੱਲ ਸਕਦੀ ਹੈ (ਅਕਸਰ JavaScript ਵਿੱਚ ਕੰਪਾਈਲ ਕਰਕੇ)। ਟੀਮਾਂ ਅਕਸਰ ਸਾਂਝੀ ਕਰਦੀਆਂ ਹਨ:
ਜੋ ਆਮ ਤੌਰ 'ਤੇ ਅਡੈਪਟ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ:
ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਪਹਿਲਾਂ ਹੀ ਇੱਕ Flutter ਐਪ ਹੈ, ਤਾਂ Flutter Web UI ਕੋਡ ਨੂੰ ਮਿਲਾ ਸਕਦਾ ਹੈ, ਪਰ ਵੈੱਬ-ਖਾਸ ਪੋਲਿਸ਼ ਲਈ ਸਮਾਂ ਰੱਖੋ।
Flutter Windows, macOS, ਅਤੇ Linux ਨੂੰ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। ਆਮ ਤਰੀਕਾ ਇਹ ਹੈ ਕਿ UI ਸੰਰਚਨਾ ਅਤੇ ਸਟੇਟ ਮੈਨੇਜਮੈਂਟ ਨੂੰ ਮਿਲਾਇਆ ਰੱਖੋ, ਜਦਕਿ ਅਨੁਕੂਲਤਾ:
Dart ਕਮਾਂਡ-ਲਾਈਨ ਟੂਲਜ਼, ਬਿਲਡ ਸਕ੍ਰਿਪਟਾਂ, ਅਤੇ ਹਲਕੇ ਬੈਕਐਂਡ ਲਈ ਵੀ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਆਪਣੀ ਐਪ ਦੇ ਡੇਟਾ ਮਾਡਲ ਜਾਂ API ਕਲਾਇਂਟ ਨੂੰ ਸਾਂਝਾ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ ਜਾਂ ਇੱਕ ਇਕ-ਭਾਸ਼ਾ ਟੂਲਚੇਨ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ Dart ਪਰੇਨ ਵਾਲੀ ਚੋਣ ਹੋ ਸਕਦੀ ਹੈ। ਭਾਰੀ ਸਰਵਰ ਈਕੋਸਿਸਟਮ ਲਈ, ਤੁਹਾਡੇ ਫੈਸਲੇ ਦਾ ਨਿਰਭਰ ਲਾਇਬ੍ਰੇਰੀਜ਼ ਅਤੇ ਟੀਮ ਅਨੁਭਵ 'ਤੇ ਹੋਣਾ ਹੋਵੇਗਾ।
ਉਦੇਸ਼ ਇਹ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਬਿਜਨੈਸ ਲੋਜਿਕ (ਮਾਡਲ, ਸਰਵਿਸਜ਼, ਸਟੇਟ, ਟੈਸਟ) ਨੂੰ ਮੋਬਾਈਲ/ਵੈੱਬ/ਡੈਸਕਟਾਪ ਵਿੱਚ ਸਾਂਝਾ ਕਰੋ, ਅਤੇ UI ਤੇ ਨੈਟਿਵ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਨੂੰ ਪਲੇਟਫਾਰਮ ਪਰਤਾਂ ਵਜੋਂ ਰੱਖੋ। ਇਸ ਨਾਲ ਪੋਰਟੇਬਿਲਿਟੀ ਉੱਚੀ ਰਹਿੰਦੀ ਹੈ ਬਿਨਾਂ ਹਰ ਪਲੇਟਫਾਰਮ ਨੂੰ ਇਕੋ ਹੀ ਯੂਜ਼ਰ ਅਨੁਭਵ ਵਿੱਚ ਜ਼ਬਰਦਸਤੀ ਕਰਨ ਦੇ।
Dart ਅਕਸਰ ਉਸ ਵੇਲੇ ਚਮਕਦੀ ਹੈ ਜਦੋਂ ਤੁਹਾਡਾ ਮੁੱਖ ਲਕਸ਼ ਤੇਜ਼ੀ ਨਾਲ ਇੱਕ ਪਾਲਿਸ਼ਡ, ਇੰਟਰਐਕਟਿਵ ਉਤਪਾਦ ਸ਼ਿਪ ਕਰਨਾ ਹੈ—ਬਿਨਾਂ ਵੱਖ-ਵੱਖ iOS ਅਤੇ Android ਕੋਡਬੇਸ ਰੱਖਣ ਦੇ। ਪਰ ਇਹ ਹਰ ਐਪ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਟੂਲ ਨਹੀਂ ਹੈ, ਖ਼ਾਸ ਕਰਕੇ ਜੇ ਤੁਸੀਂ ਡੂੰਘਾਈ ਨਾਲ ਪਲੇਟਫਾਰਮ-ਖਾਸ UI ਰਵਾਇਤਾਂ ਜਾਂ نੀਸ਼ ਨੈਟਿਵ ਟੂਲਿੰਗ 'ਤੇ ਨਿਰਭਰ ਹੋ।
ਜੇ ਤੁਹਾਡੀ ਐਪ UI-ਭਾਰੀ ਹੈ—ਘਣੇ ਸਕ੍ਰੀਨ, ਐਨੀਮੇਸ਼ਨ, ਕਸਟਮਕੰਪੋਨੈਂਟ, ਤੇਜ਼ ਡਿਜ਼ਾਈਨ-ਟਿ੍ਵਿਕ—ਤਾਂ Dart ਇੱਕ ਮਜ਼ਬੂਤ ਚੋਣ ਹੈ। Hot reload ਅਤੇ ਇੱਕ ਸਾਂਝਾ ਕੋਡਬੇਸ ਸ਼ੁਰੂਅਾਤੀਆਂ ਅਤੇ ਉਤਪਾਦ ਟੀਮਾਂ ਲਈ ਜੋ ਹਫ਼ਤਾਵਾਰ ਇਟਰੇਸ਼ਨ ਕਰਦੀਆਂ ਹਨ, ਇੱਕ ਪ੍ਰਯੋਗਿਕ ਫਾਇਦਾ ਹੈ।
ਇਹ ਉਨ੍ਹਾਂ ਹਾਲਾਤਾਂ ਵਿੱਚ ਵੀ ਚੰਗਾ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਪਲੇਟਫਾਰਮਾਂ 'ਤੇ ਇੱਕੋ ਜੇਹੀ UI ਚਾਹੁੰਦੇ ਹੋ, ਜਾਂ ਜਦੋਂ ਤੁਹਾਡੀ ਟੀਮ ਨੂੰ ਇੱਕ-ਸੈੱਟ ਫੀਚਰਾਂ, ਇੱਕ-ਸੈੱਟ ਬਗਜ਼ ਅਤੇ ਇੱਕ-ਰਿਲੀਜ਼ ਕੈਲੰਡਰ ਰੱਖਣਾ ਮਹੱਤਵਪੂਰਨ ਹੋਵੇ।
ਜੇ ਤੁਹਾਨੂੰ ਬਹੁਤ ਖ਼ਾਸ ਨੈਟਿਵ UI ਰੀਤੀਆਂ ਦੀ ਪਾਲਨਾ ਕਰਨੀ ਲਾਜ਼ਮੀ ਹੋਵੇ ਜੋ ਹਰ ਪਲੇਟਫਾਰਮ 'ਤੇ ਵੱਡੇ ਤੌਰ 'ਤੇ ਵੱਖ-ਵੱਖ ਹਨ (ਜਾਂ ਤੁਹਾਨੂੰ ਪਲੇਟਫਾਰਮ ਦੀ ਨਵੀਂ UI ਫਰੇਮਵਰਕ ਫੱਟੀ-ਫੱਟੇ ਵਰਤਣੀ ਹੋਵੇ), ਤਾਂ ਪੂਰੀ ਤਰ੍ਹੀ Native ਵਿਕਾਸ ਸਧਾਰਨ ਹੋ ਸਕਦਾ ਹੈ।
ਹੋਰ friction ਵਾਲੀ ਗੱਲ ਉਹ ਹੈ ਜਦੋਂ ਤੁਸੀਂ niche SDKs ਜਾਂ hardware ਇੰਟੀਗ੍ਰੇਸ਼ਨ 'ਤੇ ਨਿਰਭਰ ਹੋ ਜਿੱਥੇ Dart/Flutter plugin ecosystem patla ਹੋ। ਤੁਸੀਂ ਨੈਟਿਵ bridges ਲਿਖ ਸਕਦੇ ਹੋ, ਪਰ ਇਸ ਨਾਲ "ਇੱਕ ਟੀਮ, ਇੱਕ ਕੋਡਬੇਸ" ਦਾ ਲਾਭ ਘੱਟ ਹੋ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਝੰਝਟ ਵੱਧ ਜਾਂਦੀ ਹੈ।
ਹਾਇਰਿੰਗ ਆਮ ਤੌਰ 'ਤੇ ਤੇਕਨੀਕੀ ਹੈ, ਪਰ ਤੁਹਾਡੇ ਸਥਾਨਕ ਬਜ਼ਾਰ ਵਿੱਚ ਸ਼ਾਇਦ ਨੈਟਿਵ ਇੰਜੀਨੀਅਰ ਜ਼ਿਆਦਾ ਮਿਲਣ। ਹੋਰ ਗੱਲ-existing ਕੋਡ: ਜੇ ਤੁਹਾਡੇ ਕੋਲ ਪਹਿਲਾਂ ਹੀ ਮੈਚਰ ਨੈਟਿਵ ਐਪ ਹਨ, ਤਾਂ ਸਵਿੱਚ ਕਰਨ ਦੀ ਲੋੜ ਸਿਰਫ਼ ਤਦ ਹੀ ਲਾਭਕਾਰੀ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਮੁੱਖ ਹਿੱਸੇ ਨੂੰ ਮੁੜ-ਬਨਾਉ ਰਹੇ ਹੋ।
ਜੇ ਤੁਸੀਂ ਅਕਸਰ "ਹਾਂ" ਕਹਿੰਦੇ ਹੋ ਤਾਂ, Dart ਇੱਕ ਪ੍ਰਗਟਿਕ ਚੋਣ ਹੋ ਸਕਦੀ ਹੈ। ਜੇ ਕਈਆਂ ਦੇ ਜਵਾਬ "ਨਹੀਂ" ਹਨ, ਤਾਂ ਨੈਟਿਵ-ਪ੍ਰਾਥਮਿਕਤਾ ਜਾਂ ਹਾਈਬ੍ਰਿਡ ਦ੍ਰਿਸ਼ਟੀਕੋਣ 'ਤੇ ਵਿਚਾਰ ਕਰੋ।
ਜੇ ਤੁਸੀਂ ਸਮਝਣਾ ਚਾਹੁੰਦੇ ਹੋ ਕਿ Dart ਆਧੁਨਿਕ ਐਪ ਵਿਕਾਸ ਲਈ ਕਿਵੇਂ ਚੰਗੀ ਹੈ, ਸਭ ਤੋਂ ਤੇਜ਼ ਰਸਤਾ ਇਹ ਹੈ ਕਿ ਵਰਕਫਲੋ ਸਵਿੱਖੋ। ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਸਭ ਕੁਝ ਸਿੱਖਣ ਦੀ ਲੋੜ ਨਹੀਂ—ਕਿਸੇ ਅਸਲੀ ਚੀਜ਼ ਨੂੰ ਚਲਾਕੀ ਨਾਲ ਚਲਾਉ, ਫਿਰ ਜੋ ਬਣਦਾ ਹੈ ਉਸ ਦੇ ਅਧਾਰ 'ਤੇ ਗਿਆਨ ਵਧਾਓ।
Flutter ਇੰਸਟਾਲ ਕਰੋ (ਇਹ Dart SDK ਨੂੰ ਬੰਡਲ ਕਰਦਾ ਹੈ), ਫਿਰ flutter doctor ਚਲਾਓ ਤਾਂ ਜੋ ਮਸ਼ੀਨ ਤਿਆਰ ਹੋਵੇ।
ਨਮੂਨਾ ਐਪ ਬਣਾਓ ਅਤੇ ਚਲਾਓ:
flutter create hello_dart
cd hello_dart
flutter run
lib/main.dart ਖੋਲ੍ਹੋ, ਇੱਕ widget ਬਦਲੋ (ਉਦਾਹਰਨ ਲਈ Text() ਦੀ string ਸੋਧੋ ਜਾਂ ਰੰਗ ਟਵੀਕ ਕਰੋ), ਅਤੇ save ਕਰੋ। ਤੁਸੀਂ hot reload ਰਾਹੀਂ ਐਪ ਦਾ ਤੁਰੰਤ ਅਪਡੇਟ ਵੇਖਣ ਚਾਹੀਦਾ ਹੈ—ਇਹ Dart ਦੀ tight feedback loop ਨੂੰ ਅਨੁਭਵ ਕਰਨ ਦਾ ਸਭ ਤੋਂ ਆਸਾਨ ਤਰੀਕਾ ਹੈ।ਜੇ ਤੁਹਾਡਾ ਮੰਤਵ ਟੀਚੇਸ਼ੀ ਪਦਾਰਥ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨੀ ਹੈ (ਸਿਰਫ਼ ਭਾਸ਼ਾ ਸਿੱਖਣਾ ਨਹੀਂ), ਤਾਂ "UI + backend + ਡੇਟਾਬੇਸ" ਪਰੋਟੋਟਾਈਪ ਅਕਸਰ ਅਸਲੀ ਰੁਕਾਵਟ ਹੁੰਦੀ ਹੈ। ਪਲੇਟਫਾਰਮ ਜਿਵੇਂ Koder.ai ਇੱਥੇ ਮਦਦਗਾਰ ਹੋ ਸਕਦੇ ਹਨ: ਇਹ ਇਕ vibe-coding ਵਰਕਫਲੋ ਹੈ ਜਿੱਥੇ ਤੁਸੀਂ ਚੈਟ ਵਿੱਚ ਐਪ ਵਰਣਨ ਕਰਕੇ ਇੱਕ ਕੰਮ ਕਰਨ ਵਾਲਾ ਇੰਪਲੀਮੈਂਟੇਸ਼ਨ ਤੇਜ਼ੀ ਨਾਲ ਜਨਰੇਟ ਕਰ ਸਕਦੇ ਹੋ। Flutter ਟੀਮਾਂ ਲਈ, ਇਹ ਪਹਿਲੇ ਸਕਰੀਨ ਅਤੇ ਫਲੋਜ਼ ਜਲਦੀ ਉਤਾਰਨ ਵਿੱਚ ਖ਼ਾਸ ਤੌਰ 'ਤੇ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ, ਫਿਰ Dart ਵਿੱਚ hot reload ਨਾਲ ਰੂਪ-ਰੇਖਾ ਸਹੀ ਕਰਦੇ ਹੋਏ ਇਟਰੇਟ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਜੇ ਤੁਹਾਨੂੰ ਬੈਕਐਂਡ ਦੀ ਵੀ ਲੋੜ ਹੈ, ਤਾਂ Koder.ai Go ਸਰਵਿਸਜ਼ PostgreSQL ਨਾਲ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਸੋਰਸ ਕੋਡ ਐਕਸਪੋਰਟ, ਡਿਪਲੋਇ/ਹੋਸਟਿੰਗ ਅਤੇ ਸਨੈਪਸ਼ਾਟ ਰੋਲਬੈਕ ਨੂੰ ਸਹਾਰਾ ਦਿੰਦਾ ਹੈ।
Widgets: UI ਨੂੰ ਛੋਟੇ-ਛੋਟੇ ਹਿੱਸਿਆਂ ਦੀ ਟਰੀ ਵਜੋਂ ਸੋਚੋ। ਬੁਨਿਆਦੀ ਲੇਆਉਟ widgets (Row, Column, Container) ਅਤੇ ਸਟੇਟ ਕੰਮ ਕਰਨ ਦਾ ਤਰੀਕਾ (StatefulWidget) ਸਿੱਖੋ।
Async + await: ਅਧਿਕਤਰ ਅਸਲੀ ਐਪ ਡੇਟਾ ਲੈਂਦੇ ਹਨ, ਫਾਇਲ ਪੜ੍ਹਦੇ ਹਨ ਜਾਂ ਪਲੇਟਫਾਰਮ APIs ਨੂੰ ਕਾਲ ਕਰਦੇ ਹਨ। Future, async, ਅਤੇ error handling ਨਾਲ ਪਵਿੱਤਰ ਹੋਵੋ।
Null safety: Dart ਤੁਹਾਨੂੰ ਆਮ "ਮੁੱਲ ਨਾਹ ਹੋਣ" ਵਾਲੀਆਂ crash ਤੋਂ ਬਚਾਉਂਦੀ ਹੈ ਕਿਉਂਕਿ nullability ਨੂੰ ਸਪਸ਼ਟ ਬਣਾਉਂਦੀ ਹੈ। ਇਹ ਤੁਸੀਂ ਕੋਡਬੇਸ ਵਧਣ 'ਤੇ ਝਟਕਾ ਮਹਿਸੂਸ ਕਰੋਗੇ।
Packages: pubspec.yaml ਵਿੱਚ dependencies ਜੋੜਨਾ ਅਤੇ ਪੈਕੇਜ ਦੀ ਗੁਣਵੱਤਾ (ਮੈਂਟੇਨੇੰਸ, ਲੋਕਪ੍ਰਿਯਤਾ, ਪਲੇਟਫਾਰਮ ਸਮਰਥਨ) ਦਾ ਮੁਲਾਂਕਣ ਸਿੱਖੋ।
ਇੱਕ ਛੋਟੀ ਐਪ ਬਣਾਓ ਜੋ ਬੁਨਿਆਦੀ ਗੱਲਾਂ ਸਾਬਤ ਕਰੇ: ਦੋ-ਸਕ੍ਰੀਨ UI, ਇੱਕ ਫਾਰਮ, ਅਤੇ ਇੱਕ ਨੈੱਟਵਰਕ ਕਾਲ (ਜਾਂ ਲੋਕਲ ਸਟੋਰੇਜ)। ਇਹ ਪ੍ਰਦਰਸ਼ਨ, ਇਟਰੇਸ਼ਨ ਗਤੀ, ਅਤੇ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਨੁਕਤਿਆਂ ਨੂੰ ਵੇਖਣ ਲਈ ਕਾਫ਼ੀ ਹੈ ਬਿਨਾਂ ਵੱਡੇ ਵਾਆਦੇ ਦੇ।
ਅਗਲੇ ਪੜ੍ਹਨ ਲਈ: /blog/flutter-vs-react-native, /blog/dart-null-safety, /blog/flutter-performance-basics
Dart ਇੱਕ ਆਧੁਨਿਕ ਭਾਸ਼ਾ ਹੈ ਜੋ Google ਨੇ ਬਣਾਈ, ਅਤੇ ਅੱਜ ਇਹ ਜ਼ਿਆਦਾਤਰ ਨੂੰ ਇਸ ਲਈ ਨਜ਼ਰ ਆਉਂਦੀ ਹੈ ਕਿਉਂਕਿ Flutter Dart ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ UI ਅਤੇ ਐਪ ਲਾਜਿਕ ਲਈ।
ਟੀਮਾਂ Dart ਨੂੰ ਇਸ ਲਈ ਅਹਿਮ ਮਨਦੀਆਂ ਹਨ ਕਿ ਇਹ ਵਿਕਾਸ ਦੇ ਸਮੇਂ ਵਿੱਚ ਤੇਜ਼ ਫੀਡਬੈਕ (hot reload) ਅਤੇ ਪ੍ਰੋਡਕਸ਼ਨ ਵਿੱਚ ਪੂਰਨ-ਅਗੋਂ-ਟਾਈਮ (AOT) ਸੰਪਾਈਲ ਕੀਤੀ ਨੈਟਿਵ ਕੋਡ ਦੇ ਕੇ ਪੈਦਾ ਕੀਤੇ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਭਰੋਸੇਯੋਗ ਬਨਾਉਂਦੀ ਹੈ।
Dart ਉਹ “ਕਲਾਇੰਟ ਐਪ” ਸਮੱਸਿਆ ਖੇਤਰ ਟਾਰਗਟ ਕਰਦਾ ਹੈ: ਐਸੀਆਂ ਇੰਟਰਐਕਟਿਵ, UI-ਭਾਰੀਆਂ ਐਪਾਂ ਜੋ ਤੇਜ਼ ਲੋਡ ਹੋਣ, ਨਰਮ ਚੱਲਣ ਅਤੇ ਵੱਧਣ ਤੇ ਨਿਭਾਈ ਜਾ ਸਕਣ।
ਇਸਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਡਿਜ਼ਾਇਨ ਕੀਤਾ ਗਿਆ ਸੀ ਕਿ ਇਹ ਮਿਲਾਪ ਕਰੇ:
ਡਿਵੈਲਪਮੇਟ ਦੌਰਾਨ, Dart ਆਮ ਤੌਰ 'ਤੇ Dart VM 'ਤੇ JIT (Just-In-Time) ਕੰਪਾਈਲੇਸ਼ਨ ਨਾਲ ਚਲਦਾ ਹੈ, ਜੋ ਤੇਜ਼ ਇਟਰੇਸ਼ਨ ਅਤੇ hot reload ਵਰਗੀਆਂ ਵਰਕਫਲੋਜ਼ ਦੀ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ।
ਰੀਲਿਜ਼ ਬਿਲਡਾਂ ਲਈ, Dart AOT (Ahead-Of-Time) ਕੰਪਾਈਲ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਨੈਟਿਵ ਮਸ਼ੀਨ ਕੋਡ ਬਣੇ—ਇਸ ਨਾਲ startup ਤੇਜ਼ ਹੁੰਦਾ ਹੈ ਅਤੇ ਰਨਟਾਈਮ ਓਵਰਹੈਡ ਘਟਦਾ ਹੈ ਜੋ UI jank ਪੈਦਾ ਕਰ ਸਕਦਾ ਹੈ।
Hot reload ਰਣ ਰਹੀ ਐਪ ਵਿੱਚ ਅਪਡੇਟ ਕੀਤੇ Dart ਕੋਡ ਨੂੰ ਈੰਝੈਕਟ ਕਰਦਾ ਹੈ ਅਤੇ ਆਮ ਤੌਰ 'ਤੇ ਤੁਹਾਡੀ ਮੌਜੂਦਾ ਸਕ੍ਰੀਨ ਅਤੇ ਨੈਵੀਗੇਸ਼ਨ ਸਥਿਤੀ ਨੂੰ ਕਾਇਮ ਰੱਖਦਾ ਹੈ।
ਇਹ UI ਇਟਰੇਸ਼ਨ (ਲੇਆਉਟ, ਸਟਾਇਲ, widget ਰੀਫੈਕਟਰ) ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਹੈ, ਪਰ ਕੁਝ ਬਦਲਾਵਾਂ ਨੂੰ ਪੂਰੇ ਰੀਸਟਾਰਟ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ—ਖਾਸ ਕਰਕੇ ਉਹ ਜੋ ਐਪ ਇਨੀਸ਼ੀਅਲਾਈਜ਼ੇਸ਼ਨ ਜਾਂ ਕੁਝ ਨੀਵੀਂ ਵਾਇਰਿੰਗ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੇ ਹਨ।
I/O ਉਡੀਕਾਂ (ਨੈਟਵਰਕ, ਡੇਟਾਬੇਸ, ਫਾਇਲ ਰੀਡ) ਲਈ async/await ਵਰਤੋਂ ਤਾਂ ਕਿ ਤੁਹਾਡੀ ਕੋਡਿੰਗ ਉਡੀਕ دوران UI ਰੇਂਡਰ ਹੁੰਦੀ ਰਹੇ।
Isolates CPU-ਭਾਰੀ ਕੰਮ (ਵੱਡਾ JSON ਪਾਰਸਿੰਗ, ਇਮੇਜ਼ ਪ੍ਰੋਸੈਸਿੰਗ, ਕ੍ਰਿਪਟੋ) ਲਈ ਵਰਤੋਂ—ਇਸ ਤਰ੍ਹਾਂ ਮੁੱਖ isolate (UI) ਤੋਂ ਫਰੇਮ ਸਮਾਂ ਨਹੀਂ ਲੁੱਟਦਾ।
ਇੱਕ ਪ੍ਰਯੋਗਿਕ ਨਿਯਮ: ਉਡੀਕ → async/await; ਕੰਪਿਊਟਿੰਗ → isolate।
Null safety ਕਿਸੇ ਵੀ ਮੁੱਲ ਦੇ "ਖ਼ਤਮ ਹੋਣ" ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਟਾਈਪ ਸਿਸਟਮ ਵਿੱਚ ਖੁੱਲ੍ਹ ਕਰਦੀ ਹੈ—ਜੇ ਮੁੱਲ ਲਾਜ਼ਮੀ ਹੈ ਤਾਂ ਟਾਈਪ ਸਿਸਟਮ ਉਸਨੂੰ ਜ਼ੋਰ ਦੇ ਕੇ ਲਗਾਉਂਦਾ ਹੈ; ਜੇ ਇਹ ਰਹਿਤ ਹੋ ਸਕਦਾ ਹੈ ਤਾਂ ਤੁਹਾਨੂੰ ਉਸਨੂੰ ਸਪਸ਼ਟ ਤਰੀਕੇ ਨਾਲ ਸੰਭਾਲਣਾ ਪੈਂਦਾ ਹੈ।
ਦਿਨ-ਪ੍ਰਤੀਦਿਨ ਕੋਡਿੰਗ ਵਿੱਚ ਫਾਇਦੇ:
ਵੱਡੇ ਕੋਡਬੇਸਾਂ ਲਈ Dart ਦੀ ਸਟੈਟਿਕ ਟਾਈਪਿੰਗ IDE ਸਹਾਇਤਾ (autocomplete, ਨੈਵੀਗੇਸ਼ਨ, ਰੀਫੈਕਟਰ) ਨੂੰ ਸੁਧਾਰਦੀ ਹੈ ਅਤੇ ਆਸਾਨੀ ਨਾਲ ਰੀਫੈਕਟਰਿੰਗ ਕਰਨ ਦਿੰਦੀ ਹੈ।
Generics ਨਾਲ collection ਅਤੇ API ਗੁਣਾਂ ਨੂੰ ਟਾਈਪ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ (ਉਦਾਹਰਨ: List<User>), ਜੋ ਡੇਟਾ ਦੀ ਗਲਤ ਸ਼ਕਲ ਦੀਆਂ ਗਲਤੀਆਂ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਫੜ ਲੈਂਦਾ ਹੈ।
ਵੈੱਬ 'ਤੇ, Dart ਆਮ ਤੌਰ 'ਤੇ JavaScript ਵਿੱਚ ਕੰਪਾਈਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ ਬਰਾਊਜ਼ਰ Dart VM ਨਹੀਂ ਚਲਾਉਂਦੇ।
ਅਮਲ ਵਿੱਚ, ਟੀਮਾਂ ਅਕਸਰ ਬਿਜਨੈਸ ਲੋਜਿਕ (ਮਾਡਲ, ਵੈਲੀਡੇਸ਼ਨ, ਨੈੱਟਵਰਕਿੰਗ) ਸਾਂਝੀ ਕਰਦੀਆਂ ਹਨ, ਜਦਕਿ UI ਅਤੇ ਪਲੇਟਫਾਰਮ ਇੰਟੀਗ੍ਰੇਸ਼ਨ ਨੂੰ ਵੈੱਬ ਦੀਆਂ ਲੋੜਾਂ (ਰਾਊਟਿੰਗ, Accessibility, SEO) ਅਨੁਸਾਰ ਅਡੈਪਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
ਗੋਲਮੈਨ (platform channels) ਨੂੰ ਵਰਤੋਂ ਜਦੋਂ ਤੁਹਾਨੂੰ OS-ਖਾਸ APIs ਜਾਂ ਮੌਜੂਦਾ ਨੈਟਿਵ SDKs ਨੂੰ ਕਾਲ ਕਰਨਾ ਹੋਵੇ (payments, Bluetooth, camera, push)। Dart Kotlin/Java (Android) ਜਾਂ Swift/Obj‑C (iOS) ਨਾਲ ਸੁਨੇਹੇ ਭੇਜਦਾ ਹੈ ਅਤੇ ਨਤੀਜੇ ਪ੍ਰਾਪਤ ਕਰਦਾ ਹੈ।
Dart FFI ਉਹਥੇ ਵਰਤੋਂ ਜਦੋਂ ਤੁਹਾਨੂੰ C APIs ਨੂੰ ਸਿੱਧਾ ਕਾਲ ਕਰਨਾ ਹੋਵੇ (ਉਦਾਹਰਨ: ਪ੍ਰਦਰਸ਼ਨ-ਸੰਵੇਦਨਸ਼ੀਲ ਲਾਇਬਰੇਰੀਜ਼) ਅਤੇ ਸੁਨੇਹਾ-ਉੱਪਰ ਆਧਾਰਤ ਪਹੁੰਚ ਤੋਂ ਘੱਟ ਓਵਰਹੈਡ ਚਾਹੀਦਾ ਹੋਵੇ।
Dart (ਖ਼ਾਸ ਕਰਕੇ Flutter ਨਾਲ) ਉਸ ਵੇਲੇ ਵਧੀਆ ਹੈ ਜਦੋਂ ਤੁਹਾਡਾ ਮੁੱਖ ਮਕਸਦ ਇੱਕ ਸੁਨਿੱਧ, ਇੰਟਰਐਕਟਿਵ ਉਤਪਾਦ ਤੇਜ਼ੀ ਨਾਲ ਸ਼ਿਪ ਕਰਨਾ ਹੋ—ਬਿਨਾਂ ਵੱਖ-ਵੱਖ iOS ਅਤੇ Android ਕੋਡਬੇਸ ਨੂੰ ਸੰਭਾਲਣ ਦੇ।
ਪਰ ਜੇ ਤੁਹਾਨੂੰ ਪੂਰੇ ਤੌਰ 'ਤੇ ਪਲੇਟਫਾਰਮ-ਨੈਟਿਵ UI ਦੀ ਪੂਰੀ ਪਾਲਨਾ ਕਰਨੀ ਹੋਵੇ ਜਾਂ ਨੈਟਿਵ SDKs ਤੇ ਭਾਰੀ ਨਿਰਭਰਤਾ ਹੋਵੇ, ਤਾਂ ਫੁੱਲੀ ਨੈਟਿਵ ਡੈਵਲਪਮੈਂਟ ਅਸਾਨ ਹੋ ਸਕਦਾ ਹੈ।