{"id":25947,"date":"2026-06-27T22:06:24","date_gmt":"2026-06-27T22:06:24","guid":{"rendered":"https:\/\/umang.pk\/2026\/06\/27\/%d8%a7%db%8c%da%88%d9%88%d8%a7%d9%86%d8%b3%da%88-%da%88%d8%a7%d8%b1%d9%b9-%d8%a7%d8%b3%d9%b9%d8%b1%db%8c%d9%85%d8%b2%d8%8c-%d8%a2%d8%a6%d8%b3%d9%88%d9%84%db%8c%d8%b4%d9%86-%d8%a7%d9%88%d8%b1-%d8%a7\/"},"modified":"2026-06-27T22:06:24","modified_gmt":"2026-06-27T22:06:24","slug":"%d8%a7%db%8c%da%88%d9%88%d8%a7%d9%86%d8%b3%da%88-%da%88%d8%a7%d8%b1%d9%b9-%d8%a7%d8%b3%d9%b9%d8%b1%db%8c%d9%85%d8%b2%d8%8c-%d8%a2%d8%a6%d8%b3%d9%88%d9%84%db%8c%d8%b4%d9%86-%d8%a7%d9%88%d8%b1-%d8%a7","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/06\/27\/%d8%a7%db%8c%da%88%d9%88%d8%a7%d9%86%d8%b3%da%88-%da%88%d8%a7%d8%b1%d9%b9-%d8%a7%d8%b3%d9%b9%d8%b1%db%8c%d9%85%d8%b2%d8%8c-%d8%a2%d8%a6%d8%b3%d9%88%d9%84%db%8c%d8%b4%d9%86-%d8%a7%d9%88%d8%b1-%d8%a7\/","title":{"rendered":"\u0627\u06cc\u0688\u0648\u0627\u0646\u0633\u0688 \u0688\u0627\u0631\u0679: \u0627\u0633\u0679\u0631\u06cc\u0645\u0632\u060c \u0622\u0626\u0633\u0648\u0644\u06cc\u0634\u0646 \u0627\u0648\u0631 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u067e\u0631\u0648\u06af\u0631\u0627\u0645\u0646\u06af \u0633\u06cc\u06a9\u06be\u06cc\u06ba"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u0644 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0644\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06ba \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639\u06cc \u06cc\u06c1 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062c\u0627\u0646\u062a\u0627 \u062a\u06be\u0627\u06d4 <code>await<\/code>. \u0645\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627 \u062a\u06be\u0627 <code>FutureBuilder<\/code> \u0627\u0648\u0631 <code>StreamBuilder<\/code> \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0633 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0645\u062c\u06be\u06d2 \u0648\u0627\u0642\u0639\u06cc \u0633\u0645\u062c\u06be \u0646\u06c1\u06cc\u06ba \u0622\u0631\u06c1\u06cc \u062a\u06be\u06cc \u06a9\u06c1 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc\u0627 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 \u0645\u062c\u06be\u06d2 \u0633\u0645\u062c\u06be \u0646\u06c1\u06cc\u06ba \u0622\u06cc\u0627 \u06a9\u06c1 \u06a9\u0686\u06be \u06a9\u0648\u0688 \u0627\u06cc\u06a9 \u062e\u0627\u0635 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u06a9\u06cc\u0648\u06ba \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u06cc\u0648\u06ba \u06a9\u0686\u06be \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 UI \u06a9\u0648 \u0645\u0646\u062c\u0645\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u0627 \u06a9\u06cc\u0648\u06ba \u0627\u0633\u0679\u0631\u06cc\u0645 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u0646\u0627\u0642\u0627\u0628\u0644 \u0634\u0646\u0627\u062e\u062a \u0645\u06cc\u0645\u0648\u0631\u06cc \u0644\u06cc\u06a9 \u06a9\u0627 \u0628\u0627\u0639\u062b \u0628\u0646\u062a\u06d2 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u0633 \u0644\u0645\u062d\u06d2 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639\u062a\u0627\u064b \u0628\u06cc\u0679\u06be \u06af\u06cc\u0627 \u0627\u0648\u0631 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0633\u06cc\u06a9\u06be\u0627\u060c \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u06a9\u0644\u06a9 \u06a9\u0631 \u06af\u06cc\u0627\u06d4 \u06a9\u06cc\u0648\u06ba <code>mounted<\/code> \u0627\u067e\u0646\u06d2 \u06a9\u0627\u0645 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06cc\u0648\u06ba <code>compute()<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0645\u0646\u0633\u0644\u06a9 \u0633\u0627\u0645\u0639\u06cc\u0646 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u0645\u062e\u062a\u0644\u0641 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0648\u062c\u0648\u06c1\u0627\u062a \u0648\u06c1 \u0686\u06cc\u0632\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0627\u0644\u06af \u0633\u06d2 \u062d\u0641\u0638 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0648\u06c1 \u0633\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u062a\u06be\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u0627\u0634 \u0645\u062c\u06be\u06d2 \u062c\u0644\u062f \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648\u062a\u0627\u06d4 \u0622\u0626\u06cc\u06d2 \u0627\u0633 \u067e\u0631 \u06af\u06c1\u0631\u06cc \u0646\u0638\u0631 \u0688\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0639\u0645\u0644\u06cc \u0641\u0644\u0679\u0631 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0628 \u062d\u0642\u06cc\u0642\u06cc \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u062a\u0648 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-how-darts-single-threaded-model-works\">\u0688\u0627\u0631\u0679 \u06a9\u0627 \u0633\u0646\u06af\u0644 \u062a\u06be\u0631\u06cc\u0688\u0688 \u0645\u0627\u0688\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0632\u0628\u0627\u0646\u06cc\u06ba \u06a9\u0648\u0688 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06be\u0631\u06cc\u0688\u0632 \u067e\u0631 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0686\u0644\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062a\u06be\u0631\u06cc\u0688 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062f\u0648\u0633\u0631\u0627 \u062a\u06be\u0631\u06cc\u0688 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0627\u0646 \u067e\u0679 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u0627 \u062a\u06be\u0631\u06cc\u0688 UI \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0633\u0628 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0627\u0648\u0631 \u0645\u062a\u0648\u0627\u0632\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u0627\u0633 \u0637\u0631\u062d \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0645\u06cc\u06ba \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9\u06d4 \u06c1\u0645\u06cc\u0634\u06c1<\/p>\n<p>\u062c\u0628 \u0645\u06cc\u06ba \u0646\u06d2 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u06cc\u06c1 \u0633\u06cc\u06a9\u06be\u0627 \u062a\u0648 \u0627\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u062a\u06be\u0627 \u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u062d\u062f \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u06be\u0631\u06cc\u0688 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644\u0632\u060c \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0628\u0679\u0646 \u0679\u06cc\u067e\u060c \u0627\u0648\u0631 60 \u0641\u0631\u06cc\u0645 \u0641\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u067e\u0631 \u0631\u06cc\u0646\u0688\u0631\u0646\u06af \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u061f \u062c\u0648\u0627\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0627\u0646 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0627\u0646 \u067e\u0631 \u062a\u0631\u062a\u06cc\u0628 \u0648\u0627\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0627\u0648\u0631\u0686\u06cc \u062e\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0627\u06a9\u06cc\u0644\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0634\u06cc\u0641 \u06a9\u06cc \u0637\u0631\u062d \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0634\u06cc\u0641\u060c \u06c1\u0627\u062a\u06be\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u062c\u0648\u0691\u0627\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u06a9\u0627\u0679\u0646\u0627 \u0627\u0648\u0631 \u06c1\u0644\u0627\u0646\u0627 \u0646\u0627\u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0628\u0627\u0648\u0631\u0686\u06cc \u0635\u0631\u0641 \u067e\u0627\u0646\u06cc \u06a9\u06d2 \u0627\u0628\u0644\u0646\u06d2 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u06cc\u0679\u06be\u062a\u0627\u06d4 \u0648\u06c1 \u0633\u0628\u0632\u06cc\u0627\u06ba \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0628 \u067e\u0627\u0646\u06cc \u062a\u06cc\u0627\u0631 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0648\u06c1 \u0648\u0627\u067e\u0633 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06af\u0644\u06d2 \u06a9\u0627\u0645 \u067e\u0631 \u0686\u0644\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0633\u0648\u0626\u0686 \u06a9\u0631\u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06c1 \u062e\u06cc\u0632 \u0631\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u0648\u06c1 \u0634\u06cc\u0641 \u06c1\u06d2\u06d4 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0646\u0638\u0627\u0645 \u06c1\u06d2 \u062c\u0648 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0644\u0627 \u06a9\u0648\u0646 \u0633\u0627 \u0639\u0645\u0644 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-event-loop-and-its-two-queues\">\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0627\u0648\u0631 \u062f\u0648 \u0642\u0637\u0627\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0622\u067e \u06a9\u06cc \u0688\u0627\u0631\u0679 \u0627\u06cc\u067e \u06a9\u06cc \u067e\u0648\u0631\u06cc \u0632\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0627\u0645 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0686\u06be \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0627\u06cc\u0633\u0627 \u06a9\u0631\u062a\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u06cc\u067e \u062e\u062a\u0645 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u0645\u06cc\u06ba\u060c \u0686\u06cc\u0632\u06cc\u06ba \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u0646\u06d2 \u067e\u0631\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0679\u0627\u0626\u0645\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 <code>.then()<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u06af\u06cc\u0627 &#8211; \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0627\u0633 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0622\u0626\u0679\u0645\u0632 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>Dart \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u062f\u0648 \u0642\u0637\u0627\u0631\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 async \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u0633\u06d2 \u0627\u0644\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0648\u0627\u0642\u0639\u06cc async \u06a9\u0648 \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-the-microtask-queue\">\u0645\u0627\u0626\u06a9\u0631\u0648\u0679\u0627\u0633\u06a9 \u0642\u0637\u0627\u0631<\/h3>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0639\u0644\u06cc \u062a\u0631\u062c\u06cc\u062d\u06cc \u0642\u0637\u0627\u0631 \u06c1\u06d2\u06d4 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u0642\u0637\u0627\u0631 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0635\u0627\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>.then()<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0627\u0648\u0631 <code>Future.microtask()<\/code> \u06cc\u06c1\u0627\u06ba \u0632\u0645\u06cc\u0646\u06d4<\/p>\n<p>\u0627\u0646 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062a\u06cc\u0632 \u0686\u06cc\u06a9 \u0622\u0624\u0679 \u0644\u06cc\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba: \u0645\u062e\u062a\u0635\u0631\u060c \u0641\u0648\u0631\u06cc \u06a9\u0627\u0645 \u062c\u0648 \u0645\u0648\u062c\u0648\u062f\u06c1 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u0648\u0688 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u062c\u0644\u062f \u0627\u0632 \u062c\u0644\u062f \u0645\u06a9\u0645\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-the-event-queue\">\u062a\u0642\u0631\u06cc\u0628 \u06a9\u06cc \u0642\u0637\u0627\u0631<\/h3>\n<p>\u0628\u06cc\u0631\u0648\u0646\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u06af\u0632\u0631 \u062c\u0627\u062a\u06cc \u06c1\u06d2: \u0679\u0627\u0626\u0645\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633\u060c \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062c\u0648\u0627\u0628\u0627\u062a\u060c \u06cc\u0648\u0632\u0631 \u0627\u0646 \u067e\u0679 \u0627\u06cc\u0648\u0646\u0679\u0633\u060c \u0627\u0633\u0679\u0631\u06cc\u0645 \u0688\u06cc\u0679\u0627 \u0648\u063a\u06cc\u0631\u06c1\u06d4 <code>Future.delayed()<\/code> \u0645\u06a9\u0645\u0644 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0627\u0633 \u0642\u0637\u0627\u0631 \u0633\u06d2 \u0627\u06cc\u06a9 \u0622\u0626\u0679\u0645 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0648\u0627\u067e\u0633 \u0686\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0644\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0679\u0627\u0633\u06a9 \u0642\u0637\u0627\u0631 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0635\u0644 \u062a\u0631\u062a\u06cc\u0628 \u062d\u0633\u0628 \u0630\u06cc\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-dart\">void main() {\n  print('1 \u2014 synchronous, runs immediately');\n\n  \/\/ Goes into the EVENT queue \u2014 regular lane\n  Future.delayed(Duration.zero, () {\n    print('4 \u2014 event queue');\n  });\n\n  \/\/ Goes into the MICROTASK queue \u2014 high priority lane\n  Future.microtask(() {\n    print('3 \u2014 microtask queue');\n  });\n\n  print('2 \u2014 synchronous, runs immediately');\n}\n\n\/\/ Output:\n\/\/ 1 \u2014 synchronous, runs immediately\n\/\/ 2 \u2014 synchronous, runs immediately\n\/\/ 3 \u2014 microtask queue\n\/\/ 4 \u2014 event queue\n<\/code><\/pre>\n<p>\u0622\u0626\u0679\u0645 <code>1<\/code> \u0627\u0648\u0631 <code>2<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06c1\u06d2\u060c \u06cc\u06c1 \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0639\u0645\u0644\u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2. \u06cc\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0642\u0637\u0627\u0631 \u06a9\u06d2\u06d4 \u067e\u06be\u0631 <code>3<\/code> \u067e\u06c1\u0644\u06d2 \u0686\u0644\u0627\u0626\u06cc\u06ba <code>4<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0679\u0627\u0633\u06a9 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u0648\u0646\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062d\u0627\u0644\u0627\u0646\u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0627\u062e\u06cc\u0631 \u06a9\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u06cc\u06c1 \u062d\u06a9\u0645 \u0622\u067e \u06a9\u06d2 \u062e\u06cc\u0627\u0644 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0645\u062a\u0639\u062f\u062f \u06a9\u0648 \u062c\u0648\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>.then()<\/code> \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u0627\u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0627\u06cc\u06a9 \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0679\u0627\u0633\u06a9 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0686\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u06cc \u0648\u062c\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u062d\u0633\u0648\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06c1\u0645\u06cc\u0634\u06c1 \u0679\u0627\u0626\u0645\u0631 \u06cc\u0627 I\/O \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u062a\u0627 \u06c1\u06d2 (\u062d\u062a\u06cc \u06a9\u06c1 \u0628\u0644\u0627 \u062a\u0627\u062e\u06cc\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u0628\u06be\u06cc)\u06d4<\/p>\n<pre><code class=\"language-dart\">void main() {\n  Future(() => print('event 1'));\n  Future(() => print('event 2'));\n  Future.microtask(() => print('microtask 1'));\n  Future.microtask(() => print('microtask 2'));\n  print('synchronous');\n}\n\n\/\/ Output:\n\/\/ synchronous\n\/\/ microtask 1\n\/\/ microtask 2\n\/\/ event 1\n\/\/ event 2\n<\/code><\/pre>\n<p>\u062f\u0648\u0646\u0648\u06ba \u0645\u0627\u0626\u06cc\u06a9\u0631\u0648 \u0679\u0627\u0633\u06a9 \u0627\u06cc\u0648\u0646\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0648\u06c1 \u06a9\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0645\u06cc\u06ba \u0645\u0642\u0631\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-how-asyncawait-fits-into-this\">async\/await \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u06cc\u0633\u06d2 \u0641\u0679 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p><code>async\/await<\/code>    \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0646\u06cc\u0627 \u062a\u06be\u0631\u06cc\u0688 \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627\u06d4 \u0648\u06c1 \u0645\u062a\u0648\u0627\u0632\u06cc \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u06d2\u06d4 \u06cc\u06c1 \u0633\u0646\u0679\u06cc\u06a9\u0679\u06a9 \u0634\u0648\u06af\u0631 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u06a9\u0648\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2 \u062c\u0648 \u0688\u0627\u0631\u0679 \u06a9\u06d2 \u0633\u0646\u06af\u0644 \u062a\u06be\u0631\u06cc\u0688\u0688 \u06a9\u0646\u06a9\u0631\u0646\u0633\u06cc \u0645\u0627\u0688\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0646\u06d2 \u06a9\u0627 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2\u06d4 \u062a\u0635\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u06cc\u06a9 \u0631\u06cc\u0633\u062a\u0648\u0631\u0627\u06ba \u0645\u06cc\u06ba \u0648\u06cc\u0679\u0631 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u0627\u067e\u0646\u06cc \u0634\u0641\u0679 \u0645\u06cc\u06ba \u0648\u0627\u062d\u062f \u0648\u06cc\u0679\u0631 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc\u06ba \u0628\u0627\u0648\u0631\u0686\u06cc \u062e\u0627\u0646\u06d2 \u06a9\u06d2 \u062f\u0631\u0648\u0627\u0632\u06d2 \u067e\u0631 \u06a9\u06be\u0691\u06d2 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0686\u0646 \u0645\u06cc\u06ba \u0622\u0631\u0688\u0631 \u062f\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4 \u062c\u0627\u0624 \u0627\u067e\u0646\u0627 \u067e\u0627\u0646\u06cc \u0628\u06be\u0631\u0648\u060c \u062f\u0648\u0633\u0631\u0627 \u0622\u0631\u0688\u0631 \u0644\u0648\u060c \u0627\u0648\u0631 \u0645\u06cc\u0632 \u0635\u0627\u0641 \u06a9\u0631\u0648\u06d4 \u062c\u0628 \u06a9\u0686\u0646 \u06a9\u06cc \u06af\u06be\u0646\u0679\u06cc \u0628\u062c\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u06a9\u06be\u0627\u0646\u0627 \u0627\u0679\u06be\u0627 \u06a9\u0631 \u067e\u06c1\u0646\u0686\u0627 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>await<\/code>    \u06cc\u06c1 \u0648\u06c1 \u0644\u0645\u062d\u06c1 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u0627 \u0622\u0631\u0688\u0631 \u06a9\u0686\u0646 \u0645\u06cc\u06ba \u067e\u06c1\u0646\u0686\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0686\u0644\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0628\u0644\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u0635\u0631\u0641 \u0627\u0633 \u062e\u0627\u0635 \u06a9\u0627\u0645 \u06a9\u0648 \u0631\u0648\u06a9 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u0648 \u06a9\u06c1\u06c1 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 &quot;\u062c\u0628 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06ba \u062a\u0648 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u0626\u06cc\u06ba\u06d4&#8221; \u0627\u0628 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644\u0632\u060c \u0641\u0627\u0626\u0644 \u0631\u06cc\u0688\u0646\u06af\u060c \u06cc\u0627 \u0679\u0627\u0626\u0645\u0631 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u06cc\u06af\u0631 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u0648\u06c1 \u062c\u0633 \u06a9\u0627\u0645 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u0648\u06c1 \u0645\u06a9\u0645\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0642\u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0628 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">Future<void> loadUser() async {\n  print('A \u2014 before await');\n\n  \/\/ Dart pauses here and hands control back to the event loop.\n  \/\/ The event loop is now free to handle other work \u2014\n  \/\/ rendering frames, processing other futures, handling taps \u2014\n  \/\/ while the network call is in progress.\n  final user = await dio.get('\/user');\n\n  \/\/ This only runs when the network response arrives\n  \/\/ and the event loop gets back to this function.\n  print('B \u2014 after await, got user');\n}\n\nvoid main() {\n  loadUser();\n\n  \/\/ This runs before B because loadUser() paused at the await\n  \/\/ and returned control here before the network call completed.\n  print('C \u2014 main continues');\n}\n\n\/\/ Output:\n\/\/ A \u2014 before await\n\/\/ C \u2014 main continues\n\/\/ B \u2014 after await, got user\n<\/void><\/code><\/pre>\n<h3 id=\"heading-why-blocking-the-event-loop-causes-jank-in-flutter\">\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u0648 \u0628\u0644\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u06c1\u0646\u06af\u0627\u0645\u06c1 \u06a9\u06cc\u0648\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0641\u0644\u0679\u0631 \u06a9\u0627 UI \u0631\u06cc\u0646\u0688\u0631\u0646\u06af \u0627\u0633\u06cc \u0645\u0642\u0627\u0645\u06cc \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688\u06d4 \u0627\u0646\u062c\u0646 \u06a9\u0648 60fps \u067e\u0631 \u0641\u0631\u06cc\u0645 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0631 16 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0628\u0639\u062f \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u062c\u0627\u0631\u06cc \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u06c1\u0645 \u0648\u0642\u062a \u0633\u0627\u0632 \u0622\u067e\u0631\u06cc\u0634\u0646 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0631\u0648\u06a9 \u062f\u06d2 \u06af\u0627\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0631\u06cc\u0645 \u067e\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2\u060c \u0679\u06cc\u0628\u0632 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc\u060c \u0627\u0648\u0631 UI \u0645\u0646\u062c\u0645\u062f \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ This is dangerous in Flutter.\n\/\/ Parsing a large JSON response synchronously\n\/\/ can take 100-300ms on slower devices.\n\/\/ The event loop is completely blocked the entire time.\n\/\/ Flutter drops every frame during that window.\n\/\/ The user sees a frozen screen.\nfinal users = (response.data as List)\n    .map((json) => User.fromJson(json))\n    .toList();\n<\/code><\/pre>\n<p><code>await<\/code>    \u06cc\u06c1 \u06cc\u06c1\u0627\u06ba \u0645\u062f\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0627\u0645 CPU \u067e\u0627\u0628\u0646\u062f \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 CPU \u06c1\u0645\u06cc\u0634\u06c1 \u0645\u0635\u0631\u0648\u0641 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u06a9\u06d2 \u0633\u0627\u0646\u0633 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0642\u062f\u0631\u062a\u06cc \u0648\u0642\u0641\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u0627 \u0645\u0633\u0626\u0644\u06c1 \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0645 \u0627\u0633\u06d2 \u062c\u0644\u062f \u06c1\u06cc \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h2 id=\"heading-streams-controlling-data-that-arrives-over-time\">\u0627\u0633\u0679\u0631\u06cc\u0645\u0632: \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>Future<\/code> \u0627\u06cc\u06a9 \u0642\u062f\u0631 \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0648 \u06af\u06cc\u0627\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>Stream<\/code> \u06cc\u06c1 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u062a\u0639\u062f\u062f \u0627\u0642\u062f\u0627\u0631 \u067e\u06cc\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0646\u0633\u0648\u062e \u06cc\u0627 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u06a9\u06be\u0644\u0627 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>Future<\/code> \u06cc\u06c1 \u06a9\u0633\u06cc \u0631\u06cc\u0633\u062a\u0648\u0631\u0627\u06ba \u0645\u06cc\u06ba \u06a9\u06be\u0627\u0646\u06d2 \u06a9\u0627 \u0622\u0631\u0688\u0631 \u062f\u06cc\u0646\u06d2 \u062c\u06cc\u0633\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u06a9\u06be\u0627\u0646\u0627 \u0628\u0627\u06c1\u0631 \u0622\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Stream<\/code> \u06cc\u06c1 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0646\u06cc\u0648\u0632 \u0644\u06cc\u0679\u0631 \u06c1\u06d2\u06d4 \u0646\u0626\u06d2 \u0648\u0631\u0698\u0646 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0622\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u0627\u0646 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2 \u062c\u0628 \u062a\u06a9 \u0622\u067e \u0627\u067e\u0646\u06cc \u0631\u06a9\u0646\u06cc\u062a \u0645\u0646\u0633\u0648\u062e \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u062f\u06cc\u062a\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ A stream that counts from 1 to 5, one number per second.\n\/\/ async* marks this as a stream generator function.\n\/\/ yield pushes a value into the stream and pauses\n\/\/ until the listener is ready for the next value.\nStream<int> countStream() async* {\n  for (int i = 1; i <= 5; i++) {\n    await Future.delayed(const Duration(seconds: 1));\n    yield i;\n  }\n  \/\/ When the loop ends the stream closes automatically.\n}\n<\/int><\/code><\/pre>\n<p>\u0622\u067e \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: <code>await for<\/code> \u06cc\u0627 <code>.listen()<\/code>:<\/p>\n<pre><code class=\"language-dart\">\/\/ Method 1 \u2014 await for: clean, readable for simple cases\nawait for (final number in countStream()) {\n  print(number); \/\/ prints 1, 2, 3, 4, 5, one per second\n}\n\n\/\/ Method 2 \u2014 listen(): more control, can cancel midway\nfinal subscription = countStream().listen(\n  (number) => print(number),\n  onError: (error) => print('Error: $error'),\n  onDone: () => print('Stream closed'),\n);\n\n\/\/ Cancel after 3 seconds \u2014 stops receiving values\nawait Future.delayed(const Duration(seconds: 3));\nsubscription.cancel();\n<\/code><\/pre>\n<h3 id=\"heading-single-subscription-vs-broadcast-streams\">\u0633\u0646\u06af\u0644 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0627\u0648\u0631 \u0628\u0631\u0627\u0688\u06a9\u0627\u0633\u0679 \u0633\u0679\u0631\u06cc\u0645<\/h3>\n<p>\u06cc\u06c1 \u0641\u0631\u0642 \u0628\u06c1\u062a \u0633\u06d2 Flutter \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u0648 \u0627\u0644\u062c\u06be\u0627 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0633\u0645\u062c\u06be\u0646\u0627 \u0645\u0628\u06c1\u0645 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0632\u0645\u0631\u06d2 \u06a9\u0648 \u0631\u0648\u06a9 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u0648\u0627\u062d\u062f \u0631\u06a9\u0646\u06cc\u062a \u06a9\u0627 \u0633\u0644\u0633\u0644\u06c1<\/strong> \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u06c1\u06d2\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0627\u0633\u0679\u0631\u06cc\u0645\u0632\u060c \u062c\u06cc\u0633\u06d2 \u0641\u0627\u0626\u0644 \u0631\u06cc\u0688\u0632\u060c HTTP \u0631\u0633\u067e\u0627\u0646\u0633 \u0628\u0627\u0688\u06cc\u0632\u060c \u0648\u063a\u06cc\u0631\u06c1\u060c \u0648\u0627\u062d\u062f \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646\u0632 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u062f\u0648 \u0628\u0627\u0631 \u0633\u0646\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>StateError<\/code>.<\/p>\n<pre><code class=\"language-dart\">final stream = countStream();\n\nstream.listen(print); \/\/ fine\nstream.listen(print); \/\/ throws: Stream has already been listened to\n<\/code><\/pre>\n<p><strong>\u0646\u0634\u0631\u06cc\u0627\u062a\u06cc \u0633\u0644\u0633\u0644\u06c1<\/strong> \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba\u060c \u0622\u067e \u062c\u062a\u0646\u06d2 \u0686\u0627\u06c1\u06cc\u06ba \u0633\u0627\u0645\u0639\u06cc\u0646 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1 \u0633\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u0642\u06cc\u0645\u062a \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0627\u06cc\u067e \u06a9\u06d2 \u0648\u0633\u06cc\u0639 \u0648\u0627\u0642\u0639\u0627\u062a\u060c \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u062a\u0639\u0627\u0645\u0644\u0627\u062a\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0645\u062a\u0639\u062f\u062f \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0631\u062f \u0639\u0645\u0644 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ StreamController.broadcast() creates a stream\n\/\/ that any number of listeners can subscribe to.\nfinal controller = StreamController<string>.broadcast();\n\ncontroller.stream.listen((v) => print('Listener 1: $v'));\ncontroller.stream.listen((v) => print('Listener 2: $v'));\n\n\/\/ Both listeners receive this value\ncontroller.sink.add('Hello');\n\/\/ Listener 1: Hello\n\/\/ Listener 2: Hello\n\n\/\/ Always close the controller when you're done with it.\n\/\/ An unclosed controller keeps resources alive indefinitely.\ncontroller.close();\n<\/string><\/code><\/pre>\n<h3 id=\"heading-using-streamcontroller-to-create-streams-manually\">StreamController \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0679\u0631\u06cc\u0645 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p><code>StreamController<\/code>    \u0645\u06a9\u0645\u0644 \u062f\u0633\u062a\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0644\u06a9\u0644 \u0637\u06d2 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0628 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u0627 \u06c1\u06d2\u060c \u06a9\u0628 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u0622\u06af\u06d2 \u0628\u0691\u06be\u0627\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0628 \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0648 \u0628\u0646\u062f \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0637\u0631\u062d \u0622\u067e \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0627\u06cc\u06a9 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">class LocationService {\n  \/\/ Broadcast so multiple widgets can listen to\n  \/\/ location updates simultaneously.\n  final _controller = StreamController<position>.broadcast();\n\n  \/\/ Expose only the stream publicly.\n  \/\/ The controller stays private so only this class\n  \/\/ can push new values into it.\n  Stream<position> get locationStream => _controller.stream;\n\n  void startTracking() {\n    Timer.periodic(const Duration(seconds: 2), (_) {\n      final position = Position(lat: 0.3476, lng: 32.5825);\n      \/\/ sink.add() pushes a value into the stream.\n      \/\/ All active listeners receive it immediately.\n      _controller.sink.add(position);\n    });\n  }\n\n  void dispose() {\n    \/\/ Always close the controller when you're done.\n    \/\/ An unclosed controller is a memory leak.\n    _controller.close();\n  }\n}\n<\/position><\/position><\/code><\/pre>\n<h3 id=\"heading-using-streams-in-flutter-with-streambuilder\">StreamBuilder \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/h3>\n<p><code>StreamBuilder<\/code>    UI \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0641\u0644\u0679\u0631 \u0648\u06cc\u062c\u06cc\u0679\u06d4 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u0642\u062f\u0631 \u0622\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">StreamBuilder<list>>(\n  stream: firestore\n      .collection('messages')\n      .snapshots()\n      .map((snapshot) => snapshot.docs\n          .map((doc) => Message.fromJson(doc.data()))\n          .toList()),\n  builder: (context, snapshot) {\n    if (snapshot.connectionState == ConnectionState.waiting) {\n      return const CircularProgressIndicator();\n    }\n\n    if (snapshot.hasError) {\n      return Text('Error: ${snapshot.error}');\n    }\n\n    if (!snapshot.hasData || snapshot.data!.isEmpty) {\n      return const Text('No messages yet');\n    }\n\n    return ListView.builder(\n      itemCount: snapshot.data!.length,\n      itemBuilder: (context, index) {\n        return MessageBubble(message: snapshot.data![index]);\n      },\n    );\n  },\n)\n<\/list><\/code><\/pre>\n<h3 id=\"heading-always-cancel-stream-subscriptions-in-dispose\">\u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u0633\u06d2 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0646 \u0633\u0628\u0633\u06a9\u0631\u0627\u0626\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>dispose<\/code><\/h3>\n<p>\u06cc\u06c1 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0644\u06cc\u06a9\u0633 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0648 \u0646\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0641\u0639\u0627\u0644 \u0631\u06a9\u0646\u06cc\u062a \u0633\u0679\u0631\u06cc\u0645 \u06a9\u06d2 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0631\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u0633 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0648\u06cc\u062c\u06cc\u0679 \u063a\u0627\u0626\u0628 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u0686\u0644 \u0631\u06c1\u06cc \u06c1\u06d2 \u062a\u0648 \u062d\u0630\u0641 \u0634\u062f\u06c1 \u0648\u06cc\u062c\u06cc\u0679 \u067e\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 <code>setState<\/code> \u06a9\u06d2 \u0628\u0639\u062f \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 <code>dispose<\/code>\u062c\u0646 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u0622\u0632\u0627\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0648\u06c1 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0631\u06c1\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">class _ChatScreenState extends State<chatscreen> {\n  StreamSubscription<message>? _subscription;\n\n  @override\n  void initState() {\n    super.initState();\n    _subscription = messageStream.listen((message) {\n      if (mounted) setState(() => messages.add(message));\n    });\n  }\n\n  @override\n  void dispose() {\n    \/\/ cancel() unsubscribes from the stream.\n    \/\/ Without this, the callback keeps firing\n    \/\/ even after this screen is removed from the tree.\n    _subscription?.cancel();\n    super.dispose();\n  }\n}\n<\/message><\/chatscreen><\/code><\/pre>\n<h2 id=\"heading-streamtransformers-and-advanced-stream-control\">StreamTransformers \u0627\u0648\u0631 \u062c\u062f\u06cc\u062f \u0627\u0633\u0679\u0631\u06cc\u0645 \u06a9\u0646\u0679\u0631\u0648\u0644<\/h2>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u0648 \u0633\u0645\u062c\u06be \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u062d\u0633\u0627\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062e\u0627\u0645 \u062f\u06be\u0627\u0631\u06d2 \u0622\u067e \u06a9\u0648 \u0648\u06c1\u06cc \u06a9\u0686\u06be \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u0642\u062f\u0627\u0631 \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u0646\u06d2\u060c \u0627\u0646\u06c1\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2\u060c \u062a\u06cc\u0632 \u0627\u062e\u0631\u0627\u062c \u06a9\u0648 \u06a9\u0645 \u06a9\u0631\u0646\u06d2\u060c \u06cc\u0627 \u0645\u062a\u0639\u062f\u062f \u0633\u0644\u0633\u0644\u06d2 \u06a9\u0648 \u06cc\u06a9\u062c\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u067e\u0691 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u0679\u0631\u06cc\u0645 \u0622\u067e\u0631\u06cc\u0679\u0631 \u06c1\u06d2 \u0627\u0648\u0631 <code>StreamTransformer<\/code> \u0627\u0646\u062f\u0631 \u0622\u062c\u0627\u0624\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 <code>Stream<\/code> \u06a9\u0644\u0627\u0633 \u0645\u06cc\u06ba \u0628\u0644\u0679 \u0627\u0646 \u062a\u0628\u0627\u062f\u0644\u0648\u06ba \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0628\u06be\u0631\u067e\u0648\u0631 \u0633\u06cc\u0679 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">final stream = countStream();\n\n\/\/ map \u2014 transform each value before it reaches listeners\nstream\n    .map((number) => number * 2)\n    .listen(print); \/\/ 2, 4, 6, 8, 10\n\n\/\/ where \u2014 filter out values that don't match a condition\nstream\n    .where((number) => number.isEven)\n    .listen(print); \/\/ 2, 4\n\n\/\/ take \u2014 only emit the first N values, then close\nstream\n    .take(3)\n    .listen(print); \/\/ 1, 2, 3\n\n\/\/ skip \u2014 ignore the first N values\nstream\n    .skip(2)\n    .listen(print); \/\/ 3, 4, 5\n\n\/\/ distinct \u2014 only emit when the value changes from the last one\nStream.fromIterable([1, 1, 2, 2, 3])\n    .distinct()\n    .listen(print); \/\/ 1, 2, 3\n<\/code><\/pre>\n<p>\u0645\u0632\u06cc\u062f \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u0628\u0646\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>StreamTransformer<\/code>. \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u0627 \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2 \u062c\u0628 \u0628\u0644\u0679 \u0627\u0646 \u0622\u067e\u0631\u06cc\u0679\u0631\u0632 \u0622\u067e \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u062c\u0628 \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u0642\u062f\u0631 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u062e\u0631\u0627\u062c \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062d\u0627\u0644\u062a \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2)\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ A StreamTransformer that only emits values above a threshold\n\/\/ and prefixes each one with a label.\nStreamTransformer<int string=\"\"> aboveThreshold(int threshold) {\n  return StreamTransformer.fromHandlers(\n    handleData: (value, sink) {\n      \/\/ sink.add() pushes a transformed value downstream.\n      \/\/ If we don't call sink.add(), the value is filtered out.\n      if (value > threshold) {\n        sink.add('Above threshold: $value');\n      }\n    },\n    handleError: (error, stackTrace, sink) {\n      \/\/ Forward errors downstream unchanged.\n      sink.addError(error, stackTrace);\n    },\n    handleDone: (sink) {\n      \/\/ Close the output stream when the input stream closes.\n      sink.close();\n    },\n  );\n}\n\n\/\/ Usage\ncountStream()\n    .transform(aboveThreshold(3))\n    .listen(print);\n\/\/ Above threshold: 4\n\/\/ Above threshold: 5\n<\/int><\/code><\/pre>\n<h3 id=\"heading-debouncing-with-streams-in-flutter\">\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u06c1\u0679 \u0645\u06cc\u06ba \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0688\u06cc\u0628\u0627\u0624\u0646\u0633 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0645\u0644\u06cc \u0627\u0633\u0679\u0631\u06cc\u0645 \u067e\u06cc\u0679\u0631\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u0633\u0631\u0686 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0688\u06cc\u0628\u0627\u0624\u0646\u0633 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc \u0628\u0627\u0624\u0646\u0633 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631\u060c \u06c1\u0631 \u06a9\u06cc \u0627\u0633\u0679\u0631\u0648\u06a9 API \u06a9\u0627\u0644 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u06cc\u0628\u0627\u0624\u0646\u0633\u0646\u06af \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u06cc\u06c1 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0679\u0627\u0626\u067e \u06a9\u0631\u0646\u0627 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">class _SearchScreenState extends State<searchscreen> {\n  final _searchController = TextEditingController();\n  final _searchStream = StreamController<string>();\n  StreamSubscription? _subscription;\n  List<result> _results = [];\n\n  @override\n  void initState() {\n    super.initState();\n\n    _subscription = _searchStream.stream\n        \/\/ Wait 300ms after the last keystroke before emitting.\n        \/\/ If a new value arrives within 300ms, the timer resets.\n        \/\/ This prevents firing an API call on every keystroke.\n        .asyncExpand((query) async* {\n          await Future.delayed(const Duration(milliseconds: 300));\n          yield query;\n        })\n        \/\/ Ignore duplicate queries \u2014 no point re-fetching\n        \/\/ if the user typed the same thing again.\n        .distinct()\n        \/\/ For each query, call the API and emit the results.\n        \/\/ asyncMap cancels the previous call if a new query\n        \/\/ arrives before the previous one completes.\n        .asyncMap((query) => _repository.search(query))\n        .listen((results) {\n          if (mounted) setState(() => _results = results);\n        });\n\n    _searchController.addListener(() {\n      _searchStream.add(_searchController.text);\n    });\n  }\n\n  @override\n  void dispose() {\n    _searchController.dispose();\n    _subscription?.cancel();\n    _searchStream.close();\n    super.dispose();\n  }\n}\n<\/result><\/string><\/searchscreen><\/code><\/pre>\n<h2 id=\"heading-isolates-escaping-the-single-thread\">\u062a\u0646\u06c1\u0627\u0626\u06cc: \u0648\u0627\u062d\u062f \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u0641\u0631\u0627\u0631<\/h2>\n<p>\u0688\u0627\u0631\u0679 \u0633\u0646\u06af\u0644 \u062a\u06be\u0631\u06cc\u0688\u0688 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062a\u06be\u0631\u06cc\u0688 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06c1\u06cc\u06ba\u06d4 \u0627\u0644\u06af \u062a\u06be\u0644\u06af \u0688\u0627\u0631\u0679 \u06a9\u0627 \u06a9\u0648\u0688 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0644\u06af \u062a\u06be\u0631\u06cc\u0688 \u0645\u06cc\u06ba \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4 \u062f\u0648\u0633\u0631\u06cc \u0632\u0628\u0627\u0646\u0648\u06ba \u0645\u06cc\u06ba \u062a\u06be\u0631\u06cc\u0688\u0632 \u0633\u06d2 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u0641\u0631\u0642 \u06c1\u06d2\u06d4<\/p>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0632\u0628\u0627\u0646\u0648\u06ba \u0645\u06cc\u06ba\u060c \u062a\u06be\u0631\u06cc\u0688\u0632 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648 \u062a\u06be\u0631\u06cc\u0688\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u062a\u063a\u06cc\u0631 \u06a9\u0648 \u067e\u0691\u06be \u0627\u0648\u0631 \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0633 \u0633\u06d2 \u0631\u06cc\u0633 \u06a9\u06cc \u06a9\u06cc\u0641\u06cc\u062a \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062d\u062a\u06cc\u0627\u0637 \u0633\u06d2 \u0644\u0627\u06a9\u0646\u06af \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06c1\u0631 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0627\u0644\u06af \u0645\u06cc\u0645\u0648\u0631\u06cc \u06c1\u06cc\u067e \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u062f\u0648 \u0627\u0641\u0631\u0627\u062f \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0648\u0627\u062d\u062f \u0637\u0631\u06cc\u0642\u06c1 \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0628\u06be\u06cc\u062c\u0646\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0648\u0627\u0626\u0679 \u0628\u0648\u0631\u0688 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062f\u06cc\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0633\u0644\u0627\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0648\u0679 \u0628\u06be\u06cc\u062c\u0646\u0627\u06d4<\/p>\n<p>\u06cc\u06c1 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0691 \u06a9\u06d2 \u062d\u0627\u0644\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u0642\u0627\u0628\u0644\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0631 \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e\u0646\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">Main Isolate                    Worker Isolate\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500               \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nOwn memory heap                 Own memory heap\nOwn event loop                  Own event loop\nUI rendering                    Heavy computation\nUser input                      No UI access\n\u2502                               \u2502\n\u2502\u2500\u2500\u2500\u2500 sends data \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2192\u2502\n\u2502                               \u2502 (processes independently)\n\u2502\u2190\u2500\u2500\u2500 receives result \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2502\n<\/code><\/pre>\n<h3 id=\"heading-when-you-actually-need-an-isolate\">\u062c\u0628 \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0636\u0631\u0648\u0631\u06cc \u06c1\u0648\u06d4<\/h3>\n<p>\u0627\u06c1\u0645 \u0641\u0631\u0642 CPU- \u067e\u0627\u0628\u0646\u062f \u0627\u0648\u0631 I\/O- \u067e\u0627\u0628\u0646\u062f \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p><strong>I\/O \u067e\u0627\u0628\u0646\u062f \u0622\u067e\u0631\u06cc\u0634\u0646<\/strong>: \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u0627\u060c \u0641\u0627\u0626\u0644 \u067e\u0691\u06be\u0646\u0627 \u2014 \u0628\u0633 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>await<\/code>. \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646\u060c CPU \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u0645\u0641\u062a \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0633\u06cc \u067e\u06cc \u06cc\u0648 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0627\u0645<\/strong>: \u0627\u06af\u0631 \u0622\u067e \u0648\u0627\u0642\u0639\u06cc \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u062d\u0633\u0627\u0628 \u0644\u06af\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0688\u06cc\u0679\u0627 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0691\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u063a\u06cc\u0631\u06c1\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 CPU \u06c1\u0645\u06cc\u0634\u06c1 \u0645\u0635\u0631\u0648\u0641 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>await<\/code> \u0645\u06cc\u06ba \u062a\u0645\u06c1\u0627\u0631\u06cc \u0645\u062f\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<\/li>\n<\/ul>\n<p>\u0627\u06af\u0631 API \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba 200ms \u0644\u06af\u062a\u06d2 \u06c1\u06cc\u06ba\u060c <code>await<\/code> \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0646\u06c1\u06cc\u06ba \u0628\u0686\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e 200ms \u062a\u06a9 \u0628\u0644\u0627\u06a9 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0642\u0637\u0639 \u0646\u0638\u0631\u06d4 \u06a9\u0627\u0645 \u06a9\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-isolaterun-the-modern-approach\"><code>Isolate.run()<\/code>    &#8211; \u0627\u06cc\u06a9 \u062c\u062f\u06cc\u062f \u0637\u0631\u06cc\u0642\u06c1<\/h3>\n<p><code>Isolate.run()<\/code>    \u0627\u0633\u06d2 \u0688\u0627\u0631\u0679 2.19 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0622\u0626\u0633\u0648\u0644\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0648\u0642\u062a \u06a9\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u0627 \u0635\u0627\u0641 \u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4 \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0646\u062a\u0627\u0626\u062c \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0628\u0646\u062f \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ In your repository:\nFuture<list>> getUsers() async {\n  \/\/ Step 1 \u2014 network call is I\/O-bound.\n  \/\/ We await it and the event loop stays free while waiting.\n  final response = await dio.get('\/users');\n\n  \/\/ Step 2 \u2014 parsing thousands of users is CPU-bound.\n  \/\/ We move it to a separate isolate with Isolate.run().\n  \/\/ The main isolate's event loop stays free the whole time.\n  \/\/ Flutter keeps rendering frames normally.\n  final users = await Isolate.run(() {\n    final data = response.data as List<dynamic>;\n    return data\n        .map((json) => User.fromJson(json as Map<string dynamic=\"\">))\n        .toList();\n  });\n\n  return users;\n}\n<\/string><\/dynamic><\/list><\/code><\/pre>\n<h3 id=\"heading-compute-flutters-built-in-helper\"><code>compute()<\/code>    &#8211; \u0641\u0644\u0679\u0631 \u06a9\u06d2 \u0628\u0644\u0679 \u0627\u0646 \u0645\u062f\u062f\u06af\u0627\u0631<\/h3>\n<p><code>compute()<\/code>    \u06cc\u06c1 \u067e\u0686\u06be\u0644\u06cc \u0642\u0631\u0646\u0637\u06cc\u0646\u06c1 \u0622\u0626\u0679\u0645 \u06a9\u06d2 \u06af\u0631\u062f \u0641\u0644\u0679\u0631 \u06a9\u0627 \u0631\u06cc\u067e\u0631 \u06c1\u06d2\u06d4 <code>Isolate.run()<\/code>. \u06cc\u06c1 \u0627\u0628 \u0628\u06be\u06cc \u0648\u0633\u06cc\u0639 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u06a9\u06cc \u0627\u06cc\u06a9 \u062d\u062f \u06c1\u06d2\u06d4 \u0622\u067e \u062c\u0648 \u0641\u0646\u06a9\u0634\u0646 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1 \u0627\u06cc\u06a9 \u0627\u0639\u0644\u06cc \u062f\u0631\u062c\u06d2 \u06a9\u0627 \u06cc\u0627 \u062c\u0627\u0645\u062f \u0641\u0646\u06a9\u0634\u0646 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0627\u06cc\u0633\u0627 \u0628\u0646\u062f \u06c1\u0648\u0646\u0627 \u062c\u0648 \u0645\u0642\u0627\u0645\u06cc \u0645\u062a\u063a\u06cc\u0631\u0627\u062a \u06a9\u0648 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ The function must be top-level or static.\n\/\/ It can't be a closure because closures that capture\n\/\/ state can't be sent across isolate boundaries.\nList<user> parseUsers(dynamic data) {\n  return (data as List)\n      .map((json) => User.fromJson(json as Map<string dynamic=\"\">))\n      .toList();\n}\n\n\/\/ In your repository:\nfinal users = await compute(parseUsers, response.data);\n<\/string><\/user><\/code><\/pre>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u0645\u06cc\u06ba <code>Isolate.run()<\/code> \u06cc\u06c1 \u0622\u0633\u0627\u0646 \u0627\u0648\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0686\u06a9\u062f\u0627\u0631 \u06c1\u06d2\u06d4 <code>compute()<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 2.19 \u0633\u06d2 \u0646\u06cc\u0686\u06d2 \u0641\u0644\u0679\u0631 \u0648\u0631\u0698\u0646 \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u062a\u0628 \u0628\u06be\u06cc \u06cc\u06c1 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-full-isolate-communication-with-sendport-and-receiveport\">\u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0648\u0627\u0635\u0644\u0627\u062a \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0644\u06af \u062a\u06be\u0644\u06af \u06a9\u0631\u06cc\u06ba: <code>SendPort<\/code> \u0627\u0648\u0631 <code>ReceivePort<\/code><\/h3>\n<p>\u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u06a9\u0627\u0645 \u062c\u0646 \u06a9\u0648 \u0645\u062a\u0639\u062f\u062f \u067e\u06cc\u063a\u0627\u0645\u0627\u062a \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0627\u0648\u0631 \u0648\u0635\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 (\u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0633\u0646\u06a9\u0631\u0648\u0646\u0627\u0626\u0632\u06cc\u0634\u0646 \u0633\u0631\u0648\u0633\u060c \u0631\u06cc\u0626\u0644 \u0679\u0627\u0626\u0645 \u0688\u06cc\u0679\u0627 \u067e\u0631\u0648\u0633\u06cc\u0633\u0631\u060c \u0641\u0627\u0626\u0644 \u0648\u0627\u0686\u0631) \u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06a9\u0645\u0644 \u062a\u0646\u06c1\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2: <code>SendPort<\/code> \u0627\u0648\u0631 <code>ReceivePort<\/code>.<\/p>\n<pre><code class=\"language-dart\">void main() async {\n  \/\/ ReceivePort is how the main isolate listens\n  \/\/ for messages coming back from the worker.\n  final receivePort = ReceivePort();\n\n  \/\/ Spawn the worker isolate and give it a SendPort\n  \/\/ so it can send messages back to us.\n  await Isolate.spawn(\n    workerFunction,\n    receivePort.sendPort,\n  );\n\n  \/\/ Listen for messages from the worker.\n  receivePort.listen((message) {\n    print('Main received: $message');\n  });\n}\n\n\/\/ This function runs entirely in the worker isolate.\n\/\/ It has its own memory heap, completely separate\n\/\/ from the main isolate. It cannot access any\n\/\/ variables from main() directly.\nvoid workerFunction(SendPort sendPort) {\n  for (int i = 0; i < 5; i++) {\n    \/\/ sendPort.send() passes a message to the main isolate.\n    \/\/ The message is copied, not shared \u2014 no shared memory.\n    sendPort.send('Processed item $i');\n  }\n}\n<\/code><\/pre>\n<h3 id=\"heading-choosing-the-right-approach\">\u0635\u062d\u06cc\u062d \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u0635\u0648\u0631\u062a \u062d\u0627\u0644<\/th>\n<th>\u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u0627\u06cc\u06a9 \u0648\u0642\u062a\u06cc \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u06a9\u0627\u0645<\/td>\n<td><code>Isolate.run()<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0641\u0644\u0679\u0631 2.19 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u06a9\u0645 \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/td>\n<td><code>compute()<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u0627 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627\u0631\u06a9\u0646<\/td>\n<td>\u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0644\u06af <code>SendPort<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06cc\u0627 \u0641\u0627\u0626\u0644 I\/O \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/td>\n<td>\u0635\u0631\u0641 <code>await<\/code> - \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"heading-putting-it-all-together-in-flutter\">\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u06c1\u0679 \u0645\u06cc\u06ba \u0633\u0628 \u06a9\u0686\u06be \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0628\u0627\u0646\u062f\u06be\u0646\u0627<\/h2>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0645\u062b\u0627\u0644 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0641\u0644\u0679\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u06cc\u0646\u0648\u06ba \u062a\u0635\u0648\u0631\u0627\u062a (\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e\u060c \u0627\u0633\u0679\u0631\u06cc\u0645 \u0627\u0648\u0631 \u0622\u0626\u0633\u0648\u0644\u06cc\u0634\u0646) \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0627\u06cc\u06a9 \u0633\u0631\u0686 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u062c\u0648 \u0641\u0631\u0636\u06cc API \u0633\u06d2 \u0646\u062a\u0627\u0626\u062c \u0644\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06cc \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u06ba \u0627\u0646 \u06a9\u0627 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0644\u0633\u0644\u06c1 \u0633\u06d2 \u06af\u0632\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">import 'dart:isolate';\nimport 'package:flutter\/material.dart';\n\n\/\/ Model\nclass SearchResult {\n  final String id;\n  final String title;\n  const SearchResult({required this.id, required this.title});\n}\n\n\/\/ Top-level function \u2014 required for Isolate.run()\n\/\/ because it can't be a closure\nList<searchresult> parseResults(List<dynamic> data) {\n  \/\/ Simulate expensive parsing work\n  return data.map((item) => SearchResult(\n    id: item['id'].toString(),\n    title: item['title'] as String,\n  )).toList();\n}\n\n\/\/ Repository\nclass SearchRepository {\n  \/\/ Mock data \u2014 in a real app this would be a network call\n  final List<map dynamic=\"\">> _mockData = List.generate(\n    100,\n    (i) => {'id': i, 'title': 'Result ${i + 1}'},\n  );\n\n  Future<list>> search(String query) async {\n    \/\/ Simulate network delay\n    await Future.delayed(const Duration(milliseconds: 500));\n\n    \/\/ Filter mock data\n    final filtered = _mockData\n        .where((item) =>\n            (item['title'] as String)\n                .toLowerCase()\n                .contains(query.toLowerCase()))\n        .toList();\n\n    \/\/ Parse in a background isolate so the main\n    \/\/ isolate's event loop stays free\n    return Isolate.run(() => parseResults(filtered));\n  }\n}\n\n\/\/ Screen\nclass SearchScreen extends StatefulWidget {\n  const SearchScreen({super.key});\n\n  @override\n  State<searchscreen> createState() => _SearchScreenState();\n}\n\nclass _SearchScreenState extends State<searchscreen> {\n  final _controller = TextEditingController();\n  final _repository = SearchRepository();\n\n  bool _isLoading = false;\n  List<searchresult> _results = [];\n  String? _error;\n\n  Future<void> _search(String query) async {\n    if (query.trim().isEmpty) {\n      setState(() => _results = []);\n      return;\n    }\n\n    setState(() {\n      _isLoading = true;\n      _error = null;\n    });\n\n    try {\n      final results = await _repository.search(query);\n\n      \/\/ mounted check \u2014 the user might have navigated away\n      \/\/ while the search was running\n      if (!mounted) return;\n\n      setState(() {\n        _results = results;\n        _isLoading = false;\n      });\n    } catch (e) {\n      if (!mounted) return;\n\n      setState(() {\n        _error=\"Search failed. Please try again.\";\n        _isLoading = false;\n      });\n    }\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Search')),\n      body: Column(\n        children: [\n          Padding(\n            padding: const EdgeInsets.all(16),\n            child: TextField(\n              controller: _controller,\n              decoration: const InputDecoration(\n                labelText: 'Search',\n                border: OutlineInputBorder(),\n                prefixIcon: Icon(Icons.search),\n              ),\n              onChanged: _search,\n            ),\n          ),\n          Expanded(child: _buildBody()),\n        ],\n      ),\n    );\n  }\n\n  Widget _buildBody() {\n    if (_isLoading) {\n      return const Center(child: CircularProgressIndicator());\n    }\n\n    if (_error != null) {\n      return Center(\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: [\n            Text(_error!),\n            const SizedBox(height: 16),\n            ElevatedButton(\n              onPressed: () => _search(_controller.text),\n              child: const Text('Try again'),\n            ),\n          ],\n        ),\n      );\n    }\n\n    if (_results.isEmpty) {\n      return const Center(child: Text('No results found.'));\n    }\n\n    return ListView.builder(\n      itemCount: _results.length,\n      itemBuilder: (context, index) {\n        final result = _results[index];\n        return ListTile(\n          leading: Text(result.id),\n          title: Text(result.title),\n        );\n      },\n    );\n  }\n}\n\nvoid main() {\n  runApp(const MaterialApp(home: SearchScreen()));\n}\n<\/void><\/searchresult><\/searchscreen><\/searchscreen><\/list><\/map><\/dynamic><\/searchresult><\/code><\/pre>\n<p>\u06cc\u06c1 \u0645\u062b\u0627\u0644 \u06c1\u0631 \u0627\u0633 \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0636\u0628\u0648\u0637 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u0627 \u06c1\u0645 \u0646\u06d2 \u0627\u0628 \u062a\u06a9 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<ul>\n<li>\n<p>\u06a9\u06c1 <strong>\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e<\/strong> \u0646\u0642\u0644\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06cc \u062a\u0627\u062e\u06cc\u0631 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 UI \u06a9\u06cc \u0631\u062f\u0639\u0645\u0644 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>await<\/code> \u06c1\u0645 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u067e\u0631 \u062f\u06d2 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 Flutter \u0641\u0631\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be \u0633\u06a9\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p><strong>\u0642\u0631\u0646\u0637\u06cc\u0646\u06c1<\/strong> \u06cc\u06c1 \u067e\u0633 \u0645\u0646\u0638\u0631 \u0645\u06cc\u06ba \u062a\u0635\u0631\u06cc\u0641 \u06a9\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0645\u06cc\u0646 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0648 \u0622\u0632\u0627\u062f \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u062c\u0628 \u0646\u062a\u06cc\u062c\u06c1 \u0633\u06cc\u0679 \u0628\u0691\u0627 \u06c1\u0648\u06d4<\/p>\n<\/li>\n<li>\n<p>\u06a9\u06c1 <strong>\u0646\u0635\u0628 \u0686\u06cc\u06a9<\/strong> \u062a\u0644\u0627\u0634 \u062c\u0627\u0631\u06cc \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0648\u062c\u06cc\u0679\u0633 \u06a9\u0648 \u062d\u0630\u0641 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u062a\u0645\u0627\u0645 \u0686\u0627\u0631 UI \u0631\u06cc\u0627\u0633\u062a\u06cc\u06ba (\u0644\u0648\u0688\u060c \u062e\u0631\u0627\u0628\u06cc\u060c \u062e\u0627\u0644\u06cc\u060c \u0646\u062a\u06cc\u062c\u06c1) \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0633\u0646\u0628\u06be\u0627\u0644\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"heading-final-thoughts\">\u062d\u062a\u0645\u06cc \u062e\u06cc\u0627\u0644\u0627\u062a<\/h2>\n<p>\u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e\u0633\u060c \u0627\u0633\u0679\u0631\u06cc\u0645\u0632 \u0627\u0648\u0631 \u0622\u0626\u0633\u0648\u0644\u06cc\u0634\u0646 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u0633\u0645\u062c\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc\u0648\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0627\u06cc\u06a9 \u0630\u06c1\u0646\u06cc \u0646\u0645\u0648\u0646\u06c1 \u0627\u067e\u0646\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0628\u06c1\u062a \u0633\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0635\u0648\u0627\u0628\u062f\u06cc\u062f\u06cc \u0645\u062d\u0633\u0648\u0633 \u06c1\u0648\u062a\u06cc \u062a\u06be\u06cc\u06ba\u060c \u0645\u0639\u0646\u06cc \u0645\u06cc\u06ba \u0622\u0646\u06d2 \u0644\u06af\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u0627\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06a9\u06cc\u0648\u06ba \u06c1\u06d2\u061f <code>mounted<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>await<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0648 \u0627\u06cc\u0648\u0646\u0679 \u0644\u0648\u067e \u067e\u0631 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u06ba <code>compute()<\/code> \u06a9\u06cc\u0627 \u0622\u067e \u06c1\u06a9\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u061f \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u0679\u0627\u0633\u06a9 \u0627\u06cc\u0648\u0646\u0679 \u06a9\u06d2 \u0644\u0648\u067e\u0633 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u062a\u0646\u06c1\u0627\u0626\u06cc \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0644\u0648\u067e \u0679\u0648\u0679 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u06cc\u0646\u0688\u0631\u0646\u06af \u06a9\u0648 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0646\u0634\u0631\u06cc\u0627\u062a\u06cc \u0633\u0644\u0633\u0644\u06d2 \u06a9\u06cc\u0648\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u061f \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0648\u0627\u062d\u062f \u0633\u0628\u0633\u06a9\u0631\u067e\u0634\u0646 \u0633\u0679\u0631\u06cc\u0645 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0633\u0646\u0646\u06d2 \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0686\u06be \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0630\u0631\u0627\u0626\u0639 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u067e \u06a9\u06d2 \u0645\u062a\u0639\u062f\u062f \u062d\u0635\u0648\u06ba \u06a9\u0648 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062d\u0641\u0638 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0627\u0644\u06af \u0627\u0644\u06af \u0627\u0635\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0633\u0645\u062c\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0633\u0628 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u06be\u0631\u06cc\u0688\u0688 \u06a9\u0646\u06a9\u0631\u0646\u0633\u06cc \u0645\u0627\u0688\u0644 \u06a9\u0627 \u0646\u062a\u06cc\u062c\u06c1 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0622\u0631\u0627\u0645 \u0633\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>await<\/code> \u0627\u0648\u0631 <code>FutureBuilder<\/code>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0633\u06d2 \u0627\u06cc\u06a9 \u062a\u0635\u0648\u0631 \u0686\u0646\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06c1\u0641\u062a\u06d2 \u0645\u0632\u06cc\u062f \u062a\u0641\u0635\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0633 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u06ba\u06d4 \u0627\u0633\u0679\u0631\u06cc\u0645 \u0688\u06cc\u0628\u0627\u0624\u0646\u0633 \u06a9\u06cc \u0645\u062b\u0627\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0633\u062e\u062a \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba <code>Isolate.run()<\/code> \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u0627\u0635\u0644 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0627 \u06a9\u0627\u0645 \u06a9\u0631\u06d2 \u06af\u06cc\u06d4 Flutter DevTools \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0641\u0631\u06cc\u0645 \u0631\u06cc\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0633\u0645\u062c\u06be \u0628\u06c1\u062a \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0622\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0627\u0644 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0644\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06ba \u0627\u0633 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06c1 \u0645\u06cc\u06ba \u0648\u0627\u0642\u0639\u06cc \u06cc\u06c1 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u0648\u06ba \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062c\u0627\u0646\u062a\u0627 \u062a\u06be\u0627\u06d4 await. \u0645\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627 \u062a\u06be\u0627 FutureBuilder \u0627\u0648\u0631 StreamBuilder \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0633 \u06a9\u0627\u0641\u06cc \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-25947","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/25947","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=25947"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/25947\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=25947"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=25947"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=25947"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}