{"id":24344,"date":"2026-05-23T05:17:43","date_gmt":"2026-05-23T05:17:43","guid":{"rendered":"https:\/\/umang.pk\/2026\/05\/23\/%da%88%d8%a7%d8%b1%d9%b9-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%81%d9%86%da%a9%d8%b4%d9%86%d8%b2-%d8%a7%d9%88%d8%b1-%d9%81%d8%a7%d8%a6%d8%b1-%d8%a8%db%8c%d8%b3-%d8%a7%db%8c%da%88%d9%85%d9%86-sdk-%da%a9\/"},"modified":"2026-05-23T05:17:49","modified_gmt":"2026-05-23T05:17:49","slug":"%da%88%d8%a7%d8%b1%d9%b9-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%81%d9%86%da%a9%d8%b4%d9%86%d8%b2-%d8%a7%d9%88%d8%b1-%d9%81%d8%a7%d8%a6%d8%b1-%d8%a8%db%8c%d8%b3-%d8%a7%db%8c%da%88%d9%85%d9%86-sdk-%da%a9","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/05\/23\/%da%88%d8%a7%d8%b1%d9%b9-%da%a9%d9%84%d8%a7%d8%a4%da%88-%d9%81%d9%86%da%a9%d8%b4%d9%86%d8%b2-%d8%a7%d9%88%d8%b1-%d9%81%d8%a7%d8%a6%d8%b1-%d8%a8%db%8c%d8%b3-%d8%a7%db%8c%da%88%d9%85%d9%86-sdk-%da%a9\/","title":{"rendered":"\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba: \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc\u0646\u0688 \u0628\u06a9"},"content":{"rendered":"\n<div id=\"\">\n<p>\u0627\u06cc\u06a9 \u062e\u0627\u0635 \u0642\u0633\u0645 \u06a9\u06cc \u0631\u06af\u0691 \u06c1\u06d2 \u062c\u0633\u06d2 \u06c1\u0631 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0646\u06d2 \u0645\u062d\u0633\u0648\u0633 \u06a9\u06cc\u0627 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062f\u0646\u0648\u06ba \u06a9\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0627\u0638\u06c1\u0627\u0631 \u062e\u06cc\u0627\u0644\u060c null-safe\u060c \u0627\u0648\u0631 \u0645\u0636\u0628\u0648\u0637\u06cc \u0633\u06d2 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06af\u0632\u0627\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0627 \u0645\u0627\u0688\u0644 \u0635\u0627\u0641 \u06c1\u06d2\u06d4 Async\/await \u0632\u0646\u062c\u06cc\u0631\u0648\u06ba \u06a9\u0648 \u0646\u062b\u0631 \u06a9\u06cc \u0637\u0631\u062d \u067e\u0691\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0679\u0627\u0626\u067e \u0633\u0633\u0679\u0645 \u06a9\u06cc\u0691\u06d2 \u06a9\u06d2 \u0679\u0631\u06af\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646 \u06a9\u06cc \u067e\u0648\u0631\u06cc \u06a9\u06cc\u0679\u06cc\u06af\u0631\u06cc\u0632 \u06a9\u0648 \u067e\u06a9\u0691 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0679\u06cc\u0628 \u06a9\u06be\u0648\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0686\u0627\u0646\u06a9 TypeScript \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0648\u06c1\u06cc \u0686\u06cc\u0632 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0688\u06cc\u06a9\u0644\u06cc\u0626\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>User<\/code> \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u0648\u0631\u0698\u0646\u0648\u06ba \u06a9\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u0645\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627 \u06c1\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0645\u0627\u0688\u0644 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba \u062c\u0633\u06d2 \u0645\u06cc\u06ba \u0646\u06d2 \u0627\u0628\u06be\u06cc \u0688\u0627\u0631\u0679 \u0645\u06cc\u06ba \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 <code>cannot read property of undefined<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u06c1\u06d2 \u062c\u0633\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u0646\u06d2 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u067e\u06a9\u0691 \u0644\u06cc\u0627 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p>\u06cc\u06c1 \u0631\u06af\u0691 \u06a9\u0648\u0626\u06cc \u0645\u0639\u0645\u0648\u0644\u06cc \u062a\u06a9\u0644\u06cc\u0641 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4 \u06cc\u06c1 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0633\u0627\u062e\u062a\u06cc \u0679\u06cc\u06a9\u0633 \u062a\u06be\u0627 \u062c\u0648 \u067e\u0648\u0631\u06d2 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u062a\u06be\u06d2\u06d4 \u062f\u0648 \u0632\u0628\u0627\u0646\u0648\u06ba \u0645\u06cc\u06ba \u062f\u0648 \u06a9\u0648\u0688 \u0628\u06cc\u0633\u0632 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062f\u0648 \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u0645\u0627\u0688\u0644\u0632\u060c \u062f\u0648 \u0642\u0633\u0645 \u06a9\u06d2 \u0646\u0638\u0627\u0645\u060c \u062f\u0648 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0646\u0638\u0627\u0645\u060c \u0627\u0648\u0631 \u062f\u0648 \u0679\u0648\u0644 \u0633\u06cc\u0679\u06d4 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u06c1\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648 \u062a\u0631\u0645\u06cc\u0645\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u06a9\u06cc\u0691\u06d2 \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0632\u0628\u0627\u0646\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0630\u06c1\u0646\u06cc \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0628\u0646\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0679\u06cc\u0645\u06cc\u06ba \u0627\u06a9\u062b\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 JavaScript \u06a9\u0627 \u06a9\u0648\u06af\u0646\u06cc\u0679\u0648 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u0628\u0627\u0626\u0644 \u067e\u0631 \u0645\u0631\u06a9\u0648\u0632 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0627\u0628 \u06cc\u06c1 \u0628\u062f\u0644 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 Cloud Functions for Firebase \u0646\u06d2 Dart \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062a\u0639\u0627\u0648\u0646 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0633\u0627\u062a\u06be \u06c1\u06cc \u0627\u06cc\u06a9 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc Dart Admin SDK \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0633\u06d2 Firestore\u060c \u062a\u0635\u062f\u06cc\u0642\u060c \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c\u060c \u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 Firebase \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u0627 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0633\u06cc \u0632\u0628\u0627\u0646 \u0645\u06cc\u06ba \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0627 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u06c1\u06d2\u060c \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u0633\u06d2 \u06a9\u06be\u06cc\u0646\u0686\u06d2 \u06af\u0626\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644 \u0627\u0648\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u0648\u0688 \u06a9\u0648 \u0627\u0633\u06cc \u0632\u0628\u0627\u0646 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>firebase<\/code> \u06cc\u06c1 \u0648\u06c1 CLI \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u0648\u0646\u06cc\u0641\u0627\u0626\u06cc\u0688 \u0688\u0627\u0631\u0679 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0627 \u062e\u0648\u0627\u0628 \u062c\u0633\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0628\u0631\u0633\u0648\u06ba \u0633\u06d2 \u0645\u0627\u0646\u06af \u0631\u06c1\u06d2 \u062a\u06be\u06d2 \u0628\u0627\u0636\u0627\u0628\u0637\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0648\u0631\u0627 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0627\u0646\u062c\u06cc\u0646\u0626\u0631\u0646\u06af \u06af\u0627\u0626\u06cc\u0688 \u06c1\u06d2\u06d4 \u06c1\u0645 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u06c1 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0645\u06cc\u06ba Node.js \u0641\u0646\u06a9\u0634\u0646\u0632 \u0633\u06d2 \u06a9\u0633 \u0637\u0631\u062d \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u0688\u0645\u0646 SDK \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 Firebase \u0633\u0631\u0648\u0633\u0632 \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0627\u0648\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 Dart \u067e\u06cc\u06a9\u062c\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u06cc\u0633\u06d2 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u060c Flutter \u0645\u06cc\u06ba \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1\u060c \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0645\u0648\u062c\u0648\u062f\u06c1 \u06a9\u0627\u0645 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u067e \u06a9\u0648 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 5 \u0645\u0646\u0679 \u06a9\u0627 \u0641\u0648\u0631\u06cc \u0622\u063a\u0627\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u06af\u0627\u0626\u06cc\u0688\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u0633\u06d2 \u0633\u0645\u062c\u06be\u06cc\u06ba \u06af\u06d2\u060c \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2\u060c \u0644\u06a9\u06be\u0646\u06d2\u060c \u0627\u0646 \u06a9\u06cc \u062a\u0642\u0644\u06cc\u062f \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u062c\u0627\u0646\u06cc\u06ba \u06af\u06d2\u060c \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0645\u062c\u06be\u06cc\u06ba \u06af\u06d2\u060c \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u0646\u0642\u0644 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba \u06af\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0648\u0627\u0636\u062d \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0631\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0628 \u062a\u06cc\u0627\u0631 \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0622\u06af\u06d2 \u0628\u0691\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u0626\u06cc\u06ba: \u06cc\u06c1 \u06af\u0627\u0626\u06cc\u0688 \u06a9\u0644\u0627\u0624\u0688 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0645\u0627\u06c1\u0631\u0627\u0646\u06c1 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u0648 \u0641\u0631\u0636 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0644\u06a9\u06c1 \u0641\u0644\u0679\u0631 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u06d2 \u0639\u0644\u0645 \u067e\u0631 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u0627 \u0627\u0648\u0631 \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0645\u06c1\u0627\u0631\u062a\u06d4<\/strong> \u0622\u067e \u06a9\u0648 \u0645\u0644\u0679\u06cc \u0641\u0627\u0626\u0644 \u0688\u0627\u0631\u0679 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0644\u06a9\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 <code>async<\/code>\/<code>await<\/code> \u0627\u0648\u0631 <code>Future<\/code>\u0688\u0627\u0631\u0679 \u06a9\u06d2 \u0646\u0627\u0644 \u0633\u06cc\u0641 \u0633\u0633\u0679\u0645 \u0627\u0648\u0631 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u0627 <code>pub<\/code>. \u0641\u0644\u0679\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0645\u06cc\u06ba \u0627\u06cc\u0646\u0688 \u0679\u0648 \u0627\u06cc\u0646\u0688 \u0645\u062b\u0627\u0644\u06cc\u06ba \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062a\u062c\u0631\u0628\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u06af\u0627\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u062a\u06cc\u0627\u0631 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba<\/strong> \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 Firebase \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062a\u06be\u0627\u06d4 \u0622\u067e \u0646\u06d2 Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0633\u06d2 FlutterFire CLI \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u067e\u0646\u06cc Flutter \u0627\u06cc\u067e \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0645\u062b\u0627\u0644\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0627\u06cc\u06a9 Firebase \u0633\u0631\u0648\u0633 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 Firestore \u06cc\u0627 Authentication\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0633\u06cc \u067e\u06cc\u0634\u06af\u06cc \u062a\u062c\u0631\u0628\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0633\u0631\u0648\u0631 \u0644\u06cc\u0633 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u062a\u0635\u0648\u0631\u0627\u062a \u0633\u06d2 \u0648\u0627\u0642\u0641 \u06c1\u0648\u0646\u0627 \u0645\u062f\u062f\u06af\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0622\u0631\u0627\u0645\u06d4<\/strong> \u067e\u0648\u0631\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0646\u06d2\u060c \u0679\u0631\u0645\u06cc\u0646\u0644 \u0622\u0624\u0679 \u067e\u0679 \u067e\u0691\u06be\u0646\u06d2\u060c \u0627\u0648\u0631 \u0641\u0627\u0626\u0644 \u0633\u0633\u0679\u0645 \u06a9\u0648 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0627\u067e\u0646\u06d2 \u0628\u0644\u0646\u06af \u067e\u0644\u0627\u0646 \u0633\u06d2 \u0622\u06af\u0627\u06c1 \u0631\u06c1\u06cc\u06ba\u06d4<\/strong> \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u06d2 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0648 Blaze (Pay-as-you-go) \u067e\u0644\u0627\u0646 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631\u0632 \u06a9\u06cc Firebase \u0641\u06cc\u0645\u0644\u06cc \u0622\u067e \u06a9\u0648 \u0628\u0644\u0646\u06af \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0641\u06cc\u0686\u0631\u0632 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0646\u0686\u0646\u06d2 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u0633 \u0679\u06cc\u0648\u0679\u0648\u0631\u06cc\u0644 \u06a9\u06cc \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0642\u06cc\u0645\u062a \u06a9\u06d2 \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4 \u062a\u0627\u06c1\u0645\u060c \u0630\u06c1\u0646 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0644\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><strong>\u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0627\u0648\u0632\u0627\u0631\u06d4<\/strong> \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06d2 \u0679\u0631\u0645\u06cc\u0646\u0644 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0646\u0633\u0679\u0627\u0644 \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u06d2:<\/p>\n<ul>\n<li>\n<p>\u0641\u0644\u0679\u0631 SDK 3.x \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 (\u0628\u0634\u0645\u0648\u0644 Dart SDK 3.x)<\/p>\n<\/li>\n<li>\n<p>Firebase CLI \u0648\u0631\u0698\u0646 15.15.0 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 (\u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>firebase --version<\/code> \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 <code>npm install -g firebase-tools<\/code>)<\/p>\n<\/li>\n<li>\n<p>Node.js 18 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 (Firebase CLI \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688)<\/p>\n<\/li>\n<li>\n<p>\u0688\u0627\u0631\u0679 \u067e\u0644\u06af \u0627\u0646 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0688 \u0627\u06cc\u0688\u06cc\u0679\u0631 (VS \u06a9\u0648\u0688 \u06cc\u0627 \u0688\u0627\u0631\u0679 \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646 \u0648\u0627\u0644\u0627 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u0633\u0679\u0648\u0688\u06cc\u0648)<\/p>\n<\/li>\n<li>\n<p>Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u06cc\u06c1 \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2\u06d4<\/strong> \u0622\u067e \u06a9\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc <code>pubspec.yaml<\/code> \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2:<\/p>\n<pre><code class=\"language-yaml\">dependencies:\n  firebase_functions: ^0.1.0\n  google_cloud_firestore: ^0.1.0\n<\/code><\/pre>\n<p><code>firebase_functions<\/code>    \u06cc\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2\u06d4 <code>fireUp<\/code>\u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 API <code>onRequest<\/code> \u0627\u0648\u0631 <code>onCall<\/code>\u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u06a9 \u0642\u0633\u0645\u06d4 <code>google_cloud_firestore<\/code> \u06cc\u06c1 \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0688\u0627\u0631\u0679 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 SDK \u06c1\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0635\u0631\u0641 \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u062c\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>cloud_firestore<\/code> \u06cc\u06c1 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0648\u06c1 \u0645\u062e\u062a\u0644\u0641 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0627\u06ba \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u062e\u062a\u0644\u0641 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 Flutter \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 Firebase \u06a9\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06d2 \u062a\u062d\u062a \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u0627 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06cc \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba (\u0627\u0633 \u067e\u0631 \u0645\u0632\u06cc\u062f \u0628\u0639\u062f \u0645\u06cc\u06ba) \u06a9\u0648\u0626\u06cc Firebase \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e <code>pubspec.yaml<\/code> \u06c1\u0645 \u0645\u0639\u06cc\u0627\u0631\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4 <code>firebase_core<\/code>\u060c <code>cloud_firestore<\/code>\u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 FlutterFire \u067e\u06cc\u06a9\u062c\u0632 \u062c\u0648 \u0622\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u06cc\u06c1 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062d\u06cc\u062b\u06cc\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0627\u06c1\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06c1\u06d2\u06d4<\/strong> \u0627\u0633 \u06af\u0627\u0626\u06cc\u0688 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u0631 \u0686\u06cc\u0632 Google Cloud Next 2026 \u0645\u06cc\u06ba \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0688\u0627\u0631\u0679 \u0633\u067e\u0648\u0631\u0679 \u067e\u0631 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 API \u0628\u063a\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639 \u06a9\u06d2 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c Node.js \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u06a9\u0686\u06be \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u0628\u06be\u06cc \u062a\u06a9 Dart \u0645\u06cc\u06ba \u062f\u0633\u062a\u06cc\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 Dart \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u0628\u06be\u06cc \u062a\u06a9 Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0648\u0627\u0644\u06d2 \u0635\u0641\u062d\u06c1 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u06cc\u06a9\u06be \u0627\u0648\u0631 \u0627\u0646 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u0627\u0642\u0639\u06cc \u0646\u06cc\u0627 \u0639\u0644\u0627\u0642\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u0679\u06cc\u0645 \u0627\u0633\u06d2 \u0641\u0639\u0627\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 \u06af\u0627\u0626\u06cc\u0688 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062a\u0645\u0627\u0645 \u067e\u0627\u0628\u0646\u062f\u06cc\u0648\u06ba \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u06d2 \u06af\u0627 \u062a\u0627\u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u0645\u0639\u0644\u0648\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06a9\u06c1 \u062d\u062f\u0648\u062f \u06a9\u06c1\u0627\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-what-are-cloud-functions-and-why-does-dart-change-everything\">\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0688\u0627\u0631\u0679 \u0633\u0628 \u06a9\u0686\u06be \u06a9\u06cc\u0648\u06ba \u0628\u062f\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u061f<\/h2>\n<h3 id=\"heading-what-cloud-functions-are\">\u0628\u0627\u062f\u0644 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc\u0627 \u06c1\u06cc\u06ba\u061f<\/h3>\n<p>\u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0644\u06cc\u0633 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0646\u06af \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06c1\u06d2\u06d4 &quot;\u0633\u0631\u0648\u0631 \u0644\u06cc\u0633&#8221; \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0644\u06a9\u06be\u062a\u06d2 \u0627\u0648\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 Google \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0633\u0631\u0648\u0631\u0632\u060c \u0627\u0633\u06a9\u06cc\u0644\u0646\u06af\u060c \u0644\u0648\u0688 \u0628\u06cc\u0644\u0646\u0633\u0646\u06af\u060c \u0622\u067e\u0631\u06cc\u0679\u0646\u06af \u0633\u0633\u0679\u0645 \u0627\u067e \u0688\u06cc\u0679\u0633\u060c \u0627\u0648\u0631 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc\u06d4 \u0622\u067e \u0635\u0631\u0641 \u06af\u0646\u062a\u06cc \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06d2 \u0633\u06cc\u06a9\u0646\u0688\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0627 \u0641\u0646\u06a9\u0634\u0646 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u0641\u0646\u06a9\u0634\u0646 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0635\u0641\u0631 \u0633\u06d2 \u0644\u0627\u06a9\u06be\u0648\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u067e\u06cc\u0645\u0627\u0646\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0642\u062f\u0631 \u06a9\u06cc \u062a\u062c\u0648\u06cc\u0632 \u0633\u0627\u062f\u06c1 \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u0627\u062c\u06a9 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u0622\u067e \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0633\u0631\u0648\u0631 \u0686\u0644\u0627\u0646\u0627 (\u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u06c1\u0646\u06af\u0627 \u0627\u0648\u0631 \u067e\u06cc\u0686\u06cc\u062f\u06c1) \u06cc\u0627 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0645\u06cc\u06ba \u0628\u0632\u0646\u0633 \u0644\u0627\u062c\u06a9 (\u06a9\u0645 \u0645\u062d\u0641\u0648\u0638 \u0627\u0648\u0631 \u0627\u0633\u0679\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u0634\u06a9\u0644) \u06c1\u06d2\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u06a9 \u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627\u060c \u0645\u062d\u0641\u0648\u0638\u060c \u0627\u0648\u0631 \u062a\u0648\u0633\u06cc\u0639 \u067e\u0630\u06cc\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631\u062a \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u0633\u06d2 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc Firebase \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u0633\u06cc \u0627\u0639\u0644\u06cc\u0670 \u0627\u062c\u0627\u0632\u062a\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0627\u062a \u0686\u06cc\u062a \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 \u06a9\u06d2 \u067e\u0627\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u0633\u067e\u0648\u0631\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u067e\u0679\u060c \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679\u060c \u0627\u0632\u06af\u0631\u060c \u062c\u0627\u0648\u0627\u060c \u06af\u0648\u060c \u0627\u0648\u0631 \u0631\u0648\u0628\u06cc \u062a\u06be\u06d2\u06d4 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0633\u0628 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0688\u0627\u0631\u0679 \u0633\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627\u060c \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644\u06cc\u0627\u062a\u06cc \u0646\u0638\u0627\u0645 \u0627\u0648\u0631 \u0679\u0648\u0644\u0632 \u06a9\u0648 \u0633\u06cc\u06a9\u06be\u0646\u0627\u060c \u0627\u0648\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0646\u0642\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u062c\u0628\u06a9\u06c1 \u0688\u0627\u0631\u0679 \u0627\u0633 \u0641\u06c1\u0631\u0633\u062a \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u062b\u0631\u0627\u062a \u0645\u0632\u06cc\u062f \u06af\u06c1\u0631\u06d2 \u06c1\u0648 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0688\u0627\u0631\u0679 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-the-unified-stack-what-actually-changes\">\u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u0633\u0679\u06cc\u06a9: \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u0628\u062f\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0648\u0627\u0636\u062d \u062a\u0628\u062f\u06cc\u0644\u06cc \u0632\u0628\u0627\u0646 \u06c1\u06d2\u06d4 \u062a\u0645 \u0644\u06a9\u06be\u0648 <code>.dart<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0641\u0627\u0626\u0644 <code>.ts<\/code> \u06cc\u0627 <code>.py<\/code> \u0641\u0627\u0626\u0644 \u0644\u06cc\u06a9\u0646 \u06af\u06c1\u0631\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06c1\u06d2\u06d4 <strong>\u06a9\u0648\u0688 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u06cc\u06ba<\/strong>.<\/p>\n<p>\u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 + \u0641\u0644\u0679\u0631 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba\u060c <code>User<\/code> \u0645\u0627\u0688\u0644 \u062f\u0648 \u0628\u0627\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0633\u0631\u0648\u0631 \u067e\u0631 \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u06a9\u0627 \u0627\u06cc\u06a9 \u0648\u0631\u0698\u0646 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc\u0627 \u0634\u06a9\u0644 \u0627\u062e\u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06cc\u0627 \u0644\u0648\u0679\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u0631 \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u06cc\u06a9 \u0648\u0631\u0698\u0646 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u0633 \u0637\u0631\u062d \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u0627\u0648\u0631 \u0688\u0633\u067e\u0644\u06d2 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0641\u06cc\u0644\u0688 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0628\u06be\u0648\u0644 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06a9\u06cc\u0691\u06d2 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0633\u0631\u0648\u0631\u0632 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0644\u06af \u0627\u0644\u06af \u0628\u0646\u0627\u0626\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0646\u0686\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0635\u0631\u0641 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679 \u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u06cc\u0633\u06d2 \u06a9\u06cc\u0691\u06d2 \u0627\u06a9\u062b\u0631 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u06d2\u06d4<\/p>\n<p>\u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba\u060c <code>User<\/code> \u0645\u0627\u0688\u0644 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u062f\u0648\u0646\u0648\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc\u0627\u06ba \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u067e\u0627\u0631\u0679\u06cc\u0627\u06ba \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u067e \u0688\u06cc\u0679\u0633 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06cc\u06d4 \u0688\u0627\u0631\u0679 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0627\u0631 \u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0648 \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u06cc\u0644\u0688 \u06a9\u0627 \u0646\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u0627\u06cc\u06a9 \u0631\u06cc \u0641\u06cc\u06a9\u0679\u0631\u0646\u06af \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c IDE \u0628\u06cc\u06a9 \u0648\u0642\u062a \u067e\u0648\u0631\u06d2 \u06a9\u0648\u0688\u0628\u06cc\u0633 \u0645\u06cc\u06ba \u0646\u0627\u0645 \u0628\u062f\u0644\u0646\u06d2 \u06a9\u0627 \u06a9\u0627\u0645 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u062e\u0627\u06a9\u06c1 \u06a9\u0644\u06cc\u062f\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0627\u062e\u062a\u0644\u0627\u0641\u0627\u062a \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641\u060c \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0627\u0637\u0631\u0627\u0641 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>User<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0627\u0626\u06cc\u06ba \u0637\u0631\u0641 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u0633\u06d2 \u0627\u06cc\u06a9 \u0633\u06d2 \u0644\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>shared<\/code> \u067e\u06cc\u06a9\u062c \u0627\u06cc\u06a9 \u0645\u0627\u0688\u0644 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062f\u0648\u0646\u0648\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0688\u0631\u0641\u0679 \u06a9\u0648 \u0627\u062d\u062a\u06cc\u0627\u0637 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0633\u0627\u062e\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u0645\u0645\u06a9\u0646 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-why-dart-fits-the-serverless-model-particularly-well\">\u06a9\u06cc\u0648\u06ba \u0688\u0627\u0631\u0679 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0631\u0648\u0631 \u0644\u06cc\u0633 \u0645\u0627\u0688\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2\u06d4<\/h3>\n<p>\u0688\u0627\u0631\u0679 \u0627\u06cc\u06a9 \u0627\u06cc\u0688\u0688 \u0622\u0641 \u0679\u0627\u0626\u0645 (AOT) \u0645\u0631\u062a\u0628 \u0634\u062f\u06c1 \u0632\u0628\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0627\u0646 \u06a9\u06cc \u062a\u0634\u0631\u06cc\u062d \u0646\u06c1\u06cc\u06ba \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0628\u0644\u06a9\u06c1 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0631\u062a\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0627\u0635\u06cc\u062a \u0633\u0631\u062f\u06cc \u06a9\u06d2 \u0622\u063a\u0627\u0632 \u067e\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u062b\u0631 \u0627\u0646\u062f\u0627\u0632 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0632\u06cc\u0631 \u0628\u062d\u062b \u0645\u0633\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0644\u0688 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0628\u06cc\u06a9\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0622\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0648 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0645\u062b\u0627\u0644 \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06be\u0627\u0631\u06cc \u0631\u0646 \u0679\u0627\u0626\u0645 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 (\u062c\u06cc\u0633\u06d2 Node.js) \u06cc\u0627 \u0627\u06cc\u06a9 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 (\u062c\u06cc\u0633\u06d2 \u062c\u0627\u0648\u0627)\u060c \u062a\u0648 \u067e\u06c1\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u0626\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0644\u06af \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0631\u0646 \u0679\u0627\u0626\u0645 \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u06a9\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0628\u0627\u0626\u0646\u0631\u06cc\u0632 \u0645\u06cc\u06ba \u0645\u0631\u062a\u0628 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u06a9\u0648\u0644\u0688 \u0633\u0679\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u0645\u0633\u0627\u0648\u06cc Node.js \u06cc\u0627 Python \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u0628\u06c1\u062a \u06a9\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u067e\u06c1\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062a\u0627\u062e\u06cc\u0631 \u0627\u06c1\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0639\u0645\u0644 \u0627\u0633 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c Firebase CLI \u06a9\u0644\u0627\u0624\u0688 \u0645\u06cc\u06ba \u0645\u0631\u062a\u0628 \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u06a9\u0648 \u0627\u067e \u0644\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0637\u0631\u062d Node.js \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc\u0627\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06cc \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0645\u0634\u06cc\u0646 \u067e\u0631 \u0627\u067e\u0646\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0628\u0627\u0626\u0646\u0631\u06cc \u0645\u06cc\u06ba \u0645\u0631\u062a\u0628 \u06a9\u0631\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u0633 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0645\u0634\u06cc\u0646 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Dart SDK \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc (\u0627\u06af\u0631 \u0622\u067e Flutter \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0634\u0627\u0645\u0644 \u06c1\u06d2) \u0627\u0648\u0631 \u0622\u067e \u062c\u0648 \u0628\u0627\u0626\u0646\u0631\u06cc\u0632 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1\u06cc \u0648\u06c1\u06cc \u06c1\u0648\u06ba \u06af\u06cc \u062c\u0646 \u06a9\u0627 \u0622\u067e \u0646\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u062c\u0631\u0628\u06c1 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-problem-this-solves-life-before-dart-on-the-server\">\u0645\u0633\u0626\u0644\u06c1 \u06cc\u06c1 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0633\u0631\u0648\u0631\u0632 \u067e\u0631 \u0688\u0627\u0631\u0679 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06a9\u06cc \u0632\u0646\u062f\u06af\u06cc<\/h2>\n<h3 id=\"heading-the-language-tax-on-flutter-teams\">\u0641\u0644\u0679\u0631 \u0679\u06cc\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0679\u06cc\u06a9\u0633<\/h3>\n<p>\u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06cc \u062e\u0648\u0627\u06c1\u0634 \u0631\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0641\u0644\u0679\u0631 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u062a\u0646\u0638\u06cc\u0645\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u0627 \u067e\u0691\u0627\u06d4 \u0622\u067e \u0627\u06cc\u06a9 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0688\u0648\u06cc\u0644\u067e\u0631 \u06a9\u06cc \u062e\u062f\u0645\u0627\u062a \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 TypeScript \u06cc\u0627 Python \u062c\u0627\u0646\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u062f\u0648 \u0632\u0628\u0627\u0646\u0648\u06ba \u06a9\u06cc \u0645\u0633\u062a\u0642\u0644 \u062a\u0642\u0633\u06cc\u0645 \u0628\u0646\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0633\u06d2 TypeScript \u06cc\u0627 Python \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u06c1\u06c1 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0648\u0688 \u0644\u06a9\u06be \u0633\u06a9\u06cc\u06ba\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u06a9\u0627\u0641\u06cc \u0648\u0642\u062a \u0644\u06af\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0648 \u0644\u0648\u06af \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u06cc\u0646\u06af\u0648\u0626\u062c \u06a9\u06d2 \u0645\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0645\u062a\u0628\u0627\u062f\u0644 \u0637\u0648\u0631 \u067e\u0631\u060c \u06c1\u0645 \u0627\u06cc\u06a9 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u06af\u0631\u06cc\u0632 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u062a\u06be\u06d2 \u0627\u0648\u0631 \u067e\u0648\u0631\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u062a\u06be\u06d2 \u062c\u0648 Firebase \u06a9\u0627 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0639\u0636 \u0627\u0648\u0642\u0627\u062a \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06a9\u0633\u06cc \u0627\u06cc\u0633\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u067e\u0627\u0633 \u062c\u0627\u0646\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u062d\u0633\u0627\u0633 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u067e\u0691\u06be \u0627\u0648\u0631 \u06c1\u06cc\u0631\u0627 \u067e\u06be\u06cc\u0631\u06cc \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<p>\u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0686\u06be\u0627 \u0646\u06c1\u06cc\u06ba \u062a\u06be\u0627\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 \u067e\u0631\u0648\u0688\u06a9\u0679\u06cc\u0648\u0679\u06cc\u060c \u06a9\u0648\u0688 \u06a9\u0648\u0627\u0644\u0679\u06cc\u060c \u06cc\u0627 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0633\u0627\u0644\u0645\u06cc\u062a \u067e\u0631 \u0679\u06cc\u06a9\u0633 \u062a\u06be\u0627 \u0627\u0648\u0631 \u062c\u0628 \u062a\u06a9 \u062a\u0642\u0633\u06cc\u0645 \u0645\u0648\u062c\u0648\u062f \u062a\u06be\u06cc \u0645\u0633\u0644\u0633\u0644 \u0627\u062f\u0627 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u062a\u06be\u06cc\u06d4<\/p>\n<h3 id=\"heading-the-data-contract-problem\">\u0688\u06cc\u0679\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644<\/h3>\n<p>\u0644\u06cc\u0646\u06af\u0648\u06cc\u062c \u0633\u0648\u0626\u0686\u0646\u06af \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1\u060c \u06c1\u0645\u06cc\u06ba Flutter \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 TypeScript \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0688\u06cc\u0679\u0627 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679\u0633 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627 \u062a\u06be\u0627\u06d4 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06c1\u0631 API \u06a9\u0627\u0644 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u06a9\u0686\u06be \u0634\u06a9\u0644 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0648 \u0645\u062a\u0641\u0642 \u06c1\u0648\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u062c\u0648 \u06c1\u0648\u0627 \u0648\u06c1 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u062a\u06be\u0627: \u06cc\u0627 \u062a\u0648 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0627\u06cc\u06a9 README \u0645\u06cc\u06ba \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062e\u062a\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 OpenAPI \u06cc\u0627 \u067e\u0631\u0648\u0679\u0648\u0628\u0641 \u0633\u06a9\u06cc\u0645\u0627 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0679\u0648\u0644\u0646\u06af \u06a9\u06cc \u0627\u06c1\u0645 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u0627 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u063a\u06cc\u0631 \u0631\u0633\u0645\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0679\u06cc\u0633\u0679\u0646\u06af \u0645\u06cc\u06ba \u06a9\u06cc\u0691\u06d2 \u062f\u0631\u06cc\u0627\u0641\u062a \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0628\u06be\u06cc \u0628\u062f\u062a\u0631\u060c \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06d4<\/p>\n<p>\u0688\u0627\u0631\u0679 \u0679\u0627\u0626\u067e \u0633\u0633\u0679\u0645\u060c \u062c\u0648 \u06a9\u0627\u0644 \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u0645\u0634\u062a\u0631\u06a9 \u06c1\u06d2\u060c \u0633\u0627\u062e\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0645\u0633\u0626\u0644\u06d2 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0688\u0627\u0631\u0679 \u0642\u0633\u0645 \u06a9\u0627 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u06cc\u06c1 \u06a9\u0627\u0645 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc README \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u0633\u06a9\u06cc\u0645\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-tooling-gap\">\u0679\u0648\u0644\u0646\u06af \u06af\u06cc\u067e<\/h3>\n<p>\u0688\u0627\u0631\u0679 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u0637\u0627\u0642\u062a\u0648\u0631 \u0633\u0679\u06cc\u0679\u06a9 \u0627\u06cc\u0646\u0627\u0644\u0627\u0626\u0632\u0631\u0632\u060c \u06c1\u0627\u0679 \u0631\u06cc \u0644\u0648\u0688\u0646\u06af\u060c \u0628\u06c1\u062a\u0631\u06cc\u0646 IDE \u0679\u0648\u0644\u0632 \u0633\u06d2 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>dart fix<\/code> \u062e\u0648\u062f\u06a9\u0627\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 pub.dev \u06a9\u0627 \u067e\u06cc\u06a9\u06cc\u062c \u0627\u06cc\u06a9\u0648 \u0633\u0633\u0679\u0645 \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u062a\u0642\u0627\u0636\u0648\u06ba \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0648\u06c1\u06cc \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u0627\u067e\u0646\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 TypeScript \u067e\u0631 \u0633\u0648\u0626\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0627\u067e\u0646\u06d2 \u0645\u0627\u0646\u0648\u0633 \u0679\u0648\u0644\u0646\u06af \u0645\u0627\u062d\u0648\u0644 \u06a9\u0648 \u067e\u06cc\u0686\u06be\u06d2 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u062f\u0627\u062e\u0644 \u06c1\u0648\u0626\u06d2 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u060c \u0627\u067e\u0646\u0627 \u0641\u0627\u0631\u0645\u06cc\u0679\u0631\u060c \u0627\u067e\u0646\u0627 \u0644\u0646\u0679\u0631 \u0633\u06cc\u0679 \u0627\u067e\u060c \u0627\u0648\u0631 \u062e\u0648\u062f \u0627\u0646\u062d\u0635\u0627\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u062f\u0631\u06a9\u0627\u0631 \u062a\u06be\u0627\u06d4 \u0639\u0644\u0645\u06cc \u0627\u0648\u0648\u0631 \u06c1\u06cc\u0688 \u062d\u0642\u06cc\u0642\u06cc \u062a\u06be\u0627\u060c \u0627\u0648\u0631 \u0627\u0646 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u06c1\u0627\u06ba \u06c1\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0646\u06d2 \u0645\u062a\u0639\u062f\u062f \u06a9\u0631\u062f\u0627\u0631 \u0627\u062f\u0627 \u06a9\u06cc\u06d2 \u062a\u06be\u06d2\u060c \u06cc\u06c1 \u0631\u06af\u0691 \u06a9\u0627 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u06be\u0627\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1 \u0648\u06c1\u06cc \u06c1\u06d2\u06d4 <code>dart analyze<\/code>\u060c <code>dart format<\/code>\u0627\u0648\u0631 <code>dart pub<\/code> \u06a9\u0645\u0627\u0646\u0688\u0632 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648\u0688 \u062f\u0648\u0646\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0648\u06c1\u06cc IDE \u0627\u06cc\u06a9\u0633\u0679\u06cc\u0646\u0634\u0646\u0632 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633\u06cc \u0679\u06cc\u0645 \u06a9\u06d2 \u0639\u0644\u0645 \u06a9\u0627 \u0627\u0637\u0644\u0627\u0642 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-dart-cloud-functions-work-core-architecture\">\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba: \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631<\/h2>\n<h3 id=\"heading-the-entry-point-and-fireup\">\u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0627\u067e<\/h3>\n<p>\u06a9\u0646\u0648\u0646\u0634\u0646 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642\u060c \u062a\u0645\u0627\u0645 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>functions\/bin\/server.dart<\/code>. \u06a9\u06c1 <code>main<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 <code>fireUp<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u06c1\u06d2\u06d4 <code>firebase_functions<\/code> \u067e\u06cc\u06a9\u062c <code>fireUp<\/code> \u0627\u06cc\u06a9 HTTP \u0633\u0631\u0648\u0631 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba \u062c\u0648 \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0646\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u0645\u0646\u0627\u0633\u0628 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0627\u062a\u0627 \u06c1\u06d2\u060c Google Apps \u06a9\u06d2 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u0633\u0646\u0627\u062f \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Firebase Admin SDK \u06a9\u0648 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062f\u0631\u0633\u062a \u067e\u0648\u0631\u0679 \u067e\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/bin\/server.dart\n\nimport 'package:firebase_functions\/firebase_functions.dart';\n\nvoid main(List<string> args) async {\n  await fireUp(args, (firebase) {\n    firebase.https.onRequest(\n      name: 'helloWorld',\n      options: const HttpsOptions(cors: Cors(['*'])),\n      (request) async {\n        return Response.ok('Hello from Dart Cloud Functions!');\n      },\n    );\n  });\n}\n<\/string><\/code><\/pre>\n<p><code>fireUp<\/code>    \u06cc\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0628\u0648\u0679\u0633\u0679\u0631\u06cc\u067e \u06c1\u06d2 \u062c\u0648 . <code>firebase_functions<\/code> \u067e\u06cc\u06a9\u062c \u067e\u06c1\u0644\u0627 \u062f\u0639\u0648\u06cc\u0670 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 <code>args<\/code>\u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u062f\u0644\u0627\u0626\u0644 \u06a9\u06cc \u0627\u06cc\u06a9 \u0641\u06c1\u0631\u0633\u062a \u06c1\u06d2 \u062c\u0648 \u0628\u0627\u0626\u0646\u0631\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0645\u0627\u062d\u0648\u0644 \u06af\u0632\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0633\u0646\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0648\u0631\u0679\u0633 \u0627\u0648\u0631 \u062f\u06cc\u06af\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 <code>fireUp<\/code> \u0627\u0646 \u062f\u0644\u0627\u0626\u0644 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0634\u06cc\u0644\u0641 HTTP \u0633\u0631\u0648\u0631 \u06a9\u0648 \u06a9\u0646\u0641\u06cc\u06af\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062f\u0648\u0633\u0631\u06cc \u062f\u0644\u06cc\u0644 \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>firebase<\/code> \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u062c\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0627 \u06c1\u06cc\u0646\u0688\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u062a\u0645\u0627\u0645 \u0627\u0641\u0639\u0627\u0644 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>firebase.https<\/code> \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u0648 \u0637\u0631\u06cc\u0642\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06cc\u06ba\u06d4 <code>onRequest<\/code> \u062e\u0627\u0645 HTTP \u0627\u0641\u0639\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>onCall<\/code> \u0642\u0627\u0628\u0644 \u06a9\u0627\u0644 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 \u06a9\u06c1 <code>name<\/code> \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06c1 \u06c1\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0644\u0627\u06af\u0632 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0631\u0648\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>HttpsOptions<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>cors: Cors(['*'])<\/code> \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u0648 \u062a\u0645\u0627\u0645 \u0688\u0648\u0645\u06cc\u0646\u0632 \u0633\u06d2 \u06a9\u0631\u0627\u0633 \u0627\u0648\u0631\u06cc\u062c\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0679\u06be\u06cc\u06a9 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0688\u0648\u0645\u06cc\u0646\u0632 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>Response.ok(...)<\/code> \u062f\u06cc\u0626\u06d2 \u06af\u0626\u06d2 \u0628\u0627\u0688\u06cc \u0679\u06cc\u06a9\u0633\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be HTTP 200 \u062c\u0648\u0627\u0628 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-http-functions-with-onrequest\">onRequest \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 HTTP \u0641\u0646\u06a9\u0634\u0646<\/h3>\n<p>HTTP \u0641\u0646\u06a9\u0634\u0646\u0632 \u062e\u0627\u0645 HTTP \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0686\u06a9\u062f\u0627\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0642\u0633\u0645 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u0627\u0648\u0631 \u062c\u0648\u0627\u0628\u0627\u062a \u067e\u0631 \u0645\u06a9\u0645\u0644 \u06a9\u0646\u0679\u0631\u0648\u0644 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06c1\u06cc\u0688\u0631\u0632 \u06a9\u0627 \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0627\u0688\u06cc \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 HTTP \u0631\u0633\u067e\u0627\u0646\u0633 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u0628\u0627\u0688\u06cc \u0648\u0627\u067e\u0633 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">firebase.https.onRequest(\n  name: 'getUserProfile',\n  options: const HttpsOptions(\n    cors: Cors(['https:\/\/yourapp.com', 'https:\/\/staging.yourapp.com']),\n    minInstances: 0,\n  ),\n  (request) async {\n    if (request.method != 'GET') {\n      return Response(405, body: 'Method not allowed');\n    }\n\n    final userId = request.url.queryParameters['userId'];\n\n    if (userId == null || userId.isEmpty) {\n      return Response(400, body: 'userId query parameter is required');\n    }\n\n    try {\n      final doc = await firebase.adminApp\n          .firestore()\n          .collection('users')\n          .doc(userId)\n          .get();\n\n      if (!doc.exists) {\n        return Response(404, body: 'User not found');\n      }\n\n      return Response.ok(\n        jsonEncode(doc.data()),\n        headers: {'content-type': 'application\/json'},\n      );\n    } catch (e) {\n      return Response.internalServerError(body: 'Failed to fetch user profile');\n    }\n  },\n);\n<\/code><\/pre>\n<p><code>cors: Cors([...])<\/code>    \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646 \u0688\u0648\u0645\u06cc\u0646\u0632 \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0633\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u0635\u0644 \u0627\u06cc\u067e \u0688\u0648\u0645\u06cc\u0646 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u0646\u0627 \u062f\u0648\u0633\u0631\u06cc \u0648\u06cc\u0628 \u0633\u0627\u0626\u0679\u0633 \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u062c\u0627\u0646\u0628 \u0633\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>minInstances: 0<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u0648 \u06af\u0631\u0645 \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0627 \u0641\u0646\u06a9\u0634\u0646 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06cc \u0645\u062f\u062a \u06a9\u06d2 \u0628\u0639\u062f \u0679\u06be\u0646\u0688\u0627 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0642\u062f\u0631 \u06a9\u0648 1 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u062b\u0627\u0644 \u06c1\u0645\u06cc\u0634\u06c1 \u0641\u0639\u0627\u0644 \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0644\u0688 \u0633\u0679\u0627\u0631\u0679\u0633 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u0646\u06c1 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u062e\u0631\u0627\u062c\u0627\u062a \u0628\u06be\u06cc \u0627\u0679\u06be\u0627\u0646\u0627 \u067e\u0691\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>request.method<\/code> \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 HTTP \u0641\u0639\u0644 \u06c1\u06d2\u06d4 \u06cc\u06c1\u0627\u06ba \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u0627\u06af\u0631 \u0622\u067e \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 \u0635\u0631\u0641 GET \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u06d2\u06d4 <code>request.url.queryParameters<\/code> \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062a\u062c\u0632\u06cc\u06c1 \u06a9\u0631\u062f\u06c1 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06cc \u062a\u0627\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06cc\u06ba: <code>Map<string string=\"\"\/><\/code>. <code>Response(405, ...)<\/code> \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be HTTP \u062c\u0648\u0627\u0628 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>Response.ok(...)<\/code> 200 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06c1\u0648\u0644\u062a \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631\u06d4 <code>headers: {'content-type': 'application\/json'}<\/code> \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0633\u0645 JSON \u06c1\u06d2\u06d4 \u0645\u0648\u0627\u062f \u06af\u0641\u062a \u0648 \u0634\u0646\u06cc\u062f \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 <code>Response.internalServerError(...)<\/code> \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 500 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u06cc\u06c1\u0627\u06ba \u06a9\u06cc\u0686 \u0628\u0644\u0627\u06a9 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-callable-functions-with-oncall\">onCall \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0642\u0627\u0628\u0644 \u06a9\u0627\u0644 \u0627\u0641\u0639\u0627\u0644<\/h3>\n<p>\u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u06a9 \u062e\u0627\u0635 \u0642\u0633\u0645 \u06a9\u0627 HTTP \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0633\u06d2 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u062e\u0627\u0645 HTTP \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644\u0632 \u062e\u0648\u062f \u0628\u062e\u0648\u062f Firebase \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06d2 \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644 \u0644\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u067e\u0627\u0633 \u0644\u0627\u06af \u0627\u0646 \u0635\u0627\u0631\u0641 \u06c1\u06d2\u060c \u062a\u0648 \u0641\u0646\u06a9\u0634\u0646 \u0635\u0627\u0631\u0641 \u06a9\u06d2 UID \u0627\u0648\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u062f\u0639\u0648\u06d2 \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u06c1\u06cc\u0688\u0631 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u067e\u0627\u0631\u0633 \u06a9\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">firebase.https.onCall(\n  name: 'createPost',\n  options: const CallableOptions(\n    cors: Cors(['*']),\n  ),\n  (request, response) async {\n    if (request.auth == null) {\n      throw FirebaseFunctionsException(\n        code: 'unauthenticated',\n        message: 'You must be signed in to create a post.',\n      );\n    }\n\n    final uid = request.auth!.uid;\n\n    final data = request.data as Map<string dynamic=\"\">;\n    final title = data['title'] as String?;\n    final content = data['content'] as String?;\n\n    if (title == null || title.trim().isEmpty) {\n      throw FirebaseFunctionsException(\n        code: 'invalid-argument',\n        message: 'Post title is required.',\n      );\n    }\n\n    if (content == null || content.trim().isEmpty) {\n      throw FirebaseFunctionsException(\n        code: 'invalid-argument',\n        message: 'Post content is required.',\n      );\n    }\n\n    final postRef = await firebase.adminApp\n        .firestore()\n        .collection('posts')\n        .add({\n      'title': title.trim(),\n      'content': content.trim(),\n      'authorId': uid,\n      'createdAt': FieldValue.serverTimestamp(),\n    });\n\n    return CallableResult({'postId': postRef.id, 'success': true});\n  },\n);\n<\/string><\/code><\/pre>\n<p><code>request.auth<\/code>    \u062c\u0628 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0645\u06cc\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062f\u0631\u0633\u062a Firebase \u062a\u0648\u062b\u06cc\u0642 ID \u0679\u0648\u06a9\u0646 \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u062e\u0648\u062f \u0628\u062e\u0648\u062f Firebase \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06be\u0631 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u060c <code>request.auth<\/code> null \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 null \u067e\u06be\u06cc\u0646\u06a9 \u062f\u06cc\u06ba\u06d4 <code>FirebaseFunctionsException<\/code> \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>'unauthenticated'<\/code> \u063a\u06cc\u0631 \u0645\u0633\u062a\u0646\u062f \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0645\u0633\u062a\u0631\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u06cc\u06c1 \u0635\u062d\u06cc\u062d \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2\u06d4 <code>FirebaseFunctionsException<\/code> \u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u0622\u067e \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u06be\u06cc\u0646\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 Firebase Functions \u0631\u0646 \u0679\u0627\u0626\u0645 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0627\u06cc\u0631\u0631 \u0631\u0633\u067e\u0627\u0646\u0633 \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u0627\u0646 \u067e\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>FirebaseFunctionsException<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u062e\u0627\u0645 HTTP \u0627\u06cc\u0631\u0631 \u0628\u0627\u0688\u06cc \u06a9\u0648 \u067e\u0627\u0631\u0633 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062d\u062f\u0648\u062f \u06a9\u0648 \u0639\u0628\u0648\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0634\u06cc\u0646 \u06a9\u06d2 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0627\u06cc\u0631\u0631 \u06a9\u0648\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>request.auth!.uid<\/code> \u0644\u0627\u06af \u0627\u0646 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 Firebase \u062a\u0648\u062b\u06cc\u0642 UID\u060c \u062c\u0648 \u0627\u062c\u0627\u0632\u062a \u06a9\u06d2 \u0641\u06cc\u0635\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0646\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631 \u062f\u06cc \u06c1\u06d2\u06d4 <code>request.data<\/code> \u0641\u0644\u0679\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u06be\u06cc\u062c\u0627 \u06af\u06cc\u0627 \u067e\u06d2 \u0644\u0648\u0688\u060c \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u0627\u0688\u06cc \u0633\u06d2 \u0688\u06cc \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>Map<string dynamic=\"\"\/><\/code>. <code>CallableResult(...)<\/code> \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u0648 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u067e\u0631\u0648\u0679\u0648\u06a9\u0648\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u0644\u067e\u06cc\u0679\u06cc\u06ba \u062c\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0637\u0631\u062d: <code>HttpsCallableResult.data<\/code>.<\/p>\n<h3 id=\"heading-the-current-limitations-what-you-must-know\">\u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u0627\u0628\u0646\u062f\u06cc\u0627\u06ba: \u0622\u067e \u06a9\u0648 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/h3>\n<p>\u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u06a9\u06d2 \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0641\u06cc\u0635\u0644\u06d2 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u063a\u0648\u0631 \u0633\u06d2 \u067e\u0691\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p><strong>\u0635\u0631\u0641<\/strong> <code>onRequest<\/code> <strong>\u0627\u0648\u0631<\/strong> <code>onCall<\/code> <strong>\u0622\u067e \u0627\u0633\u06d2 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/strong> \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a (\u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a\u060c \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a\u060c \u067e\u0628\/\u0633\u0628 \u0679\u0631\u06af\u0631\u0632\u060c \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0679\u0631\u06af\u0631\u0632\u060c \u0634\u06cc\u0688\u0648\u0644 \u06a9\u0631\u062f\u06c1 \u0641\u0646\u06a9\u0634\u0646\u0632) \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u0627\u0626\u06d2 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u06d2 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0633\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0628\u0646\u0646\u06d2 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0679\u0631\u06af\u0631\u0632 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0627\u0646 \u0679\u0631\u06af\u0631\u0632 \u06a9\u0648 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 Node.js \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0648\u0631 Dart \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0628\u0632\u0646\u0633 \u0644\u0627\u062c\u06a9 \u0644\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u06af\u0631\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><code>httpsCallable<\/code> <strong>\u0688\u0627\u0631\u0679 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0646\u0627\u0645 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4<\/strong> \u0645\u0639\u06cc\u0627\u0631\u06cc Firebase \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u0637\u0631\u06cc\u0642\u06d2 <code>FirebaseFunctions.instance.httpsCallable('functionName')<\/code> \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0646\u0627\u0645 \u0633\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0634\u0646\u0627\u062e\u062a\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u0688\u0627\u0631\u0679 \u0641\u06cc\u0686\u0631\u0632 \u06a9\u06cc \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2: <code>httpsCallableFromURL<\/code> \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a\u060c \u0622\u067e \u06a9\u0648 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0645\u06a9\u0645\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0645\u0639\u0646\u06cc \u0648\u0631\u06a9 \u0641\u0644\u0648 \u0641\u0631\u0642 \u06c1\u06d2 \u062c\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0641\u0644\u0679\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u06a9\u0633 \u0637\u0631\u062d \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p><strong>\u0645\u062c\u06be\u06d2 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/strong> \u0627\u06af\u0631 \u0622\u067e \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u0644\u06af\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 Firebase \u06a9\u0646\u0633\u0648\u0644 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0641\u0646\u06a9\u0634\u0646 \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u0626\u06d2 \u06af\u0627\u06d4 \u0627\u067e\u0646\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062f\u06c1 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2\u060c \u0627\u0646 \u06a9\u0627 \u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0646 \u06a9\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u062c\u0627\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0679\u0648\u0644 \u06af\u06cc\u067e \u06c1\u06d2 \u062c\u0648 \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u067e\u064f\u0631 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062d\u06cc\u062b\u06cc\u062a \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_679_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u0645\u0648\u062c\u0648\u062f\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u06cc\u0686\u0631 \u0633\u067e\u0648\u0631\u0679 \u0645\u06cc\u0679\u0631\u06a9\u0633 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0627\u067e\u0646\u06d2 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06cc\u06c1 \u0645\u06cc\u0632 \u0622\u067e \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u062d\u0648\u0627\u0644\u06c1 \u06c1\u06d2\u06d4 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0688\u0627\u0631\u0679 \u0633\u06d2 \u06a9\u0645\u0679\u0645\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 &quot;\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a&#8221; \u06a9\u0627\u0644\u0645 \u06a9\u0648 \u0627\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0691\u06be\u06cc\u06ba \u062c\u0648 &quot;\u0646\u06c1\u06cc\u06ba&#8221; \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u0679\u0631\u06af\u0631 \u0627\u0642\u0633\u0627\u0645 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06cc\u06ba\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0631\u0646\u0627 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0639\u0644\u0648\u0645 \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06a9\u0644\u06cc\u0641 \u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-firebase-admin-sdk-for-dart\">Firebase Admin SDK for Dart<\/h2>\n<h3 id=\"heading-what-the-admin-sdk-is\">\u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u06cc\u0627 \u06c1\u06d2\u061f<\/h3>\n<p>Firebase Admin SDK \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u06c1 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u06a9\u0648 \u0627\u0639\u0644\u06cc\u0670 \u0645\u0631\u0627\u0639\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be Firebase \u0633\u0631\u0648\u0633\u0632 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0639\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 Flutter \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 SDKs Firebase \u0633\u06cc\u06a9\u06cc\u0648\u0631\u0679\u06cc \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0635\u0627\u0631\u0641\u06cc\u0646 \u0635\u0631\u0641 \u0627\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0648 \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u0646\u06c1\u06cc\u06ba \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u0635\u0631\u0641 \u0627\u0646 \u0641\u06cc\u0644\u0688\u0632 \u0645\u06cc\u06ba \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u0627\u0646\u06c1\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u06c1\u06d2\u06d4 \u0627\u06cc\u0688\u0645\u0646 SDK \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u062a\u06a9 \u0645\u06a9\u0645\u0644 \u0627\u0646\u062a\u0638\u0627\u0645\u06cc \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u06cc \u0648\u062c\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0648\u0688 \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0635\u0631\u0641 \u0645\u062d\u0641\u0648\u0638 \u0633\u0631\u0648\u0631 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2 (\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632\u060c \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646\u060c \u0622\u067e \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631\u0632) \u062c\u06c1\u0627\u06ba \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062f\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u0633\u0646\u0627\u062f \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u0688\u0645\u0646 SDK \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0627\u0636\u0627\u0641\u06cc \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-automatic-initialization-in-cloud-functions\">\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0622\u063a\u0627\u0632<\/h3>\n<p>\u062c\u0628 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0627\u06cc\u0688\u0645\u0646 SDK \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06af\u0648\u06af\u0644 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646\u0632 \u06a9\u06cc \u0688\u06cc\u0641\u0627\u0644\u0679 \u0627\u0633\u0646\u0627\u062f \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u0646\u0627\u062f \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0633\u06d2 \u0648\u0627\u0628\u0633\u062a\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u0648 \u0622\u067e \u06a9\u06d2 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u062a\u06a9 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06cc \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u0646\u0627\u062f \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u0627\u060c \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 JSON \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">await fireUp(args, (firebase) {\n  firebase.https.onRequest(\n    name: 'adminExample',\n    (request) async {\n      final sensitiveDoc = await firebase.adminApp\n          .firestore()\n          .collection('admin_only')\n          .doc('config')\n          .get();\n\n      return Response.ok(jsonEncode(sensitiveDoc.data()));\n    },\n  );\n});\n<\/code><\/pre>\n<p><code>firebase.adminApp<\/code>    \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062f\u06c1 \u0627\u06cc\u0688\u0645\u0646 SDK \u0645\u062b\u0627\u0644\u06d4 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0646\u062f\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>fireUp<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 <code>fireUp<\/code> \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0627\u06cc\u06a9 \u0633\u0631\u0648\u0633 \u0627\u06a9\u0627\u0624\u0646\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u06a9\u06d2 \u0639\u0645\u0644 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0645\u0627\u062d\u0648\u0644 \u0633\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2\u06d4 <code>firebase.adminApp.firestore()<\/code> \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06cc \u0645\u06a9\u0645\u0644 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u06cc\u06a9 Firestore \u0645\u062b\u0627\u0644 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>collection('admin_only').doc('config').get()<\/code> \u0645\u062c\u0645\u0648\u0639\u0648\u06ba \u0633\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u067e\u0691\u06be\u06cc\u06ba \u062c\u0646 \u062a\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u06cc\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0645\u0633\u062f\u0648\u062f \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u06d2 \u067e\u0627\u0633 \u06cc\u06c1 \u062d\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u06a9\u0648\u0688 \u06a9\u06cc \u0637\u0627\u0642\u062a \u0627\u0648\u0631 \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc \u06c1\u06d2\u06d4 \u06a9\u0648\u0688 \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0691\u06be \u0627\u0648\u0631 \u0644\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u0631 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0686\u0644\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-firestore-operations-with-the-admin-sdk\">\u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Firestore \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627<\/h3>\n<p>Dart Admin SDK Firestore API \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u067e\u0691\u06be\u0646\u0627\u060c \u0644\u06a9\u06be\u0646\u0627\u060c \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u0627\u060c \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627\u060c \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u0628\u06cc\u0686 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632\u06d4 API \u0633\u0627\u062e\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 \u0633\u06d2 \u0645\u0644\u062a\u0627 \u062c\u0644\u062a\u0627 \u06c1\u06d2\u06d4 <code>cloud_firestore<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0641\u0644\u0679\u0631 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u062c\u0633 \u0633\u06d2 \u0622\u067e \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0648\u0627\u0642\u0641 \u06c1\u0648\u06ba \u06af\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Reading a single document\nfinal docRef = firebase.adminApp\n    .firestore()\n    .collection('posts')\n    .doc(postId);\n\nfinal snapshot = await docRef.get();\n\nif (!snapshot.exists) {\n  return Response(404, body: 'Post not found');\n}\n\nfinal data = snapshot.data()!;\nfinal title = data['title'] as String;\nfinal authorId = data['authorId'] as String;\n<\/code><\/pre>\n<p><code>firebase.adminApp.firestore().collection('posts').doc(postId)<\/code>    \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u0645\u062e\u0635\u0648\u0635 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06c1\u0644\u06a9\u06cc \u067e\u06be\u0644\u06a9\u06cc \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0648 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0645\u06cc\u06ba \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>.get()<\/code> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0627\u0635\u0644 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644\u0632 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>DocumentSnapshot<\/code> \u062c\u0633 \u06a9\u0627 <code>.exists<\/code> \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u06c1\u0645\u06cc\u06ba \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 ID \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0648\u0626\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>snapshot.data()<\/code> \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2: <code>Map<string dynamic=\"\">?<\/string><\/code>\u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u06a9\u0627\u0644\u0639\u062f\u0645 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>!<\/code> ~ \u0628\u0639\u062f <code>data()<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u0622\u067e \u0646\u06d2 \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u06cc \u06c1\u06d2\u060c \u06cc\u06c1 \u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 null \u062f\u0639\u0648\u06cc\u0670 \u06c1\u06d2\u06d4 <code>.exists<\/code> \u0627\u0648\u067e\u0631 \u06a9\u06cc \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba\u06d4 \u06a9\u0627\u0633\u0679\u0646\u06af <code>data['title'] as String<\/code> \u0688\u0627\u0631\u0679 \u0679\u0627\u0626\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0641\u06cc\u0644\u0688\u0632 \u0646\u06a9\u0627\u0644\u06cc\u06ba \u062c\u0633 \u06a9\u06cc \u0622\u067e \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Writing a new document with a server-generated ID\nfinal newPostRef = await firebase.adminApp\n    .firestore()\n    .collection('posts')\n    .add({\n  'title': 'My Post',\n  'authorId': uid,\n  'createdAt': FieldValue.serverTimestamp(),\n});\n\nfinal newPostId = newPostRef.id;\n<\/code><\/pre>\n<p><code>.add({...})<\/code>    \u0645\u062c\u0645\u0648\u0639\u06c1 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0633\u06d2 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0628\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u0645\u0646\u0641\u0631\u062f ID \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>DocumentReference<\/code> \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062a\u062e\u0644\u06cc\u0642 \u0634\u062f\u06c1 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>newPostRef.id<\/code> \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0627\u06cc\u06a9 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 ID \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u0622\u067e \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u0646\u0626\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u067e\u0631 \u062a\u0634\u0631\u06cc\u0641 \u0644\u06d2 \u062c\u0627 \u0633\u06a9\u06d2 \u06cc\u0627 \u0627\u0633 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06d2 \u0633\u06a9\u06d2\u06d4 <code>FieldValue.serverTimestamp()<\/code> \u0627\u06cc\u06a9 \u0633\u06cc\u0646\u0679\u06cc\u0646\u0644 \u0648\u06cc\u0644\u06cc\u0648 \u062c\u0648 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u06af\u06be\u0691\u06cc \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u062a\u062d\u0631\u06cc\u0631 \u06a9\u0627 \u0627\u0631\u062a\u06a9\u0627\u0628 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0633\u0633\u0679\u0645 \u06a9\u06cc \u06af\u06be\u0691\u06cc \u06a9\u06d2 \u0641\u0631\u0642 \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631 \u06c1\u0645\u06cc\u0634\u06c1 \u062f\u0631\u0633\u062a \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Updating specific fields in an existing document\nawait firebase.adminApp\n    .firestore()\n    .collection('posts')\n    .doc(postId)\n    .update({\n  'likeCount': FieldValue.increment(1),\n  'lastModified': FieldValue.serverTimestamp(),\n});\n<\/code><\/pre>\n<p><code>.update({...})<\/code>    \u0635\u0631\u0641 \u0627\u0646 \u0641\u06cc\u0644\u0688\u0632 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0645\u06cc\u06ba \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u0688\u0632 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0641\u06cc\u0644\u0688\u0632 \u06a9\u06d2 \u0630\u06cc\u0644\u06cc \u0633\u06cc\u0679 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1 \u06a9\u0631\u0646\u0627 \u0635\u062d\u06cc\u062d \u06c1\u06d2\u06d4 <code>.set({...})<\/code> \u067e\u0648\u0631\u06cc \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0648 \u0635\u0631\u0641 \u0622\u067e \u06a9\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0641\u06cc\u0644\u0688\u0632 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>FieldValue.increment(1)<\/code> \u0627\u06cc\u06a9 \u0627\u0648\u0631 Firestore \u0633\u06cc\u0646\u0679\u06cc\u0646\u0644 \u062c\u0648 \u0627\u06cc\u06a9 \u0639\u062f\u062f\u06cc \u0641\u06cc\u0644\u0688 \u06a9\u0648 \u0627\u06cc\u06a9 \u062f\u06cc \u06af\u0626\u06cc \u0631\u0642\u0645 \u0633\u06d2 \u0627\u06cc\u0679\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0633\u0631\u0648\u0631 \u067e\u0631 \u062c\u0648\u06c1\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0636\u0627\u0641\u06d2 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0645\u0648\u062c\u0648\u062f\u06c1 \u0642\u06cc\u0645\u062a \u06a9\u0648 \u067e\u0691\u06be\u062a\u06d2 \u0648\u0642\u062a \u067e\u06cc\u062f\u0627 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0646\u0633\u0644 \u06a9\u06cc \u062d\u0627\u0644\u062a\u0648\u06ba \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0642\u062f\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u062a\u06cc\u062c\u06c1 \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u06cc\u06c1 \u0633\u0645\u0648\u0631\u062a\u06cc \u062a\u062d\u0631\u06cc\u0631\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062d\u0641\u0648\u0638 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Querying with filters and ordering\nfinal querySnapshot = await firebase.adminApp\n    .firestore()\n    .collection('posts')\n    .where('authorId', isEqualTo: uid)\n    .orderBy('createdAt', descending: true)\n    .limit(10)\n    .get();\n\nfinal posts = querySnapshot.docs.map((doc) {\n  return {'id': doc.id, ...doc.data()};\n}).toList();\n<\/code><\/pre>\n<p><code>.where('authorId', isEqualTo: uid)<\/code>    \u0635\u0631\u0641 \u0627\u0646 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0648 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u0648 \u0641\u0644\u0679\u0631 \u06a9\u0631\u06cc\u06ba \u062c\u0648: <code>authorId<\/code> \u0645\u06cc\u062f\u0627\u0646 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>uid<\/code>. \u0627\u06a9\u062b\u0631\u06cc\u062a <code>.where()<\/code> \u0622\u067e \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u062c\u0648\u0691 \u06a9\u0631 \u0627\u0636\u0627\u0641\u06cc \u0641\u0644\u0679\u0631\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>.orderBy('createdAt', descending: true)<\/code> \u0646\u062a\u0627\u0626\u062c \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4 <code>createdAt<\/code> \u0645\u06cc\u062f\u0627\u0646\u060c \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646\u06d4 \u062c\u0628 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba <code>orderBy<\/code> \u0641\u06cc\u0644\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c Firestore \u06a9\u0648 \u0627\u0646 \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0627\u0646\u0688\u06cc\u06a9\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u0622\u0633\u0627\u0646 \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>.limit(10)<\/code> \u063a\u06cc\u0631 \u0645\u062d\u062f\u0648\u062f \u067e\u0691\u06be\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 10 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>querySnapshot.docs<\/code> \u06cc\u06c1 \u0641\u06c1\u0631\u0633\u062a \u06c1\u06d2\u06d4 <code>DocumentSnapshot<\/code> \u0627\u0639\u062a\u0631\u0627\u0636 \u0633\u06d2 \u0645\u0645\u0627\u062b\u0644 \u0627\u0634\u06cc\u0627\u0621\u06d4 \u06c1\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba <code>{'id': doc.id, ...doc.data()}<\/code> \u062e\u0648\u062f \u06a9\u0627\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 IDs (\u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0641\u06cc\u0644\u0688 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u062d\u0641\u0648\u0638 \u0646\u06c1\u06cc\u06ba) \u0627\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u0641\u06cc\u0644\u0688 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u0642\u0634\u06d2 \u0645\u06cc\u06ba \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ Batch writes: multiple operations committed atomically\nfinal batch = firebase.adminApp.firestore().batch();\n\nbatch.set(\n  firebase.adminApp.firestore().collection('posts').doc(newPostId),\n  {'title': 'New Post', 'authorId': uid},\n);\n\nbatch.update(\n  firebase.adminApp.firestore().collection('users').doc(uid),\n  {'postCount': FieldValue.increment(1)},\n);\n\nawait batch.commit();\n<\/code><\/pre>\n<p><code>firestore().batch()<\/code>    \u0646\u0633\u0644 <code>WriteBatch<\/code> Firestore \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0628\u06be\u06cc\u062c\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u062a\u0639\u062f\u062f \u062a\u062d\u0631\u06cc\u0631\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>batch.set(...)<\/code> \u0627\u0648\u0631 <code>batch.update(...)<\/code> \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0642\u0637\u0627\u0631 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>batch.commit()<\/code> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u062a\u0645\u0627\u0645 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0627\u06ba \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0648\u06c1\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0633\u0628 \u06a9\u0686\u06be \u0648\u0627\u067e\u0633 \u0644\u06d2 \u0644\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0635\u062d\u06cc\u062d \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2 \u062c\u0628 \u0628\u06be\u06cc \u0622\u067e \u06a9\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062a\u0639\u062f\u062f \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u0627\u06a9\u0627\u0626\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u067e\u0648\u0633\u0679\u0633 \u0628\u0646\u0627\u062a\u06d2 \u0648\u0642\u062a \u0645\u0635\u0646\u0641 \u06a9\u06cc \u067e\u0648\u0633\u0679 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u0646\u0627\u06d4 \u0628\u06cc\u0686\u0646\u06af \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u0648 \u0645\u062a\u0636\u0627\u062f \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<h3 id=\"heading-authentication-operations-with-the-admin-sdk\">\u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0627\u06ba<\/h3>\n<p>\u0627\u06cc\u0688\u0645\u0646 SDK \u0622\u0626\u06cc \u0688\u06cc \u0679\u0648\u06a9\u0646\u0632 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2\u060c \u06cc\u0648 \u0622\u0626\u06cc \u0688\u06cc \u06cc\u0627 \u0627\u06cc \u0645\u06cc\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u06d2\u060c \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2\u060c \u0627\u0648\u0631 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0679\u0648\u06a9\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u062f\u0639\u0648\u06d2 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u06a9\u06cc \u0645\u0631\u0627\u0639\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 SDK \u06a9\u06d2 \u067e\u0627\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">firebase.https.onRequest(\n  name: 'securedEndpoint',\n  (request) async {\n    final authHeader = request.headers['authorization'];\n\n    if (authHeader == null || !authHeader.startsWith('Bearer ')) {\n      return Response(401, body: 'Unauthorized');\n    }\n\n    final idToken = authHeader.substring(7);\n\n    try {\n      final decodedToken = await firebase.adminApp\n          .auth()\n          .verifyIdToken(idToken);\n\n      final uid = decodedToken.uid;\n\n      return Response.ok(jsonEncode({'uid': uid, 'success': true}));\n    } on FirebaseAuthException catch (e) {\n      return Response(401, body: 'Invalid or expired token: ${e.message}');\n    }\n  },\n);\n<\/code><\/pre>\n<p><code>request.headers['authorization']<\/code>    \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc HTTP \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u0633\u06d2 \u0627\u062c\u0627\u0632\u062a \u06a9\u0627 \u06c1\u06cc\u0688\u0631 \u067e\u0691\u06be\u06cc\u06ba\u06d4 Firebase \u062a\u0648\u062b\u06cc\u0642 ID \u0679\u0648\u06a9\u0646 \u0628\u06cc\u0626\u0631\u0631 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u0639\u0646\u06cc \u06c1\u06cc\u0688\u0631 \u0648\u06cc\u0644\u06cc\u0648 \u0627\u06cc\u06a9 \u0633\u0679\u0631\u0646\u06af \u06c1\u06d2\u06d4 <code>\"Bearer \"<\/code> \u0627\u06cc\u06a9 \u0679\u0648\u06a9\u0646 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06c1\u06d2\u06d4 <code>.startsWith('Bearer ')<\/code> \u0679\u0648\u06a9\u0646 \u0646\u06a9\u0627\u0644\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>.substring(7)<\/code> \u067e\u0679\u06cc <code>\"Bearer \"<\/code> \u062e\u0627\u0645 \u0679\u0648\u06a9\u0646 \u0633\u0679\u0631\u0646\u06af \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0627\u0628\u0642\u06c1 \u200b\u200b(7 \u062d\u0631\u0648\u0641)\u06d4 <code>firebase.adminApp.auth().verifyIdToken(idToken)<\/code> \u0679\u0648\u06a9\u0646 \u06a9\u0648 Firebase Token Verification \u0633\u0631\u0648\u0633 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u060c \u062c\u0648 \u062f\u0633\u062a\u062e\u0637 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0626\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0622\u067e \u06a9\u06d2 Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0646\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u0627 \u062a\u06be\u0627\u06d4 \u0627\u06af\u0631 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>DecodedIdToken<\/code> \u0635\u0627\u0631\u0641 \u06a9\u06cc UID \u0627\u0648\u0631 \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u062f\u0639\u0648\u06d2 \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0679\u0648\u06a9\u0646 \u063a\u0644\u0637 \u06c1\u06d2 \u06cc\u0627 \u062e\u062a\u0645 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>FirebaseAuthException<\/code>\u06c1\u0645 \u0627\u0633\u06d2 \u067e\u06a9\u0691\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 401 \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u067e\u06cc\u0679\u0631\u0646 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2: <code>onRequest<\/code> \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0646 \u06c1\u06d2\u06d4 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>onCall<\/code> \u0627\u06af\u0631 \u0622\u067e \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u067e\u0648\u0631\u0627 \u0628\u06c1\u0627\u0624 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06c1\u06cc\u0646\u0688\u0644 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0627\u0645 HTTP \u0641\u0646\u06a9\u0634\u0646\u0632 \u067e\u0631 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u0641\u0627\u0626\u062f\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">await firebase.adminApp\n    .auth()\n    .setCustomUserClaims(uid, {'role': 'admin', 'premiumUser': true});\n<\/code><\/pre>\n<p><code>setCustomUserClaims(uid, {...})<\/code>    \u0635\u0627\u0631\u0641 \u06a9\u06d2 Firebase \u062a\u0648\u062b\u06cc\u0642 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0635\u0648\u0627\u0628\u062f\u06cc\u062f\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0642\u062f\u0631 \u06a9\u0627 \u0688\u06cc\u0679\u0627 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0688\u06cc\u0679\u0627 \u06a9\u0633\u06cc \u0628\u06be\u06cc ID \u0679\u0648\u06a9\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u0635\u0627\u0631\u0641 \u0628\u0639\u062f \u0645\u06cc\u06ba \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u0633 \u0637\u0631\u062d \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2: <code>decodedToken.claims<\/code> \u0622\u067e \u06a9\u06d2 Firestore \u06a9\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u0645\u06cc\u06ba: <code>request.auth.token.role<\/code>. \u0627\u067e\u0646\u06cc \u0645\u0631\u0636\u06cc \u06a9\u06d2 \u062f\u0639\u0648\u06d2 Firebase \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0631\u0648\u0644 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u0633\u0627\u0626\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06cc \u0628\u0627\u0631 \u0635\u0627\u0631\u0641 \u0679\u0648\u06a9\u0646 \u06a9\u06d2 \u062a\u0627\u0632\u06c1 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062f\u0639\u0648\u06cc\u0670 \u0644\u0627\u06af\u0648 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u06c1\u0631 \u06af\u06be\u0646\u0679\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u062a\u0628\u0627\u062f\u0644 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u06a9\u0627\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0632\u0628\u0631\u062f\u0633\u062a\u06cc \u0631\u06cc\u0641\u0631\u06cc\u0634 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: <code>user.getIdToken(true)<\/code> \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u06d2\u06d4<\/p>\n<h2 id=\"heading-setting-up-dart-cloud-functions-step-by-step\">\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u0627: \u0642\u062f\u0645 \u0628\u06c1 \u0642\u062f\u0645<\/h2>\n<h3 id=\"heading-step-1-enabling-the-experimental-feature\">\u0645\u0631\u062d\u0644\u06c1 1: \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0688\u0627\u0631\u0679 \u0633\u067e\u0648\u0631\u0679 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 Firebase CLI \u0645\u06cc\u06ba \u0641\u06cc\u0686\u0631 \u0641\u0644\u06cc\u06af\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 CLI \u0688\u0627\u0631\u0679 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0622\u067e\u0634\u0646 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062c\u06be\u0646\u0688\u0627 \u0641\u0639\u0627\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">firebase experiments:enable dartfunctions\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0622\u067e \u06a9\u06cc \u0645\u0642\u0627\u0645\u06cc Firebase CLI \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u062c\u06be\u0646\u0688\u0627 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0648\u0642\u062a\u06cc \u0633\u06cc\u0679 \u0627\u067e \u0645\u0631\u062d\u0644\u06c1 \u06c1\u06d2 \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0633\u0679\u0645 \u067e\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0627\u0648\u0631 \u0679\u0631\u0645\u06cc\u0646\u0644\u0632 \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">firebase experiments\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u0645\u0627\u0645 \u0641\u0639\u0627\u0644 \u062a\u062c\u0631\u0628\u0627\u062a \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u062a\u0627\u06a9\u06c1 \u0622\u067e \u062f\u06cc\u06a9\u06be \u0633\u06a9\u06cc\u06ba: <code>dartfunctions<\/code> \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u0624\u0679 \u067e\u0679 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06cc\u06c1 \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c <code>firebase init functions<\/code> \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0631\u0627\u062d\u0644 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06a9\u0645\u0627\u0646\u0688\u0632 \u0688\u0627\u0631\u0679 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u0644\u06cc\u0646\u06af\u0648\u06cc\u062c \u0622\u067e\u0634\u0646 \u067e\u06cc\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-2-verifying-your-cli-version\">\u0645\u0631\u062d\u0644\u06c1 2: \u0627\u067e\u0646\u0627 CLI \u0648\u0631\u0698\u0646 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>Dart Cloud Functions \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase CLI \u0648\u0631\u0698\u0646 15.15.0 \u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">firebase --version\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u06a9\u0645\u0627\u0646\u0688 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u0646\u0633\u0679\u0627\u0644 \u0634\u062f\u06c1 CLI \u0648\u0631\u0698\u0646 \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u0624\u0679 \u067e\u0679 15.15.0 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2 \u062a\u0648 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">npm install -g firebase-tools\n<\/code><\/pre>\n<p>\u06cc\u06c1 Firebase CLI \u06a9\u0648 \u0622\u067e \u06a9\u06cc \u0645\u0634\u06cc\u0646\u0648\u06ba \u067e\u0631 \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 \u06a9\u06c1 <code>-g<\/code> \u062c\u06be\u0646\u0688\u06d2 \u0639\u0627\u0644\u0645\u06cc \u0633\u0637\u062d \u067e\u0631 \u0646\u0635\u0628 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 <code>firebase<\/code> \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc \u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u06cc \u062c\u0627 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">firebase login\n<\/code><\/pre>\n<p>CLI \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0622\u067e \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0627\u06af \u0627\u0646 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0631\u0633\u062a Google \u0627\u06a9\u0627\u0624\u0646\u0679 \u0633\u06d2 \u0648\u0627\u0628\u0633\u062a\u06c1 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0646\u06d2 \u062d\u0627\u0644 \u06c1\u06cc \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0644\u0627\u06af \u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u06cc\u0642\u06cc\u0646 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u0633\u0646\u0627\u062f \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u0631\u062d\u0644\u06c1 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-step-3-initializing-cloud-functions-with-dart\">\u0645\u0631\u062d\u0644\u06c1 3: \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-bash\">firebase init functions\n<\/code><\/pre>\n<p>\u062c\u0628 CLI \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u06d2 \u062a\u0648 \u0627\u06af\u0644\u0627 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u0688\u0627\u0631\u0679<\/strong>. \u062c\u0628 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648\u060c \u0627\u06af\u0644\u0627 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <strong>\u06c1\u0627\u06ba<\/strong>. CLI \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0688\u06be\u0627\u0646\u0686\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_488_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u0645\u0646\u0635\u0648\u0628\u06d2 \u06a9\u06cc \u0633\u0627\u062e\u062a \u06a9\u0627 \u062e\u0627\u06a9\u06c1\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p><code>functions\/bin\/server.dart<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u062f\u0627\u062e\u0644\u06cc \u0646\u0642\u0637\u06c1 \u06c1\u06d2\u06d4 Firebase CLI \u062c\u0627\u0646\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627 \u067e\u0631 \u06cc\u06c1\u0627\u06ba \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>firebase.json<\/code> \u0627\u0633\u06d2 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>functions\/lib\/<\/code> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u0627\u0636\u0627\u0641\u06cc \u0688\u0627\u0631\u0679 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0688\u0627\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>server.dart<\/code> \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u0628\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0646\u06a9\u0634\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0645\u0646\u0638\u0645 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0622\u0645\u062f\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u06ba\u06d4 <code>functions\/pubspec.yaml<\/code> \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0633\u06d2 \u0627\u0644\u06af \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc \u0641\u06cc\u0633\u0679\u06d4 <code>pubspec.yaml<\/code>. <code>firebase.json<\/code> CLI \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u0648 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u060c \u0628\u0634\u0645\u0648\u0644 \u0645\u0631\u062a\u0628 \u06a9\u0631\u062f\u06c1 \u0628\u0627\u0626\u0646\u0631\u06cc \u067e\u0627\u062a\u06be\u0632 \u0627\u0648\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06cc\u0679\u0646\u06af\u0632\u06d4<\/p>\n<p>\u067e\u06cc\u062f\u0627 \u06a9\u06cc\u0627 <code>server.dart<\/code> \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc &quot;\u06c1\u06cc\u0644\u0648 \u0648\u0631\u0644\u0688&#8221; \u062e\u0635\u0648\u0635\u06cc\u062a \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2 \u062c\u0633\u06d2 \u0622\u067e \u0627\u067e\u0646\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">import 'package:firebase_functions\/firebase_functions.dart';\n\nvoid main(List<string> args) async {\n  await fireUp(args, (firebase) {\n    firebase.https.onRequest(\n      name: 'helloWorld',\n      options: const HttpsOptions(cors: Cors(['*'])),\n      (request) async {\n        return Response.ok('Hello from Dart Cloud Functions!');\n      },\n    );\n  });\n}\n<\/string><\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u0644\u06cc\u06a9\u0646 \u0645\u06a9\u0645\u0644 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u06cc\u0686\u0631 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>main<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0644\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>args<\/code> \u0628\u0627\u0626\u0646\u0631\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0631\u0646 \u0679\u0627\u0626\u0645 \u06af\u0632\u0631 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0635\u0641\u06d4 <code>fireUp<\/code> \u067e\u0648\u0631\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u067e\u0691\u06be\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>onRequest<\/code> \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0648\u0631 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 200 \u0627\u0633\u0679\u06cc\u0679\u0633 \u0627\u0648\u0631 \u0633\u0627\u062f\u06c1 \u0679\u06cc\u06a9\u0633\u0679 \u0628\u0627\u0688\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u0631 HTTP \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u062c\u0648\u0627\u0628 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0645\u0646\u0637\u0642 \u0645\u06cc\u06ba \u0648\u0642\u062a \u0644\u06af\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0645\u0631\u062a\u0628 \u0627\u0648\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-4-running-the-local-emulator\">\u0645\u0631\u062d\u0644\u06c1 4: \u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-bash\">firebase emulators:start\n<\/code><\/pre>\n<p>\u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u0686\u06be \u0627\u0633 \u0637\u0631\u062d \u0634\u0631\u0648\u0639 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_110_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0644\u0627\u0646\u0686 \u0627\u0645\u06cc\u062c\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p><code>firebase emulators:start<\/code>    \u062a\u0645\u0627\u0645 \u062a\u0631\u062a\u06cc\u0628 \u0634\u062f\u06c1 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631\u0632 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4 <code>firebase.json<\/code>. \u0688\u0627\u0631\u0679 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0633\u0631\u0648\u0631 \u06a9\u0648 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0627\u0641\u0639\u0627\u0644 \u06a9\u0648 \u0645\u0631\u062a\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0635\u0631 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0645\u0631\u062d\u0644\u06d2 \u06a9\u06d2 \u0628\u0639\u062f &quot;\u062a\u06cc\u0627\u0631 \u0688\u0627\u0631\u0679 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631&#8221; \u0644\u0627\u0626\u0646 \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u06cc\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u067e\u0648\u0631\u0679 5001 \u067e\u0631 \u0628\u0637\u0648\u0631 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u067e\u0648\u0631\u0679 8080 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0627 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0686\u0644\u0646\u06d2 \u067e\u0631 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0688 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0633\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062c\u0691 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0627 <code>helloWorld<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0627\u0633 \u0633\u06d2 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2: <code>http:\/\/127.0.0.1:5001\/your-project-id\/us-central1\/helloWorld<\/code>. \u0688\u0627\u0631\u0679 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u0627 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0630\u06a9\u0631 \u0641\u0627\u0626\u062f\u06c1 \u06af\u0631\u0645 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>.dart<\/code> \u0627\u06af\u0631 \u0641\u0627\u0626\u0644 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648\u060c \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0627 \u067e\u062a\u06c1 \u0644\u06af\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0645\u067e\u0627\u0626\u0644 \u0627\u0648\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u060c \u0628\u063a\u06cc\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0648\u0626\u06cc \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-5-connecting-your-flutter-app-to-the-emulator\">\u0645\u0631\u062d\u0644\u06c1 5: \u0627\u067e\u0646\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-dart\">import 'package:cloud_functions\/cloud_functions.dart';\n\nvoid _connectToEmulators() {\n  FirebaseFunctions.instance.useFunctionsEmulator('localhost', 5001);\n}\n<\/code><\/pre>\n<p><code>useFunctionsEmulator('localhost', 5001)<\/code>    \u0622\u067e \u06a9\u06d2 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u06d2 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644\u0632 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u0648\u0631\u0679 5001 \u067e\u0631 \u0645\u0642\u0627\u0645\u06cc \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u0648 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631\u060c \u0622\u067e \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>main()<\/code> \u0627\u0633 \u06a9\u06d2 \u0641\u0648\u0631\u0627\u064b \u0628\u0639\u062f <code>Firebase.initializeApp()<\/code>. \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0635\u0631\u0641 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06cc\u0627 \u062a\u0635\u062f\u06cc\u0642 \u067e\u0631 \u0646\u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u06a9\u06cc \u062a\u0642\u0644\u06cc\u062f \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0645\u0633\u0627\u0648\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">if (Platform.isAndroid) {\n  FirebaseFunctions.instance.useFunctionsEmulator('10.0.2.2', 5001);\n} else {\n  FirebaseFunctions.instance.useFunctionsEmulator('localhost', 5001);\n}\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0648\u0626\u06cc\u0688 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u0648\u0631\u0686\u0648\u0626\u0644 \u0645\u0634\u06cc\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u067e\u0646\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u06d2 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0633\u06d2: <code>localhost<\/code> \u0627\u0633 \u0633\u06d2 \u0645\u0631\u0627\u062f \u062e\u0648\u062f \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06c1\u06d2\u060c \u062a\u0631\u0642\u06cc \u06a9\u06cc \u0645\u0634\u06cc\u0646 \u0646\u06c1\u06cc\u06ba\u06d4 \u062e\u0635\u0648\u0635\u06cc \u067e\u062a\u06c1 <code>10.0.2.2<\/code> \u0627\u0633 \u0637\u0631\u062d \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06c1\u0648\u0633\u0679 \u0633\u0633\u0679\u0645 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u0627 \u06c1\u06d2\u06d4 <code>localhost<\/code>. iOS \u0633\u0645\u06cc\u0644\u06cc\u0679\u0631 \u06a9\u0648 \u06cc\u06c1 \u0645\u0633\u0626\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0645\u06cc\u0632\u0628\u0627\u0646 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u06a9\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0648 \u0634\u06cc\u0626\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>localhost<\/code> \u06cc\u06c1 \u0648\u06c1\u0627\u06ba \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>Platform.isAndroid<\/code> \u0686\u06cc\u06a9 \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0635\u062d\u06cc\u062d \u067e\u062a\u06c1 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0648\u0646\u0648\u06ba \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0648\u0688 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-step-6-deploying-to-production\">\u0645\u0631\u062d\u0644\u06c1 6: \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-bash\">firebase deploy --only functions\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>--only functions<\/code> \u062c\u06be\u0646\u0688\u0627 CLI \u0633\u06d2 \u06a9\u06c1\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0648\u06c1 \u0635\u0631\u0641 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u06d2 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u06d2 \u062f\u06cc\u06af\u0631 \u0648\u0633\u0627\u0626\u0644 (\u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0631\u0648\u0644\u0632\u060c \u06c1\u0648\u0633\u0679\u0646\u06af \u0648\u063a\u06cc\u0631\u06c1) \u06a9\u0648 \u0686\u06be\u0648\u0691 \u062f\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u06cc \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u0627 \u0639\u0645\u0644 Node.js \u0633\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 Firebase CLI \u0686\u0644\u06d2 \u06af\u0627\u06d4 <code>dart compile exe<\/code> \u0627\u067e\u0646\u06cc \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0645\u0634\u06cc\u0646 \u067e\u0631 \u0645\u0642\u0627\u0645\u06cc \u0628\u0627\u0626\u0646\u0631\u06cc\u0632 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u067e\u06be\u0631 \u0627\u0633 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u067e\u0631 \u0627\u067e \u0644\u0648\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0622\u0624\u0679 \u067e\u0679 \u0645\u06cc\u06ba \u062a\u0639\u06cc\u0646\u0627\u062a \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 URL \u0634\u0627\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">&#x2714;  functions: Finished running predeploy script.\n&#x2714;  functions: helloWorld(us-central1) deployed successfully.\n\nFunction URL (helloWorld(us-central1)):\n  https:\/\/helloworld-abc123def456-uc.a.run.app\n<\/code><\/pre>\n<p>\u0627\u0633 URL \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0627\u0631\u062f \u06af\u0631\u062f \u06a9\u06cc \u067e\u0627\u0628\u0646\u062f\u06cc\u0648\u06ba \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 <code>httpsCallable<\/code> \u0646\u0627\u0645 \u06a9\u06d2 \u062d\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633 URL \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u06cc \u06c1\u06cc\u0634 (<code>abc123def456<\/code>) \u06c1\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0646\u0641\u0631\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u06c1\u0627\u0631\u0688 \u06a9\u0648\u0688 \u06a9\u0631\u0646\u0627 \u06cc\u0627 Firebase Remote Config \u0633\u06d2 \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-calling-dart-functions-from-flutter\">\u0641\u0644\u0679\u0631 \u0633\u06d2 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h2>\n<h3 id=\"heading-calling-with-httpscallablefromurl\">httpsCallableFromURL \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>httpsCallable('functionName')<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u0688\u0627\u0631\u0679 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>httpsCallableFromURL<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0645\u06a9\u0645\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/services\/functions_service.dart\n\nimport 'package:cloud_functions\/cloud_functions.dart';\n\nclass FunctionsService {\n  static const _createPostUrl=\"https:\/\/createpost-abc123def456-uc.a.run.app\";\n\n  static const _getUserProfileUrl=\"https:\/\/getuserprofile-abc123def456-uc.a.run.app\";\n\n  Future<string> createPost({\n    required String title,\n    required String content,\n  }) async {\n    try {\n      final callable = FirebaseFunctions.instance.httpsCallableFromURL(\n        _createPostUrl,\n      );\n\n      final result = await callable.call({\n        'title': title,\n        'content': content,\n      });\n\n      return result.data['postId'] as String;\n    } on FirebaseFunctionsException catch (e) {\n      throw _mapFunctionException(e);\n    }\n  }\n\n  Exception _mapFunctionException(FirebaseFunctionsException e) {\n    switch (e.code) {\n      case 'unauthenticated':\n        return UnauthorizedException('Please sign in to continue.');\n      case 'invalid-argument':\n        return ValidationException(e.message ?? 'Invalid input.');\n      case 'not-found':\n        return NotFoundException(e.message ?? 'Resource not found.');\n      default:\n        return ServerException(\n          e.message ?? 'An unexpected error occurred.',\n        );\n    }\n  }\n}\n<\/string><\/code><\/pre>\n<p>\u0627\u067e\u0646\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0648 \u062d\u0633\u0628 \u0630\u06cc\u0644 \u0645\u0631\u06a9\u0632\u06cc \u0628\u0646\u0627\u0626\u06cc\u06ba: <code>static const<\/code> \u0633\u0631\u0648\u0633 \u06a9\u0644\u0627\u0633 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0679\u0631\u0646\u06af \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0633 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u06c1\u06d2\u060c \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u0628\u0691\u06cc \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 Firebase Remote Config \u0633\u06d2 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u0627\u06cc\u067e \u06a9\u0627 \u0646\u06cc\u0627 \u0648\u0631\u0698\u0646 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 URLs \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631 \u0633\u06a9\u06cc\u06ba\u06d4 <code>FirebaseFunctions.instance.httpsCallableFromURL(_createPostUrl)<\/code> \u0646\u0633\u0644 <code>HttpsCallable<\/code> \u062f\u06cc\u0626\u06d2 \u06af\u0626\u06d2 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0648 \u0646\u0634\u0627\u0646\u06c1 \u0628\u0646\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0686\u06cc\u0632\u06d4 \u06cc\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u067e\u0631\u0648\u0679\u0648\u06a9\u0648\u0644 \u06a9\u06cc \u062a\u0645\u0627\u0645 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646 \u0641\u0627\u0631\u0645 \u0645\u06cc\u06ba \u0633\u0645\u06cc\u0679\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0628\u0627\u0688\u06cc \u0645\u06cc\u06ba \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632 \u06a9\u0631\u0646\u0627 \u0627\u0648\u0631 \u062c\u0648\u0627\u0628 \u06a9\u0648 \u0688\u06cc \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632 \u06a9\u0631\u0646\u0627\u06d4 <code>callable.call({...})<\/code> \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0646\u0642\u0634\u06c1 \u06a9\u0648 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u067e\u06d2 \u0644\u0648\u0688 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc\u062c\u06cc\u06ba\u06d4 <code>HttpsCallableResult<\/code> \u0641\u0646\u06a9\u0634\u0646 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u06d4 <code>result.data<\/code> \u0686\u0627\u0646\u062f\u06cc <code>Map<string dynamic=\"\"\/><\/code> \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0648\u0627\u067e\u0633 <code>CallableResult(...)<\/code> \u0633\u0631\u0648\u0631 \u067e\u0631\u06d4 \u06a9\u0686\u06be \u067e\u0631\u06a9\u0634\u0634 <code>FirebaseFunctionsException<\/code> \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0633\u0627\u062e\u062a\u06cc \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u0648 \u067e\u06a9\u0691\u06cc\u06ba\u06d4 <code>FirebaseFunctionsException<\/code> \u0633\u0631\u0648\u0631 \u067e\u0631\u06d4 <code>e.code<\/code> \u06cc\u06c1 \u0645\u0634\u06cc\u0646 \u067e\u0691\u06be\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0627\u06cc\u0631\u0631 \u06a9\u0648\u0688 \u06c1\u06d2\u06d4 <code>_mapFunctionException<\/code> Firebase \u06a9\u06cc \u0645\u062e\u0635\u0648\u0635 \u0627\u0642\u0633\u0627\u0645 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u0633\u06d2 \u062f\u0648\u0631 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0627\u0646\u06c1\u06cc\u06ba \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0633\u062a\u062b\u0646\u0627\u0626\u06cc \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u0645\u06cc\u06ba \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0688\u0648\u0645\u06cc\u0646 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-calling-http-functions-directly\">HTTP \u0627\u0641\u0639\u0627\u0644 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h3>\n<p>\u06a9\u06d2 \u0644\u06cc\u06d2 <code>onRequest<\/code> HTTP \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u0633\u06cc \u062f\u0648\u0633\u0631\u06d2 HTTP \u0627\u06cc\u0646\u0688 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0637\u0631\u062d \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>http<\/code> \u067e\u06cc\u06a9\u06cc\u062c:<\/p>\n<pre><code class=\"language-dart\">import 'package:http\/http.dart' as http;\nimport 'dart:convert';\n\nclass ProfileService {\n  static const _getUserProfileUrl=\"https:\/\/getuserprofile-abc123def456-uc.a.run.app\";\n\n  Future<map dynamic=\"\">> getUserProfile(String userId) async {\n    final user = FirebaseAuth.instance.currentUser;\n    final idToken = await user?.getIdToken();\n\n    final response = await http.get(\n      Uri.parse('(_getUserProfileUrl?userId=)userId'),\n      headers: {\n        if (idToken != null) 'Authorization': 'Bearer $idToken',\n        'Content-Type': 'application\/json',\n      },\n    );\n\n    if (response.statusCode == 200) {\n      return jsonDecode(response.body) as Map<string dynamic=\"\">;\n    }\n\n    throw ServerException('Failed to fetch profile: ${response.statusCode}');\n  }\n}\n<\/string><\/map><\/code><\/pre>\n<p><code>FirebaseAuth.instance.currentUser<\/code>    \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0642\u0627\u0645\u06cc Firebase \u062a\u0635\u062f\u06cc\u0642\u06cc \u06a9\u06cc\u0634\u06d2 \u0633\u06d2 \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0644\u0627\u06af \u0627\u0646 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>user?.getIdToken()<\/code> \u0635\u0627\u0631\u0641 \u06a9\u0627 \u0645\u0648\u062c\u0648\u062f\u06c1 ID \u0679\u0648\u06a9\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u0627\u0633 \u06a9\u06cc \u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648 \u06af\u0626\u06cc \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u062a\u0627\u0632\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>?<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0635\u0627\u0631\u0641 \u0644\u0627\u06af \u0627\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 null \u0648\u0627\u067e\u0633 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0645\u0634\u0631\u0648\u0637 \u06c1\u06cc\u0688\u0631 \u062f\u0627\u062e\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0648 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>if (idToken != null) 'Authorization': 'Bearer (idToken'<\/code> \u06cc\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0644\u06cc\u06a9\u0634\u0646 \u06c1\u06d2\u06d4 <code>if<\/code> \u0646\u062d\u0648 \u0645\u06cc\u06ba \u0645\u0634\u0631\u0648\u0637 \u0637\u0648\u0631 \u067e\u0631 \u0627\u062c\u0627\u0632\u062a \u06a9\u0627 \u06c1\u06cc\u0688\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062c\u0628 \u0679\u0648\u06a9\u0646 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0631\u0648\u0633 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u0648 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u06af\u0645\u0646\u0627\u0645 \u062f\u0648\u0646\u0648\u06ba \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0679\u0648\u06a9\u0646 \u0646\u06c1 \u06c1\u0648 \u062a\u0648 \u0635\u0631\u0641 \u06c1\u06cc\u0688\u0631 \u06a9\u0648 \u0686\u06be\u0648\u0691 \u06a9\u0631\u06d4 <code>Uri.parse(')_getUserProfileUrl?userId=$userId')<\/code> URL \u0645\u06cc\u06ba \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u06a9\u06d2 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>jsonDecode(response.body) as Map<string dynamic=\"\"\/><\/code> JSON \u0631\u0633\u067e\u0627\u0646\u0633 \u0628\u0627\u0688\u06cc \u06a9\u0648 \u0688\u0627\u0631\u0679 \u0645\u06cc\u067e \u0645\u06cc\u06ba \u067e\u0627\u0631\u0633 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 200 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>ServerException<\/code> \u0627\u0633\u06d2 \u0688\u06cc\u0628\u06af\u0646\u06af \u06a9\u06d2 \u0645\u0642\u0627\u0635\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0634\u0627\u0645\u0644 \u0627\u0633\u0679\u06cc\u0679\u0633 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u0679\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-the-shared-package-eliminating-data-model-duplication\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c: \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644 \u0688\u06cc\u0688\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646<\/h2>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0632 \u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u0627\u0633\u0679\u0648\u0631\u06cc \u06a9\u0627 \u0633\u0627\u062e\u062a\u06cc \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0627\u06c1\u0645 \u062a\u0631\u06cc\u0646 \u062d\u0635\u06c1 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0641\u0644\u0679\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc \u06a9\u0648\u0626\u06cc \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2 \u062c\u0648 \u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644\u060c \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0645\u0646\u0637\u0642\u060c \u0645\u0633\u062a\u0642\u0644\u060c \u0627\u0648\u0631 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-creating-the-shared-package\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u0628\u0646\u0627\u0626\u06cc\u06ba<\/h3>\n<pre><code class=\"language-bash\">dart create --template=package packages\/shared\n<\/code><\/pre>\n<p><code>dart create --template=package<\/code>    \u0645\u0639\u06cc\u0627\u0631\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0644\u06d2 \u0622\u0624\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <code>lib\/<\/code> \u0639\u0648\u0627\u0645\u06cc \u06a9\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc\u061b <code>test\/<\/code> \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc \u0627\u0648\u0631 <code>pubspec.yaml<\/code>. \u06a9\u06c1 <code>packages\/shared<\/code> \u0631\u0627\u0633\u062a\u06c1 \u0627\u0646\u062f\u0631 \u0631\u06a9\u06be\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 <code>packages\/<\/code> \u067e\u0631\u0627\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0641\u0648\u0644\u0688\u0631\u060c \u062c\u0648 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u0688\u06be\u0627\u0646\u0686\u06d2 \u0645\u06cc\u06ba \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u062e\u0635\u0648\u0635 \u062c\u06af\u06c1 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u0627\u0633 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_70_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0633\u0627\u062e\u062a \u06a9\u06cc \u062a\u0635\u0648\u06cc\u0631\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 <code>pubspec.yaml<\/code> \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-yaml\">name: shared\ndescription: Shared data models and logic for the Kopa app.\nversion: 0.1.0\n\nenvironment:\n  sdk: ^3.0.0\n\ndependencies:\n  json_annotation: ^4.8.0\n\ndev_dependencies:\n  build_runner: ^2.4.0\n  json_serializable: ^6.7.0\n  test: ^1.24.0\n<\/code><\/pre>\n<p>\u0627\u0633 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u062e\u0635\u0648\u0635\u06cc\u062a \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>pubspec.yaml<\/code> \u06a9\u06cc\u0627 \u063a\u0627\u0626\u0628 \u06c1\u06d2: \u06a9\u0648\u0626\u06cc \u0646\u06c1\u06cc\u06ba\u06d4 <code>flutter<\/code>\u0646\u06c1\u06cc\u06ba <code>firebase_core<\/code>\u0646\u06c1\u06cc\u06ba <code>firebase_functions<\/code>\u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba <code>cloud_firestore<\/code>. \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0627 \u0627\u0646\u062d\u0635\u0627\u0631 \u0635\u0631\u0641 \u062e\u0627\u0644\u0635 \u0688\u0627\u0631\u0679 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1\u06cc \u0686\u06cc\u0632 \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u0641\u0646\u06a9\u0634\u0646 \u067e\u06cc\u06a9\u062c \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u062f\u0648\u0646\u0648\u06ba \u0633\u06d2 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u067e\u06cc\u062f\u0627 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u0645\u0645\u06a9\u0646 \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>json_annotation<\/code> \u067e\u06cc\u0634\u06a9\u0634 <code>@JsonSerializable()<\/code> \u0645\u0627\u0688\u0644 \u06a9\u0644\u0627\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u062a\u0634\u0631\u06cc\u062d\u06d4 <code>json_serializable<\/code> \u0627\u06cc\u06a9 \u0628\u0644\u0688 \u0679\u0627\u0626\u0645 \u06a9\u0648\u0688 \u062c\u0646\u0631\u06cc\u0679\u0631 \u062c\u0648 \u0627\u0646 \u062a\u0628\u0635\u0631\u0648\u06ba \u06a9\u0648 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>fromJson<\/code>\/<code>toJson<\/code> \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0635\u0631\u0641 \u062a\u0631\u0642\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u0646\u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633\u06d2 \u062a\u0631\u0642\u06cc\u0627\u062a\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0631\u062c \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>build_runner<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u0627 \u0679\u0648\u0644 \u06c1\u06d2 \u062c\u0648 \u06a9\u0648\u0688 \u062c\u0646\u0631\u06cc\u0679\u0631 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0627\u0646\u062d\u0635\u0627\u0631 \u0628\u06be\u06cc \u06c1\u06d2\u06d4 <code>test<\/code> \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u06cc \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-defining-shared-models\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0627\u0688\u0644 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641<\/h3>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/models\/post.dart\n\nimport 'package:json_annotation\/json_annotation.dart';\n\npart 'post.g.dart';\n\n@JsonSerializable()\nclass Post {\n  final String id;\n  final String title;\n  final String content;\n  final String authorId;\n  final int likeCount;\n  final DateTime createdAt;\n\n  const Post({\n    required this.id,\n    required this.title,\n    required this.content,\n    required this.authorId,\n    required this.likeCount,\n    required this.createdAt,\n  });\n\n  factory Post.fromJson(Map<string dynamic=\"\"> json) => _$PostFromJson(json);\n  Map<string dynamic=\"\"> toJson() => _$PostToJson(this);\n}\n<\/string><\/string><\/code><\/pre>\n<p><code>part 'post.g.dart'<\/code>    \u06c1\u0645 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06c1\u0645\u0627\u0631\u06d2 \u067e\u0627\u0633 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062a\u06cc\u0627\u0631 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba: <code>post.g.dart<\/code> \u06cc\u06c1 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06a9\u0627 \u062d\u0635\u06c1 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>json_serializable<\/code> \u06a9\u0648\u0688 \u062c\u0646\u0631\u06cc\u0679\u0631 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u067e\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>dart run build_runner build<\/code>. <code>@JsonSerializable()<\/code> \u06cc\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0646\u0648\u0679 \u06c1\u06d2\u06d4 <code>json_serializable<\/code> \u0627\u0633 \u06a9\u0644\u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u06a9\u0648\u0688 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u0688\u0632 \u06c1\u06cc\u06ba\u06d4 <code>final<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0627\u0688\u0644 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0646\u0627\u0642\u0627\u0628\u0644 \u062a\u063a\u06cc\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 <code>Post<\/code> \u06cc\u06c1 \u0645\u0648\u0642\u0639 \u067e\u0631 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u0626\u06d2 \u06c1\u06cc\u06ba <code>Post<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0645\u062e\u062a\u0644\u0641 \u0642\u062f\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba <code>DateTime<\/code> \u06a9\u06d2 \u0644\u06cc\u06d2 <code>createdAt<\/code> \u062e\u0627\u0645 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 <code>int<\/code> \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u06cc\u0627 <code>String<\/code> \u0627\u067e\u0646\u06d2 \u0645\u0627\u0688\u0644\u0632 \u06a9\u0648 \u062a\u062c\u0631\u06cc\u062f \u06a9\u06cc \u0645\u0646\u0627\u0633\u0628 \u0633\u0637\u062d \u067e\u0631 \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0627\u0648\u0631 \u0641\u0646\u06a9\u0634\u0646\u0632 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba: <code>DateTime<\/code> \u0645\u062e\u0635\u0648\u0635 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0641\u0627\u0631\u0645\u06cc\u0679\u0633 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0631\u06a9\u06be \u06a9\u0631\u060c \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0627\u0688\u0644 \u062f\u0648\u0646\u0648\u06ba \u0641\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u0631\u06cc\u0634\u0627\u0646\u06cc \u0633\u06d2 \u067e\u0627\u06a9 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>factory Post.fromJson(...)<\/code> \u0627\u0648\u0631 <code>toJson()<\/code> \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062f\u06c1 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u062a\u0641\u0648\u06cc\u0636 \u06a9\u0631\u06cc\u06ba\u06d4 <code>_(PostFromJson<\/code> \u0627\u0648\u0631 <code>_)PostToJson<\/code> \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u06a9\u0648 \u06c1\u0679\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u0622\u067e \u0646\u06d2 \u062e\u0648\u062f \u0644\u06a9\u06be\u0627 \u06c1\u06d2\u06d4 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06cc\u0691\u06d2 \u06a9\u0627 \u0633\u0628\u0628 \u0628\u0646\u062a\u06cc \u06c1\u06d2 (\u06af\u0645\u0634\u062f\u06c1 \u0641\u06cc\u0644\u0688\u0632\u060c \u063a\u0644\u0637 \u06a9\u0644\u06cc\u062f\u06cc \u0646\u0627\u0645\u060c \u0628\u06be\u0648\u0644\u06d2 \u06c1\u0648\u0626\u06d2 null \u0686\u06cc\u06a9 \u0648\u063a\u06cc\u0631\u06c1)\u06d4 \u06a9\u0648\u0688 \u062c\u0646\u0631\u06cc\u0634\u0646 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u067e\u0648\u0631\u06d2 \u0632\u0645\u0631\u06d2 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/validation\/post_validation.dart\n\nclass PostValidation {\n  static const int titleMaxLength = 120;\n  static const int contentMaxLength = 10000;\n  static const int titleMinLength = 3;\n\n  static String? validateTitle(String? title) {\n    if (title == null || title.trim().isEmpty) {\n      return 'Title is required.';\n    }\n    if (title.trim().length < titleMinLength) {\n      return 'Title must be at least $titleMinLength characters.';\n    }\n    if (title.trim().length > titleMaxLength) {\n      return 'Title cannot exceed $titleMaxLength characters.';\n    }\n    return null;\n  }\n\n  static String? validateContent(String? content) {\n    if (content == null || content.trim().isEmpty) {\n      return 'Content is required.';\n    }\n    if (content.trim().length > contentMaxLength) {\n      return 'Content cannot exceed $contentMaxLength characters.';\n    }\n    return null;\n  }\n\n  static bool isValid({required String title, required String content}) {\n    return validateTitle(title) == null && validateContent(content) == null;\n  }\n}\n<\/code><\/pre>\n<p>\u062a\u0645\u0627\u0645 \u0645\u0645\u0628\u0631\u0627\u0646 <code>static<\/code> \u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>PostValidation<\/code> \u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0627\u0645 \u06a9\u06cc \u062c\u06af\u06c1 \u06c1\u06d2\u060c \u0646\u06c1 \u06a9\u06c1 \u0648\u06c1 \u06a9\u0644\u0627\u0633 \u062c\u0633 \u06a9\u0648 \u0622\u067e \u0627\u0646\u0633\u0679\u06cc\u0679\u06cc\u0648\u0679 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u0645\u0628\u0627\u0626\u06cc \u0645\u0633\u062a\u0642\u0644 <code>titleMaxLength<\/code>\u060c <code>contentMaxLength<\/code>\u0627\u0648\u0631 <code>titleMinLength<\/code> \u06c1\u06d2 <code>static const<\/code>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0645\u067e\u0627\u0626\u0644 \u0679\u0627\u0626\u0645 \u067e\u0631 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0631\u0646 \u0679\u0627\u0626\u0645 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627\u060c \u0627\u0648\u0631 \u0631\u0646 \u0679\u0627\u0626\u0645 \u062a\u0648\u062b\u06cc\u0642 \u0645\u0646\u0637\u0642 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062f\u0648\u0646\u0648\u06ba \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 <code>maxLength<\/code> \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 <code>TextField<\/code>)\u06d4 \u06c1\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>null<\/code> \u062c\u0627\u0626\u0632 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 <code>String<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u0633 \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u063a\u0644\u0637 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>validateTitle<\/code> \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0644 <code>.trim()<\/code> \u0627\u0633\u067e\u06cc\u0633 \u067e\u06cc\u0688\u0688 \u062a\u0627\u0631\u0648\u06ba \u06a9\u0648 \u0644\u0645\u0628\u0627\u0626\u06cc \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u0633\u06d2 \u06af\u0632\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u0645\u0628\u0627\u0626\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u06d4 \u06a9\u06c1 <code>isValid<\/code> \u0633\u06c1\u0648\u0644\u062a \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0627\u0646 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0635\u0631\u0641 \u0628\u0648\u0644\u06cc\u0646 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 (\u0627\u06cc\u06a9 \u063a\u0644\u0637\u06cc \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633) \u0627\u06cc\u06a9 \u06a9\u0627\u0644 \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u062c\u0645\u0639 \u06a9\u0631\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0628\u0679\u0646 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06cc\u0627 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u0627\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/constants\/api_constants.dart\n\nclass ApiConstants {\n  static const String createPostFunction = 'createPost';\n  static const String getUserProfileFunction = 'getUserProfile';\n  static const String likePostFunction = 'likePost';\n\n  static const String postsCollection = 'posts';\n  static const String usersCollection = 'users';\n}\n<\/code><\/pre>\n<p><code>ApiConstants<\/code>    \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0631\u062f\u06c1 Firestore \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0679\u0631\u0646\u06af \u0634\u0646\u0627\u062e\u062a \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 \u06a9\u0648 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0628\u06a9\u06be\u0631\u06d2 \u06c1\u0648\u0626\u06d2 \u0633\u0679\u0631\u0646\u06af \u0644\u0679\u0631\u06cc\u0644\u0632 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0679\u0627\u0626\u067e\u0646\u06af \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba\u060c \u0646\u0627\u0645 \u0628\u062f\u0644\u0646\u06d2 \u067e\u0631 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0628\u0686\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0645\u067e\u0627\u0626\u0644\u0631 \u0622\u067e \u06a9\u0648 \u0648\u06c1 \u062a\u0645\u0627\u0645 \u062c\u06af\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u067e \u0646\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0646\u0627\u0645 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>firebase.https.onRequest(name: ApiConstants.createPostFunction)<\/code> \u0633\u0631\u0648\u0631 \u0627\u0648\u0631 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06cc\u0627 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0644\u0627\u06af \u0627\u0646 \u0645\u06cc\u06ba\u06d4 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0646\u0627\u0645 \u06a9\u06d2 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0633\u0631\u0648\u0631 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0633\u06cc \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u0648 \u0644\u06a9\u06be\u062a\u06d2 \u0627\u0648\u0631 \u067e\u0691\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u06cc\u0691\u06d2 \u06a9\u06cc \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0641\u0646\u06a9\u0634\u0646 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>\"Posts\"<\/code> \u06a9\u06cc\u067e\u06cc\u0679\u0644 P \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a <code>\"posts\"<\/code> \u0686\u06be\u0648\u0679\u06d2 \u062d\u0631\u0648\u0641 \u06a9\u06d2 \u0633\u0627\u062a\u06be p.<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/shared.dart\n\nexport 'src\/models\/post.dart';\nexport 'src\/models\/user.dart';\nexport 'src\/validation\/post_validation.dart';\nexport 'src\/constants\/api_constants.dart';\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u06c1\u06d2\u06d4 \u067e\u06cc\u06a9\u062c \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0645\u067e\u0648\u0631\u0679 \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0648\u0627\u067e\u0633 \u0627\u06cc\u06a9\u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u067e\u06cc\u06a9\u06cc\u062c \u0635\u0627\u0631\u0641\u06cc\u0646 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>import 'package:shared\/shared.dart'<\/code> \u0641\u0648\u0631\u06cc \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Post<\/code>\u060c <code>PostValidation<\/code>\u060c <code>ApiConstants<\/code>\u0627\u0648\u0631 \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be \u067e\u06cc\u06a9\u062c \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u062c\u0627\u0646\u0646\u0627 \u06c1\u0648\u06af\u0627 \u0627\u0648\u0631 \u06c1\u0631 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u0646\u0627 \u06c1\u0648\u06af\u0627\u060c \u0627\u06cc\u06a9 \u062a\u0641\u0635\u06cc\u0644 \u062c\u0633\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0648 \u0686\u06be\u067e\u0627\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-referencing-the-shared-package-from-functions\">\u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-yaml\"># functions\/pubspec.yaml\n\nname: kopa_functions\nversion: 0.1.0\n\nenvironment:\n  sdk: ^3.0.0\n\ndependencies:\n  firebase_functions: ^0.1.0\n  google_cloud_firestore: ^0.1.0\n  shared:\n    path: ..\/packages\/shared\n<\/code><\/pre>\n<p><code>shared: path: ..\/packages\/shared<\/code>    \u06cc\u06c1 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0688\u0627\u0631\u0679 \u067e\u0628 \u0679\u0648\u0644 \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>shared<\/code> \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0648 \u0641\u0627\u0626\u0644 \u0633\u0633\u0679\u0645 \u0633\u06d2 pub.dev \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062f\u06cc\u0626\u06d2 \u06af\u0626\u06d2 \u0631\u0634\u062a\u06c1 \u062f\u0627\u0631 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4 \u0686\u06cc\u0646\u0644 <code>..\/packages\/shared<\/code> \u0633\u06d2 \u0627\u06cc\u06a9 \u0633\u0637\u062d \u0627\u0648\u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba\u06d4 <code>functions\/<\/code> \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062c\u0691 \u067e\u0631 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0646\u06cc\u0686\u06d2 <code>packages\/shared\/<\/code>. \u062c\u0628 Firebase CLI \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0645\u0631\u062a\u0628 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0622\u067e \u06a9\u06cc \u0688\u06cc\u0648\u0644\u067e\u0645\u0646\u0679 \u0645\u0634\u06cc\u0646 \u067e\u0631 \u0627\u0633 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062d\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0645\u0631\u062a\u0628 \u0634\u062f\u06c1 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0645\u0642\u0627\u0645\u06cc \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0648\u062c\u0648\u062f \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-referencing-the-shared-package-from-flutter\">\u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1<\/h3>\n<pre><code class=\"language-yaml\"># pubspec.yaml (Flutter app)\n\ndependencies:\n  flutter:\n    sdk: flutter\n  firebase_core: ^3.0.0\n  cloud_firestore: ^5.0.0\n  firebase_auth: ^5.0.0\n  cloud_functions: ^5.0.0\n  shared:\n    path: packages\/shared\n<\/code><\/pre>\n<p>\u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c\u0632 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>path: packages\/shared<\/code>\u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062c\u0691 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0631\u0627\u0633\u062a\u06c1\u06d4 \u0631\u0627\u0633\u062a\u06c1 \u062f\u0631\u062c \u0630\u06cc\u0644 \u06c1\u06d2: <code>packages\/shared<\/code> \u0628\u063a\u06cc\u0631 <code>..\/<\/code> \u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u0627 \u0627\u06cc\u06a9 \u0633\u0627\u0628\u0642\u06c1 \u200b\u200b\u06c1\u06d2 \u062c\u0648 \u0641\u0646\u06a9\u0634\u0646 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>pubspec.yaml<\/code> \u062c\u0628 \u062a\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 <code>pubspec.yaml<\/code> \u0627\u0646\u062f\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba <code>functions\/<\/code> \u0630\u06cc\u0644\u06cc \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0688\u0633\u06a9 \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0641\u0632\u06cc\u06a9\u0644 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06a9\u0644\u06cc\u062f\u06cc \u0628\u0635\u06cc\u0631\u062a \u06c1\u06d2\u06d4 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u067e\u06cc\u06a9\u06cc\u062c\u0632 \u0627\u0648\u0631 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u067e\u06cc\u06a9\u062c\u0632 \u06c1\u06cc\u06ba\u06d4 <code>pubspec.yaml<\/code> \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0648\u0631\u0633 \u06a9\u0648\u0688 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u0633\u06d2 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-using-shared-logic-in-the-cloud-function\">\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/h3>\n<pre><code class=\"language-dart\">\/\/ functions\/bin\/server.dart\n\nimport 'dart:convert';\nimport 'package:firebase_functions\/firebase_functions.dart';\nimport 'package:google_cloud_firestore\/google_cloud_firestore.dart' show FieldValue;\nimport 'package:shared\/shared.dart';\n\nvoid main(List<string> args) async {\n  await fireUp(args, (firebase) {\n    firebase.https.onCall(\n      name: ApiConstants.createPostFunction,\n      (request, response) async {\n        if (request.auth == null) {\n          throw FirebaseFunctionsException(\n            code: 'unauthenticated',\n            message: 'You must be signed in.',\n          );\n        }\n\n        final data = request.data as Map<string dynamic=\"\">;\n        final title = data['title'] as String?;\n        final content = data['content'] as String?;\n\n        final titleError = PostValidation.validateTitle(title);\n        if (titleError != null) {\n          throw FirebaseFunctionsException(\n            code: 'invalid-argument',\n            message: titleError,\n          );\n        }\n\n        final contentError = PostValidation.validateContent(content);\n        if (contentError != null) {\n          throw FirebaseFunctionsException(\n            code: 'invalid-argument',\n            message: contentError,\n          );\n        }\n\n        final ref = await firebase.adminApp\n            .firestore()\n            .collection(ApiConstants.postsCollection)\n            .add({\n          'title': title!.trim(),\n          'content': content!.trim(),\n          'authorId': request.auth!.uid,\n          'likeCount': 0,\n          'createdAt': FieldValue.serverTimestamp(),\n        });\n\n        return CallableResult({'postId': ref.id});\n      },\n    );\n  });\n}\n<\/string><\/string><\/code><\/pre>\n<p><code>import 'package:shared\/shared.dart'<\/code>    \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u067e\u0648\u0631\u0627 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ApiConstants.createPostFunction<\/code> \u0633\u0679\u0631\u0646\u06af \u0644\u0679\u0631\u06cc\u0644\u0632 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0631 \u062c\u0646 \u0646\u0627\u0645\u0648\u06ba \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06a9\u0627 \u0644\u0627\u06af\u0646\u06af \u06cc\u0627 \u0645\u0627\u0646\u06cc\u0679\u0631\u0646\u06af \u0633\u0633\u0679\u0645 \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>PostValidation.validateTitle(title)<\/code> \u0627\u0648\u0631 <code>PostValidation.validateContent(content)<\/code> \u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0634\u06a9\u0644\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u0686\u0644\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u0648\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u0631 \u0686\u0644\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0628\u062f\u0646\u06cc\u062a\u06cc \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u062f\u0627\u06a9\u0627\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0648 \u0646\u0638\u0631\u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 (\u062c\u0648 \u06c1\u0645\u06cc\u0634\u06c1 \u0645\u0645\u06a9\u0646 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648\u0688 \u0646\u0627\u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u06c1\u06d2)\u060c \u0633\u0631\u0648\u0631 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0648\u06c1\u06cc \u0627\u0635\u0648\u0644 \u0644\u0627\u06af\u0648 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 <code>ApiConstants.postsCollection<\/code> \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u0627 \u0646\u0627\u0645 \u0645\u0633\u062a\u0642\u0644\u060c \u062c\u0648 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0633\u06cc \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0633\u06d2 Flutter \u0627\u06cc\u067e \u067e\u0691\u06be\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-using-shared-logic-in-the-flutter-app\">\u0627\u067e\u0646\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/create_post\/create_post_screen.dart\n\nimport 'package:flutter\/material.dart';\nimport 'package:shared\/shared.dart';\n\nclass CreatePostScreen extends StatefulWidget {\n  const CreatePostScreen({super.key});\n\n  @override\n  State<createpostscreen> createState() => _CreatePostScreenState();\n}\n\nclass _CreatePostScreenState extends State<createpostscreen> {\n  final _titleController = TextEditingController();\n  final _contentController = TextEditingController();\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('New Post')),\n      body: Padding(\n        padding: const EdgeInsets.all(16),\n        child: Column(\n          children: [\n            TextFormField(\n              controller: _titleController,\n              decoration: const InputDecoration(labelText: 'Title'),\n              validator: (value) => PostValidation.validateTitle(value),\n              maxLength: PostValidation.titleMaxLength,\n            ),\n            const SizedBox(height: 16),\n            TextFormField(\n              controller: _contentController,\n              decoration: const InputDecoration(labelText: 'Content'),\n              validator: (value) => PostValidation.validateContent(value),\n              maxLength: PostValidation.contentMaxLength,\n              maxLines: 8,\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n\n  @override\n  void dispose() {\n    _titleController.dispose();\n    _contentController.dispose();\n    super.dispose();\n  }\n}\n<\/createpostscreen><\/createpostscreen><\/code><\/pre>\n<p><code>validator: (value) => PostValidation.validateTitle(value)<\/code>    \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\u06d4 <code>TextFormField<\/code>\u0627\u06cc\u0633 <code>validator<\/code> \u062c\u0627\u0626\u06cc\u062f\u0627\u062f \u0641\u0644\u0679\u0631 \u06a9\u0627 \u0641\u0627\u0631\u0645 \u0633\u0633\u0679\u0645 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0635\u0627\u0631\u0641 \u0641\u0627\u0631\u0645 \u062c\u0645\u0639 \u06a9\u0631\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06cc\u0627 \u062a\u0648 null (\u062f\u0631\u0633\u062a) \u06cc\u0627 \u0627\u06cc\u06a9 \u0627\u06cc\u0631\u0631 \u0633\u0679\u0631\u0646\u06af (\u063a\u0644\u0637) \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0635\u0648\u0644 \u0633\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>PostValidation<\/code> \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>maxLength: PostValidation.titleMaxLength<\/code> \u0641\u06cc\u0644\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062d\u0631\u0648\u0641 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0633\u062a\u0642\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0622\u067e \u06a9\u0627 UI \u0627\u0646\u06c1\u06cc \u062d\u062f\u0648\u062f \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u06d2 \u062c\u0648 \u062a\u0648\u062b\u06cc\u0642 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u0639\u062f \u0645\u06cc\u06ba\u060c \u062c\u0628 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0644\u0645\u0628\u0627\u0626\u06cc 120 \u0633\u06d2 200 \u062a\u06a9 \u0628\u0691\u06be \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u0645\u0633\u062a\u0642\u0644 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u06a9\u0631\u06cc\u06a9\u0679\u0631 \u06a9\u0627\u0624\u0646\u0679\u0631\u0632 \u0627\u0648\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06d2 \u0642\u0648\u0627\u0639\u062f \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-architecture-how-the-full-stack-fits-together\">\u0641\u0646 \u062a\u0639\u0645\u06cc\u0631: \u06a9\u0633 \u0637\u0631\u062d \u067e\u0648\u0631\u0627 \u0627\u0633\u0679\u06cc\u06a9 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0641\u0679 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2\u06d4<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_774_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u0641\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0644\u0627\u0626\u0641 \u0633\u0627\u0626\u06cc\u06a9\u0644\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06cc\u06c1 \u062e\u0627\u06a9\u06c1 \u0627\u06cc\u06a9 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0627 \u0645\u06a9\u0645\u0644 \u0633\u0641\u0631 \u062f\u06a9\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0691\u067e\u06be\u0691\u0627\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0627\u06cc\u067e\u0633 \u0645\u0642\u0627\u0645\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0642\u0627\u0628\u0644 \u06a9\u0627\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0627 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0635\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0635\u062f\u06cc\u0642\u06cc \u0679\u0648\u06a9\u0646 \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u0631\u0633\u062a \u0688\u0627\u0631\u0679 \u0628\u0627\u0626\u0646\u0631\u06cc \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u0631\u0648\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u0627\u067e\u0646\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06cc \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u0688\u0645\u0646 SDK \u0631\u0633\u0627\u0626\u06cc \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 Firestore \u06a9\u0648 \u0644\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0644\u0679\u0631 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0648\u06c1 \u0646\u062a\u0627\u0626\u062c \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u06d2 \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0688\u06cc\u0679\u0627 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0648\u0635\u0648\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u062c\u0645\u0648\u0639\u06cc \u0628\u06c1\u0627\u0624 \u0645\u06cc\u06ba\u060c \u06a9\u0648\u0688 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u0679\u06a9\u0691\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0634\u06cc\u0626\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0634\u06cc\u0626\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1 \u062a\u0645\u0627\u0645 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u062c\u0646\u06c1\u06cc\u06ba \u0627\u0644\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 (\u0641\u0644\u0679\u0631 \u0648\u06cc\u062c\u0679\u0633\u060c \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0679\u0627\u0633\u06a9) \u0645\u0646\u0627\u0633\u0628 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0644\u06af \u06a9\u0631\u062f\u06cc\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-project-structure-for-a-full-stack-dart-project\">\u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0688\u06be\u0627\u0646\u0686\u06c1<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/05\/1779513463_320_\u0688\u0627\u0631\u0679-\u06a9\u0644\u0627\u0624\u0688-\u0641\u0646\u06a9\u0634\u0646\u0632-\u0627\u0648\u0631-\u0641\u0627\u0626\u0631-\u0628\u06cc\u0633-\u0627\u06cc\u0688\u0645\u0646-SDK-\u06a9\u0627-\u0627\u0633\u062a\u0639\u0645\u0627\u0644.png\" alt=\"\u0645\u06a9\u0645\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0688\u06be\u0627\u0646\u0686\u06c1\" style=\"display:block;margin:0 auto\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u067e\u0631\u0627\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u062c\u0691 \u06a9\u0627 \u062a\u06cc\u0646 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u0688\u06be\u0627\u0646\u0686\u06c1 \u062a\u0646\u0638\u06cc\u0645\u06cc \u0627\u0635\u0648\u0644 \u06c1\u06d2\u06d4 <code>lib\/<\/code> \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 <code>functions\/<\/code> \u067e\u0633\u062f\u06cc\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 <code>packages\/<\/code> \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u0622\u067e \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0688 \u06a9\u0627 \u0627\u06cc\u06a9 \u0679\u06a9\u0691\u0627 \u06a9\u06c1\u0627\u06ba \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>services\/<\/code> \u0622\u067e \u06a9\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u06cc \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u06cc\u06c1 \u06c1\u06d2: <code>FunctionsService<\/code> \u0627\u0648\u0631 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06cc \u06a9\u0644\u0627\u0633\u0632 \u06a9\u0648 \u0648\u06cc\u062c\u06cc\u0679 \u0645\u06cc\u06ba \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 \u0644\u0627\u062c\u06a9 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0686\u0627\u0644\u0648 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>handlers\/<\/code> \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc <code>functions\/lib\/<\/code> \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u062e\u0635\u0648\u0635 \u0641\u0646\u06a9\u0634\u0646 \u0645\u0646\u0637\u0642 \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 <code>server.dart<\/code> \u0635\u0627\u0641 \u0627\u0648\u0631 \u0635\u0631\u0641 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u067e\u0631 \u062a\u0648\u062c\u06c1 \u0645\u0631\u06a9\u0648\u0632 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-advanced-concepts\">\u0627\u0639\u0644\u06cc \u062f\u0631\u062c\u06d2 \u06a9\u06d2 \u062a\u0635\u0648\u0631\u0627\u062a<\/h2>\n<h3 id=\"heading-organizing-multiple-functions\">\u0645\u062a\u0639\u062f\u062f \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u06ba\u06d4<\/h3>\n<p>\u062c\u06cc\u0633\u06d2 \u062c\u06cc\u0633\u06d2 \u0622\u067e \u06a9\u0627 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0628\u0691\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0622\u067e \u0627\u067e\u0646\u06d2 \u062a\u0645\u0627\u0645 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0645\u06cc\u06ba \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>fireUp<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u0646\u0627\u06a9\u0627\u0631\u06c1 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u0648 \u0627\u0644\u06af \u0641\u0627\u0626\u0644 \u0645\u06cc\u06ba \u0646\u06a9\u0627\u0644\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0633\u0631\u0648\u0631 \u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u0645\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/lib\/handlers\/post_handler.dart\n\nimport 'package:firebase_functions\/firebase_functions.dart';\nimport 'package:google_cloud_firestore\/google_cloud_firestore.dart' show FieldValue;\nimport 'package:shared\/shared.dart';\n\nvoid registerPostHandlers(FirebaseApp firebase) {\n  firebase.https.onCall(\n    name: ApiConstants.createPostFunction,\n    (request, response) async {\n      \/\/ handler logic\n    },\n  );\n\n  firebase.https.onCall(\n    name: ApiConstants.likePostFunction,\n    (request, response) async {\n      \/\/ handler logic\n    },\n  );\n\n  firebase.https.onRequest(\n    name: ApiConstants.getUserProfileFunction,\n    (request) async {\n      \/\/ handler logic\n    },\n  );\n}\n<\/code><\/pre>\n<p><code>registerPostHandlers(FirebaseApp firebase)<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0645\u0648\u0645\u06cc \u0679\u0627\u067e \u0644\u06cc\u0648\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2 \u062c\u0648 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2: <code>firebase<\/code> \u0627\u06cc\u06a9 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0628\u0646\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u0648\u0633\u0679 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u062a\u0645\u0627\u0645 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u062f\u0633\u062a\u062e\u0637 <code>FirebaseApp firebase<\/code> \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u0642\u0633\u0645 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>firebase_functions<\/code> \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631\u0632 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062f\u0631\u062c \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06c1\u06d2 <code>main.dart<\/code> \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0622\u067e\u0631\u06cc\u0634\u0646: \u0627\u06cc\u06a9 \u0648\u0627\u062d\u062f \u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u062c\u0648 \u0645\u062e\u062a\u0644\u0641 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0627\u06cc\u0631\u06cc\u0627\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u0633\u06cc\u0679 \u0627\u067e \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/bin\/server.dart\n\nimport 'package:firebase_functions\/firebase_functions.dart';\nimport '..\/lib\/handlers\/post_handler.dart';\nimport '..\/lib\/handlers\/user_handler.dart';\n\nvoid main(List<string> args) async {\n  await fireUp(args, (firebase) {\n    registerPostHandlers(firebase);\n    registerUserHandlers(firebase);\n  });\n}\n<\/string><\/code><\/pre>\n<p><code>server.dart<\/code>    \u06cc\u06c1 \u0627\u0628 \u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u0641\u0627\u0626\u0644 \u06c1\u06d2\u06d4 \u06c1\u0645 \u06c1\u0631 \u0688\u0648\u0645\u06cc\u0646 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0641\u0646\u06a9\u0634\u0646 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>fireUp<\/code>. \u0646\u06cc\u0627 \u0688\u0648\u0645\u06cc\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0627\u062a\u0646\u0627 \u06c1\u06cc \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u062c\u062a\u0646\u0627 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0646\u0627 \u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u0644\u0627\u0626\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627: \u0648\u06c1 <code>fireUp<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u06c1\u06d2\u06d4 <code>firebase<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06d4<\/p>\n<h3 id=\"heading-error-handling-patterns\">\u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u0645\u06cc\u06ba \u062e\u0631\u0627\u0628\u06cc\u06d4<\/h3>\n<p>\u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0645\u0633\u062a\u0642\u0644 \u0627\u0648\u0631 \u0642\u0627\u0628\u0644 \u067e\u06cc\u0634\u0646 \u06af\u0648\u0626\u06cc \u063a\u0644\u0637\u06cc \u0633\u06d2 \u0646\u0645\u0679\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u0679\u0631\u0627\u0626\u06cc \u06a9\u06cc\u0686 \u0628\u0644\u0627\u06a9\u0633 \u06a9\u0648 \u062a\u0642\u0633\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u06cc\u06a9 \u0633\u0646\u0679\u0631\u0644\u0627\u0626\u0632\u0688 \u0627\u06cc\u0631\u0631 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/lib\/utils\/error_handler.dart\n\nimport 'package:firebase_functions\/firebase_functions.dart';\n\ntypedef CallableHandler = Future<callableresult> Function(\n  CallableRequest request,\n  CallableResponse response,\n);\n\nCallableHandler withErrorHandling(CallableHandler handler) {\n  return (request, response) async {\n    try {\n      return await handler(request, response);\n    } on FirebaseFunctionsException {\n      rethrow;\n    } on ArgumentError catch (e) {\n      throw FirebaseFunctionsException(\n        code: 'invalid-argument',\n        message: e.message,\n      );\n    } catch (e, stackTrace) {\n      print('Unhandled error in function: $e');\n      print(stackTrace);\n      throw FirebaseFunctionsException(\n        code: 'internal',\n        message: 'An internal error occurred. Please try again.',\n      );\n    }\n  };\n}\n<\/callableresult><\/code><\/pre>\n<p><code>typedef CallableHandler<\/code>    \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0639\u0631\u0641\u06cc \u0646\u0627\u0645 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>onCall<\/code> \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u0645\u0646\u062a\u0638\u0631 \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1 \u06c1\u06d2 <code>withErrorHandling<\/code> \u0622\u067e \u067e\u0648\u0631\u06d2 \u0641\u06cc\u0686\u0631 \u06a9\u06d2 \u062f\u0633\u062a\u062e\u0637 \u06a9\u0648 \u062f\u06c1\u0631\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u062f\u0627\u062e\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>withErrorHandling<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0639\u0644\u06cc \u0622\u0631\u0688\u0631 \u06a9\u06cc \u062a\u0642\u0631\u06cc\u0628 \u06c1\u06d2. \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0644\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0635\u0644 \u06a9\u0648 \u0679\u0631\u0627\u0626\u06cc \u06a9\u06cc\u0686 \u0645\u06cc\u06ba \u0644\u067e\u06cc\u0679 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>on FirebaseFunctionsException { rethrow; }<\/code> \u0633\u0627\u062e\u062a\u06cc \u063a\u0644\u0637\u06cc\u0627\u06ba \u062c\u0648 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u067e\u06be\u06cc\u0646\u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u06af\u0632\u0631 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u062f\u0631\u0633\u062a \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 <code>on ArgumentError catch (e)<\/code> \u0688\u0627\u0631\u0679 \u06a9\u06cc \u06c1\u0645\u062a \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ArgumentError<\/code> (\u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0648\u0688 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2) <code>FirebaseFunctionsException<\/code> \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>invalid-argument<\/code> \u06a9\u0648\u0688 \u062c\u0633\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0645\u062c\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062d\u062a\u0645\u06cc <code>catch (e, stackTrace)<\/code> \u06cc\u06c1 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u06a9\u0645\u0644 \u062e\u0631\u0627\u0628\u06cc \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06c1\u06cc\u0646\u0688\u0644 \u0634\u062f\u06c1 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062d\u0641\u0627\u0638\u062a\u06cc \u062c\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u0679\u06cc\u06a9 \u0679\u0631\u06cc\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u0648 \u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0634\u062f\u06c1 \u067e\u06cc\u063a\u0627\u0645 \u0628\u06be\u06cc \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">firebase.https.onCall(\n  name: 'createPost',\n  withErrorHandling((request, response) async {\n    if (request.auth == null) {\n      throw FirebaseFunctionsException(\n        code: 'unauthenticated',\n        message: 'Authentication required.',\n      );\n    }\n    return CallableResult({'success': true});\n  }),\n);\n<\/code><\/pre>\n<p><code>withErrorHandling(...)<\/code>    \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u0648 \u0644\u067e\u06cc\u0679 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u06cc\u0633\u0631\u06cc \u067e\u0648\u0632\u06cc\u0634\u0646 \u06a9\u06cc \u062f\u0644\u06cc\u0644 <code>onCall<\/code> (\u06c1\u06cc\u0646\u0688\u0644\u0631 \u0641\u0646\u06a9\u0634\u0646) \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0631\u06cc\u0679\u0631\u0646 \u0648\u06cc\u0644\u06cc\u0648 \u0633\u06d2 \u0628\u062f\u0644 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>withErrorHandling<\/code>\u06cc\u06c1 \u062e\u0648\u062f \u0635\u062d\u06cc\u062d \u062f\u0633\u062a\u062e\u0637 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06c1\u06d2\u06d4 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0679\u0631\u0627\u0626\u06cc \u06a9\u06cc\u0686 \u0628\u0644\u0627\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>withErrorHandling<\/code> \u062a\u0645\u0627\u0645 \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0645\u0646\u0638\u0631\u0646\u0627\u0645\u0648\u06ba \u06a9\u0627 \u0627\u062d\u0627\u0637\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-testing-dart-cloud-functions\">\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0644 \u0679\u06cc\u0633\u0679\u0646\u06af<\/h3>\n<p>\u0688\u0627\u0631\u0679 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u06d2 \u06af\u0626\u06d2 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0633\u0627\u062f\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0688\u0627\u0631\u0679 \u0679\u06cc\u0633\u0679\u0646\u06af \u0679\u0648\u0644\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0622\u0632\u0645\u0627\u0626\u0634 \u06c1\u06d2\u06d4 \u0622\u067e \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc Firebase \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u062e\u0627\u0644\u0635 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0646\u06a9\u0627\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u06cc\u0648\u0646\u0679 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/lib\/handlers\/post_logic.dart\n\nimport 'package:shared\/shared.dart';\n\nPostInput validateCreatePostRequest(Map<string dynamic=\"\"> data) {\n  final title = data['title'] as String?;\n  final content = data['content'] as String?;\n\n  final titleError = PostValidation.validateTitle(title);\n  if (titleError != null) throw ArgumentError(titleError);\n\n  final contentError = PostValidation.validateContent(content);\n  if (contentError != null) throw ArgumentError(contentError);\n\n  return PostInput(\n    title: title!.trim(),\n    content: content!.trim(),\n  );\n}\n\nclass PostInput {\n  final String title;\n  final String content;\n  const PostInput({required this.title, required this.content});\n}\n<\/string><\/code><\/pre>\n<p><code>validateCreatePostRequest<\/code>    \u0627\u06cc\u06a9 \u062e\u0627\u0644\u0635 \u0641\u0639\u0644 \u06c1\u06d2. <code>Map<string dynamic=\"\"\/><\/code> \u0627\u0648\u0631 \u0627\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 <code>PostInput<\/code> \u06cc\u0627 \u067e\u06be\u06cc\u0646\u06a9 \u062f\u0648\u06d4 <code>ArgumentError<\/code>. \u06a9\u0648\u0626\u06cc Firebase \u0627\u0646\u062d\u0635\u0627\u0631\u060c \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u06a9\u0627\u0644\u0632\u060c \u06cc\u0627 \u0636\u0645\u0646\u06cc \u0627\u062b\u0631\u0627\u062a\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u0679\u06cc\u0633\u0679 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>dart test<\/code> \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0622\u067e \u06a9\u0648 Firebase \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>PostInput<\/code> \u0627\u06cc\u06a9 \u0633\u0627\u062f\u06c1 \u0642\u062f\u0631 \u06a9\u06cc \u06a9\u0644\u0627\u0633 \u062c\u0648 \u062a\u0648\u062b\u06cc\u0642 \u0634\u062f\u06c1 \u0627\u0648\u0631 \u06a9\u0679\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0646 \u067e\u0679 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u062e\u0627\u0645 \u0646\u0642\u0634\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0646\u062a\u06cc\u062c\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u0646\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u062f\u0631\u0633\u062a \u0688\u06cc\u0679\u0627 \u0627\u0633 \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u0645\u0644\u06d2 \u062c\u0633 \u06a9\u0627 \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ functions\/test\/post_logic_test.dart\n\nimport 'package:test\/test.dart';\nimport '..\/lib\/handlers\/post_logic.dart';\n\nvoid main() {\n  group('validateCreatePostRequest', () {\n    test('returns valid PostInput for correct data', () {\n      final result = validateCreatePostRequest({\n        'title': 'Valid Title',\n        'content': 'This is valid post content.',\n      });\n\n      expect(result.title, equals('Valid Title'));\n      expect(result.content, equals('This is valid post content.'));\n    });\n\n    test('throws ArgumentError when title is empty', () {\n      expect(\n        () => validateCreatePostRequest({'title': '', 'content': 'Content'}),\n        throwsA(isA<argumenterror>()),\n      );\n    });\n\n    test('throws ArgumentError when title exceeds max length', () {\n      final longTitle=\"A\" * 200;\n      expect(\n        () => validateCreatePostRequest({\n          'title': longTitle,\n          'content': 'Content',\n        }),\n        throwsA(isA<argumenterror>()),\n      );\n    });\n\n    test('trims whitespace from title and content', () {\n      final result = validateCreatePostRequest({\n        'title': '  Padded Title  ',\n        'content': '  Padded content.  ',\n      });\n\n      expect(result.title, equals('Padded Title'));\n      expect(result.content, equals('Padded content.'));\n    });\n  });\n}\n<\/argumenterror><\/argumenterror><\/code><\/pre>\n<p><code>group('validateCreatePostRequest', ...)<\/code>    \u0645\u0646\u0638\u0645 \u0622\u0624\u0679 \u067e\u0679 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0644\u06cc\u0628\u0644\u0632 \u0645\u06cc\u06ba \u0645\u062a\u0639\u0644\u0642\u06c1 \u0679\u06cc\u0633\u0679\u0648\u06ba \u06a9\u0648 \u06af\u0631\u0648\u067e \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0627\u06cc\u06a9 <code>test(...)<\/code> \u06a9\u0627\u0644 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2: \u0627\u06cc\u06a9 \u062e\u0648\u0634\u06af\u0648\u0627\u0631 \u0631\u0627\u0633\u062a\u06c1\u060c \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0679\u0627\u0626\u0679\u0644 \u06a9\u06cc\u0633\u060c \u0627\u06cc\u06a9 \u0628\u0691\u0627 \u0679\u0627\u0626\u0679\u0644 \u06a9\u06cc\u0633\u060c \u06cc\u0627 \u0648\u0627\u0626\u0679 \u0627\u0633\u067e\u06cc\u0633 \u0679\u0631\u0645\u0646\u06af \u06a9\u06cc\u0633\u06d4 <code>expect(result.title, equals('Valid Title'))<\/code> \u062f\u0639\u0648\u06cc\u0670 \u06cc\u06c1 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0635\u0644 \u0642\u062f\u0631 \u0645\u062a\u0648\u0642\u0639 \u0642\u062f\u0631 \u0633\u06d2 \u0645\u06cc\u0644 \u06a9\u06be\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>throwsA(isA<argumenterror>())<\/argumenterror><\/code> \u0627\u06cc\u06a9 \u0645\u06cc\u0686\u0631 \u062c\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u067e\u06c1\u0646\u0686\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u067e\u06be\u06cc\u0646\u06a9\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>ArgumentError<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2\u06d4 <code>validateCreatePostRequest<\/code> \u063a\u0644\u0637 \u0627\u0646 \u067e\u0679 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>'A' * 200<\/code> 200 \u06a9\u0631\u06cc\u06a9\u0679\u0631 \u0633\u0679\u0631\u0646\u06af \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u0633\u0679\u0631\u0646\u06af \u06a9\u06cc \u062a\u06a9\u0631\u0627\u0631\u06d4 <code>titleMaxLength<\/code> \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062f\u06c1 120 \u0645\u06cc\u06ba \u0633\u06d2<\/p>\n<pre><code class=\"language-bash\">cd functions\ndart test\n<\/code><\/pre>\n<p>\u0641\u0646\u06a9\u0634\u0646\u0644 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 Firebase \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06cc\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 Dart SDK \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1 \u06a9\u0633\u06cc \u062e\u0627\u0635 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0679\u06cc\u0633\u0679 \u0645\u0644\u06cc \u0633\u06cc\u06a9\u0646\u0688 \u0645\u06cc\u06ba \u0645\u06a9\u0645\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">cd packages\/shared\ndart test\n<\/code><\/pre>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u0679\u06cc\u0633\u0679 \u06cc\u06a9\u0633\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0645\u0627\u0646\u0688 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>dart test<\/code> \u0631\u0646\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062a\u0645\u0627\u0645 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>_test.dart<\/code> \u067e\u0631 <code>test\/<\/code> \u0688\u0627\u0626\u0631\u06cc\u06a9\u0679\u0631\u06cc<\/p>\n<h3 id=\"heading-function-configuration-options\">\u0641\u06cc\u0686\u0631 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a<\/h3>\n<p>\u062f\u0648\u0646\u0648\u06ba <code>onRequest<\/code> \u0627\u0648\u0631 <code>onCall<\/code> \u0631\u0646 \u0679\u0627\u0626\u0645 \u0631\u0648\u06cc\u06d2 \u06a9\u0648 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e\u0634\u0646 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">firebase.https.onRequest(\n  name: 'highTrafficEndpoint',\n  options: const HttpsOptions(\n    cors: Cors(['https:\/\/yourapp.com']),\n    minInstances: 1,\n    maxInstances: 10,\n    concurrency: 80,\n    memory: Memory.mb512,\n    timeoutSeconds: 120,\n    region: 'europe-west1',\n  ),\n  (request) async {\n    return Response.ok('Hello from a configured function!');\n  },\n);\n<\/code><\/pre>\n<p><code>minInstances: 1<\/code>    \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0644\u0626\u06d2 \u0633\u0631\u062f \u0622\u063a\u0627\u0632 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u0648 \u06c1\u0631 \u0648\u0642\u062a \u06af\u0631\u0645 \u0631\u06a9\u06be\u0646\u06d2 \u0633\u06d2 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0646\u0641\u06cc \u067e\u06c1\u0644\u0648 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u0633\u0644\u0633\u0644 \u0686\u0644\u062a\u06d2 \u0631\u06c1\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0644 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0686\u0627\u06c1\u06d2 \u06a9\u0648\u0626\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u06cc\u06ba \u0646\u06c1 \u0622\u0626\u06cc\u06ba\u06d4 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0635\u0631\u0641 \u0627\u0646 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u06a9\u0648\u0644\u0688 \u0627\u0633\u0679\u0627\u0631\u0679 \u0644\u06cc\u0679\u0646\u0633\u06cc \u0648\u0627\u0642\u0639\u06cc \u0646\u0627\u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644 \u06c1\u0648\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0639\u0627\u0645\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062d\u0642\u06cc\u0642\u06cc \u0648\u0642\u062a \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a\u06d4 <code>maxInstances: 10<\/code> \u06c1\u0645 \u0622\u06c1\u0646\u06af\u06cc \u06a9\u06cc \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0648 10 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0679\u0631\u06cc\u0641\u06a9 \u0645\u06cc\u06ba \u0627\u0686\u0627\u0646\u06a9 \u0627\u0636\u0627\u0641\u06d2 \u06a9\u0648 \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0633\u06cc\u0646\u06a9\u0691\u0648\u06ba \u0645\u062b\u0627\u0644\u0648\u06ba \u062a\u06a9 \u0628\u0691\u06be\u0627\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0644\u0646\u06af \u0627\u0648\u0631 \u0688\u0627\u0648\u0646 \u0627\u0633\u0679\u0631\u06cc\u0645 \u0633\u0631\u0648\u0633\u0632 (\u062c\u06cc\u0633\u06d2 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633) \u062f\u0648\u0646\u0648\u06ba \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06a9\u06c1 \u0627\u0686\u0627\u0646\u06a9 \u0632\u06cc\u0627\u062f\u06c1 \u06a9\u0646\u06a9\u0631\u0646\u0633\u06cc \u0633\u06d2 \u0627\u0648\u0648\u0631\u0644\u0648\u0688 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>concurrency: 80<\/code> \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u06a9\u062a\u0646\u06cc \u0633\u0645\u0648\u0631\u062a\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u06d2 \u06af\u06cc\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u06d2 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0645\u0627\u0688\u0644 \u06a9\u0648 Node.js \u0633\u06d2 \u0627\u0648\u0646\u0686\u0627 \u0633\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0628\u063a\u06cc\u0631 \u062a\u06be\u0631\u06cc\u0688\u0632 \u06a9\u06d2 \u0633\u0645\u0648\u0631\u062a\u06cc I\/O \u067e\u0627\u0628\u0646\u062f \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>memory: Memory.mb512<\/code> \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 512 MB RAM \u0645\u062e\u062a\u0635 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u0642\u062f\u0631 \u06a9\u0648 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0691\u06be\u0627\u0626\u06cc\u06ba \u062c\u06cc\u0633\u06d2 \u0627\u0645\u06cc\u062c \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u06cc\u0627 \u0628\u0691\u06d2 \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0679\u0633 \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u0646\u0627\u06d4 \u0633\u06cc \u067e\u06cc \u06cc\u0648 \u0627\u06cc\u0644\u0648\u06a9\u06cc\u0634\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u06a9\u06cc\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062a\u0631\u0627\u0632\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af \u067e\u0627\u0648\u0631 \u06a9\u0648 \u0628\u06be\u06cc \u0628\u0691\u06be\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>timeoutSeconds: 120<\/code> \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06a9\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u06a9\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0648\u0642\u062a \u0645\u0642\u0631\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0637\u0648\u06cc\u0644 \u0639\u0631\u0635\u06d2 \u0633\u06d2 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0627\u0633 \u0642\u062f\u0631 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>region: 'europe-west1'<\/code> \u06c1\u0645 \u0646\u06d2 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0628\u06cc\u0644\u062c\u06cc\u0645 \u0645\u06cc\u06ba Google \u0688\u06cc\u0679\u0627 \u0633\u06cc\u0646\u0679\u0631\u0632 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062a\u0627\u06a9\u06c1 \u06cc\u0648\u0631\u067e\u06cc \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0627\u062e\u06cc\u0631 \u06a9\u0648 \u06a9\u0645 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0637\u0648\u0631 \u067e\u0631\u060c \u0627\u0641\u0639\u0627\u0644 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>us-central1<\/code>.<\/p>\n<h2 id=\"heading-best-practices-for-production-use\">\u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06d2<\/h2>\n<h3 id=\"heading-treat-experimental-as-experimental\">\u06a9\u0633\u06cc \u062a\u062c\u0631\u0628\u06d2 \u06a9\u0648 \u0628\u0637\u0648\u0631 \u062a\u062c\u0631\u0628\u06c1 \u0633\u0645\u062c\u06be\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0648 \u0641\u06cc\u0686\u0631 \u06a9\u06cc \u062d\u0642\u06cc\u0642\u06cc \u067e\u062e\u062a\u06af\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06c1\u0645 \u0622\u06c1\u0646\u06af \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0641\u06cc\u0635\u0644\u0648\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062f\u0648 \u0645\u062e\u0635\u0648\u0635 \u0686\u06cc\u0632\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c API \u0628\u063a\u06cc\u0631 \u0627\u0637\u0644\u0627\u0639 \u06a9\u06d2 \u0628\u062f\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc Firebase CLI \u0627\u067e \u0688\u06cc\u0679\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>fireUp<\/code> \u06cc\u06c1 \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0641\u06cc\u0686\u0631 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0631\u062c\u0633\u0679\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06cc\u0627 \u0627\u06cc\u0688\u0645\u0646 SDK \u062a\u06a9 \u06a9\u06cc\u0633\u06d2 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u0641\u06cc\u0686\u0631\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679\u0633 \u0645\u06cc\u06ba CLI \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u062a\u0628\u062f\u06cc\u0644\u06cc \u0644\u0627\u06af \u06a9\u0648 \u067e\u0691\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u062c\u0646\u06af \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0679\u06cc\u0633\u0679 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u067e\u0646\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0679\u0648\u0644\u0632 \u06a9\u0648 \u0622\u0646\u06a9\u06be\u06cc\u06ba \u0628\u0646\u062f \u06a9\u0631\u06a9\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627\u060c \u06a9\u0686\u06be \u0686\u06cc\u0632\u06cc\u06ba \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u0627 \u0645\u062d\u0631\u06a9\u060c \u0646\u0627\u0645 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 <code>httpsCallable<\/code> \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u06a9\u0627\u0644 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u0688\u0633\u067e\u0644\u06d2 \u062f\u0648\u0646\u0648\u06ba \u062e\u0627\u0644\u06cc \u06c1\u06cc\u06ba\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0627\u0646 \u062d\u062f\u0648\u062f \u06a9\u0648 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0627\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-keep-handlers-thin-keep-logic-shared\">\u06c1\u06cc\u0646\u0688\u0644\u0631\u0632 \u06a9\u0648 \u067e\u062a\u0644\u0627 \u0631\u06a9\u06be\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0646\u0637\u0642 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0631\u062c\u0633\u0679\u0631\u0688 \u06c1\u06cc\u0646\u0688\u0644\u0631 <code>firebase.https.onCall<\/code> \u06cc\u0627 <code>firebase.https.onRequest<\/code> \u0622\u067e \u06a9\u0648 \u06a9\u0645 \u0633\u06d2 \u06a9\u0645 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06cc\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0646 \u067e\u0679 \u06a9\u0648 \u0646\u06a9\u0627\u0644\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u062e\u0627\u0644\u0635 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0635\u0644 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u062a\u06cc\u062c\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u062e\u0627\u0644\u0635 \u0627\u0641\u0639\u0627\u0644 \u0641\u0646\u06a9\u0634\u0646 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u06cc\u0627 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0622\u067e \u06a9\u0648 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0645\u0627\u062d\u0648\u0644 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u067e\u0646\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u062c\u0627\u0646\u0686\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u062a\u0648 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0622\u0633\u0627\u0646\u06cc \u0633\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-use-fieldvalueservertimestamp-for-all-timestamps\">\u062a\u0645\u0627\u0645 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 FieldValue.serverTimestamp() \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u06d2 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0646\u06c1 \u0628\u06be\u06cc\u062c\u06cc\u06ba \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <code>DateTime.now()<\/code>. \u0633\u0631\u0648\u0631 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u062d\u0631\u06cc\u0631\u06cc \u0648\u0642\u062a \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06cc \u06af\u06be\u0691\u06cc \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631 \u062f\u0631\u0633\u062a \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0688\u06cc\u0648\u0627\u0626\u0633 \u06a9\u06cc \u06af\u06be\u0691\u06cc \u063a\u0644\u0637 \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u063a\u0644\u0637 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba <code>DateTime.now()<\/code> \u0679\u0627\u0626\u0645 \u0627\u0633\u0679\u06cc\u0645\u067e \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u06af\u0632\u06cc\u06a9\u06cc\u0648\u0634\u0646 \u0627\u0648\u0631 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u0645\u0679 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0648\u0642\u062a \u06a9\u0627 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u0641\u0631\u0642 \u06cc\u0627\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-log-meaningfully-but-not-excessively\">\u0628\u0627\u0645\u0639\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646 \u0644\u0627\u06af\u0632 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0627\u0648\u0631 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0644\u0627\u06af\u0632 \u0645\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>print()<\/code> \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u0646 \u0644\u0627\u06af\u0632 \u067e\u0631 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0644\u0627\u06af \u0627\u0646 \u0627\u06cc\u0648\u0646\u0679\u0633 \u062c\u0648 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0688\u06cc\u0628\u06af \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u06cc\u06ba: \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0627\u06cc\u0648\u0646\u0679\u0633 \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u0627\u0646 \u067e\u0679 \u0634\u06a9\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644\u0632 (\u062d\u0633\u0627\u0633 \u0688\u06cc\u0679\u0627 \u0646\u06c1\u06cc\u06ba)\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u06cc \u0634\u06a9\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645\u06cc\u0627\u0628 \u062a\u06a9\u0645\u06cc\u0644\u060c \u0645\u06a9\u0645\u0644 \u062e\u0627\u0645\u06cc\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633\u0679\u06cc\u06a9 \u0679\u0631\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba\u060c \u0627\u0648\u0631 \u0628\u06cc\u0631\u0648\u0646\u06cc API \u06a9\u0627\u0644\u0632\u06d4 \u06c1\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0642\u0637\u0627\u0631 \u06cc\u0627 \u06c1\u0631 \u0688\u06cc\u0679\u0627 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0648 \u0644\u0627\u06af \u0627\u0646 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0622\u067e \u06a9\u06d2 \u0644\u0627\u06af\u0632 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0641\u0644\u0648 \u06a9\u0631 \u062f\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0627\u0635\u0644 \u063a\u0644\u0637\u06cc \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u0628\u0646\u0627 \u062f\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-rate-limit-and-authenticate-by-default\">\u0634\u0631\u062d \u0645\u062d\u062f\u0648\u062f \u0627\u0648\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u062a\u0635\u062f\u06cc\u0642<\/h3>\n<p>\u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646 \u062c\u0648 \u0627\u0646\u0679\u0631\u0646\u06cc\u0679 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0631\u0633\u0627\u0626\u06cc \u06c1\u06d2 \u0627\u0633\u06d2 \u0645\u0645\u06a9\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0634\u062e\u0635 \u06a9\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06a9\u0627 URL \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0627\u0644 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646\u0632 \u062e\u0648\u062f \u0628\u062e\u0648\u062f Firebase \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c HTTP \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u0633\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2\u06d4 \u06c1\u0631 <code>onRequest<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u062a\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 ID \u0679\u0648\u06a9\u0646 \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0645\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06cc \u0642\u0633\u0645\u060c \u06c1\u0645 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0641\u06cc \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0634\u0631\u062d \u06a9\u0648 \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0644\u0648\u067e\u0633 \u0627\u0648\u0631 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u063a\u0644\u0637 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0648 \u0631\u0648\u06a9\u0627 \u062c\u0627 \u0633\u06a9\u06d2\u06d4<\/p>\n<h2 id=\"heading-when-to-use-dart-cloud-functions-and-when-not-to\">\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0628 \u0627\u0648\u0631 \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<h3 id=\"heading-where-dart-cloud-functions-add-real-value\">\u062c\u06c1\u0627\u06ba \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062d\u0642\u06cc\u0642\u06cc \u0642\u062f\u0631 \u0645\u06cc\u06ba \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/h3>\n<p>\u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0641\u0644\u0679\u0631 \u0641\u0631\u0633\u0679 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0642\u06cc\u0645\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0688\u0627\u0631\u0679 \u0645\u06cc\u06ba \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u0627\u062c\u06a9 \u0644\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0628\u0691\u06cc \u062a\u0639\u0645\u06cc\u0631\u0627\u062a\u06cc \u0642\u062f\u0631 \u06c1\u06d2\u06d4 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0644\u0627\u0626\u0646\u0679 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06d2 \u0642\u0648\u0627\u0646\u06cc\u0646\u060c \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644\u0632\u060c \u0645\u0633\u062a\u0642\u0644 \u06cc\u0627 \u06cc\u0648\u0679\u06cc\u0644\u06cc\u0679\u06cc \u0645\u0646\u0637\u0642 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u0633\u06d2 \u0627\u0633 \u06a9\u0648\u0688 \u06a9\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u0634\u06cc\u0626\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u06cc \u0627\u06cc\u06a9 \u067e\u0648\u0631\u06cc \u0642\u0633\u0645 \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u06c1\u0644\u06a9\u0627 \u067e\u06be\u0644\u06a9\u0627 I\/O \u0628\u0627\u0626\u0646\u0688\u0646\u06af API \u0645\u0646\u0637\u0642 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u0627 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0645\u0627\u0688\u0644 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u06d2 \u062c\u0648 \u0627\u067e\u0646\u0627 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u0648\u0642\u062a Firestore \u06a9\u06d2 \u0633\u0648\u0627\u0644\u0627\u062a\u060c \u0627\u06cc\u06a9\u0633\u0679\u0631\u0646\u0644 API \u06a9\u0627\u0644\u0632\u060c \u06cc\u0627 \u0636\u0631\u0648\u0631\u062a \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06af\u0646\u062a\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u062f\u06cc\u06af\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 Firestore \u0633\u06d2 \u06a9\u0686\u06be \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2\u060c \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2\u060c \u0627\u0648\u0631 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0648\u0627\u067e\u0633 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u06c1\u06d2 \u062c\u0633\u06d2 Dart \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0648\u0628\u0627\u0626\u0644 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0641\u0627\u0631 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u06cc\u0679\u0631\u0646 \u0642\u062f\u0631\u062a\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u06c1\u06d2\u06d4 \u0645\u062a\u0639\u062f\u062f \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0644\u06cc\u06a9\u0634\u0646\u0632 \u0633\u06d2 \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u06c1\u0644\u06cc\u062a\u060c \u062a\u062d\u0631\u06cc\u0631\u06cc \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0646\u062c\u0627\u0645 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0645\u062a\u0639\u062f\u062f \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0645\u06cc\u06ba \u0627\u06cc\u0679\u0645 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u0633\u06d2 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u0628\u0646\u0627\u0646\u06d2 \u06cc\u0627 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0688\u0645\u0646\u0633\u0679\u0631\u06cc\u0679\u0631 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h3 id=\"heading-where-dart-cloud-functions-are-the-wrong-choice-right-now\">\u062c\u0628 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062e\u0631\u0627\u0628 \u0627\u0646\u062a\u062e\u0627\u0628 \u06c1\u06cc\u06ba\u06d4<\/h3>\n<p>\u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0642\u0627\u0628\u0644 \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0628\u0646\u0646\u06d2 \u06cc\u0627 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0686\u0644\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628 \u0635\u0627\u0631\u0641 \u0633\u0627\u0626\u0646 \u0627\u067e \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0634\u06cc\u0688\u0648\u0644 \u067e\u0631\u060c \u06cc\u0627 \u067e\u0628\/\u0633\u0628 \u0645\u06cc\u0633\u062c \u06a9\u06d2 \u062c\u0648\u0627\u0628 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0641\u06cc \u0627\u0644\u062d\u0627\u0644 \u0627\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4 \u0622\u067e \u06a9\u0648 Node.js \u06cc\u0627 Python \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u0628\u06cc\u06a9 \u06af\u0631\u0627\u0624\u0646\u0688 \u0679\u0631\u06af\u0631 \u0633\u067e\u0648\u0631\u0679 \u0622\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0631 \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0679\u0648\u0644\u0632 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06c1\u0645 \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u0627 \u0628\u063a\u0648\u0631 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0633\u06cc \u0641\u0646\u06a9\u0634\u0646\u0644 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0688\u06cc\u0679\u0627 \u06a9\u0627 \u0646\u0642\u0635\u0627\u0646\u060c \u0645\u0627\u0644\u06cc\u0627\u062a\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc\u060c \u06cc\u0627 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0627\u06c1\u0645 \u0627\u062b\u0631\u0627\u062a \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0688\u0627\u0631\u0679 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0627 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0644\u06cc\u0628\u0644 \u0627\u06cc\u06a9 \u0645\u0639\u0646\u06cc \u062e\u06cc\u0632 \u062e\u0637\u0631\u06c1 \u06c1\u06d2\u06d4 APIs \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0637\u0631\u0632 \u0639\u0645\u0644 \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0645\u06cc\u06ba \u0627\u06c1\u0645 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0628\u06af\u0632 \u06a9\u0648 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc Firebase \u0679\u06cc\u0645 \u06a9\u06cc \u0642\u0627\u0628\u0644\u06cc\u062a \u0645\u0633\u062a\u062d\u06a9\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u06cc \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u06c1\u062a \u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u0688\u0627\u0631\u0679 \u0633\u06d2 \u06a9\u0645\u0679\u0645\u0646\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0679\u0631\u06cc\u0641\u06a9 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0627\u0646\u0686 \u0633\u06d2 \u0641\u0627\u0626\u062f\u06c1 \u0627\u0679\u06be\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u0688\u0627\u0631\u0679 \u0641\u06cc\u0686\u0631\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0631\u06a9\u0631\u062f\u06af\u06cc \u06a9\u06cc \u06a9\u06c1\u0627\u0646\u06cc (\u0628\u06c1\u062a\u0631\u06cc\u0646 \u06a9\u0648\u0644\u0688 \u0627\u0633\u0679\u0627\u0631\u0679\u0633\u060c \u0645\u0648\u062b\u0631 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 I\/O \u067e\u0631\u0648\u0633\u06cc\u0633\u0646\u06af) \u062a\u06be\u06cc\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0645\u0636\u0628\u0648\u0637 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0679\u0631\u06cc\u0641\u06a9 \u0627\u06cc\u0633\u06d2 \u0627\u06cc\u062c \u06a9\u06cc\u0633\u0632 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0645\u0642\u0627\u0645\u06cc \u0679\u06cc\u0633\u0679\u0646\u06af \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06d2 \u062c\u0627 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-common-mistakes\">\u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0627\u06ba<\/h2>\n<h3 id=\"heading-forgetting-the-experiment-flag\">\u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u067e\u0631\u0686\u0645 \u0628\u06be\u0648\u0644 \u06af\u0626\u06d2\u06d4<\/h3>\n<p>\u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0645\u0633\u0626\u0644\u06c1 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>firebase init functions<\/code> \u0645\u06cc\u06ba \u0688\u0627\u0631\u0679 \u06a9\u0648 \u0632\u0628\u0627\u0646 \u06a9\u06d2 \u0622\u067e\u0634\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0631\u06c1\u0627 \u06c1\u0648\u06ba\u06d4 \u0627\u0635\u0644\u0627\u062d \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u06cc\u06a9 \u062c\u06cc\u0633\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u067e\u06be\u0627\u0646\u0633\u06cc <code>firebase experiments:enable dartfunctions<\/code> \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0648\u0631 \u067e\u06be\u0631 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4 <code>firebase init functions<\/code>. \u0688\u0627\u0631\u0679 \u06a9\u06d2 \u0628\u0637\u0648\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0622\u067e \u06a9\u0648 \u067e\u06c1\u0644\u06d2 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 CLI \u0645\u06cc\u06ba \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062c\u06be\u0646\u0688\u0627 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-using-relative-paths-incorrectly-in-pubspecyaml\">pubspec.yaml \u0645\u06cc\u06ba \u0645\u062a\u0639\u0644\u0642\u06c1 \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0627 \u063a\u0644\u0637 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/h3>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u0648\u0646\u0648\u06ba \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba \u0631\u0634\u062a\u06c1 \u062f\u0627\u0631 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>functions\/pubspec.yaml<\/code> \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e <code>pubspec.yaml<\/code>. \u0627\u06af\u0631 \u0631\u0634\u062a\u06c1 \u062f\u0627\u0631 \u0631\u0627\u0633\u062a\u06c1 \u063a\u0644\u0637 \u06c1\u06d2 (\u06cc\u0627 \u062a\u0648 \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2 \u06a9\u06c1 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u0645\u06cc\u06ba \u062a\u0648\u0642\u0639 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06d2 \u06cc\u0627 \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2 \u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2)\u060c \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0645\u067e\u0627\u0626\u0644\u06cc\u0634\u0646 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0628\u0644\u0688 \u062f\u0648\u0646\u0648\u06ba \u067e\u06cc\u06a9\u06cc\u062c \u0631\u06cc\u0632\u0648\u0644\u0648\u0634\u0646 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u06d4 \u062f\u0648\u0691 \u06a9\u0631 \u0631\u0627\u0633\u062a\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba: <code>dart pub get<\/code> \u0622\u067e \u06a9\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u0633\u06d2 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062d\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-forgetting-to-handle-the-httpscallable-name-limitation\">httpsCallable \u0646\u0627\u0645 \u06a9\u06cc \u067e\u0627\u0628\u0646\u062f\u06cc\u0648\u06ba \u06a9\u0648 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u0627 \u0628\u06be\u0648\u0644 \u062c\u0627\u0646\u0627<\/h3>\n<p>\u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0628\u06af \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>FirebaseFunctions.instance.httpsCallable('functionName')<\/code> \u0645\u06cc\u06ba \u0645\u062a\u062c\u0633\u0633 \u06c1\u0648\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0646\u06c1 \u0645\u0644\u0646\u06d2 \u0648\u0627\u0644\u06cc \u063a\u0644\u0637\u06cc \u06a9\u06cc\u0648\u06ba \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u0688\u0627\u0631\u0679 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0627\u0645 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0631\u06cc\u0632\u0648\u0644\u0648\u0634\u0646 \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 <code>httpsCallableFromURL<\/code> \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u06a9\u0627 \u067e\u0648\u0631\u0627 URL \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0639\u06cc\u0646\u0627\u062a\u06cc \u0622\u0624\u0679 \u067e\u0679 \u06a9\u0627 URL \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 \u0641\u0644\u0679\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-looking-for-functions-in-the-firebase-console\">Firebase \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0627\u067e\u0646\u0627 \u0641\u0646\u06a9\u0634\u0646 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0627\u067e\u0646\u06d2 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u062c\u0628 \u0622\u067e Firebase \u06a9\u0646\u0633\u0648\u0644 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0633\u06cc\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u06be\u0648\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0634\u0627\u06cc\u062f \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622\u062a\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0645\u0639\u0644\u0648\u0645 \u0646\u06c1 \u06c1\u0648 \u06a9\u06c1 \u0622\u06cc\u0627 \u06cc\u06c1 \u0645\u062a\u0648\u0642\u0639 \u0631\u0648\u06cc\u06c1 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u067e\u0631 \u062a\u0639\u06cc\u0646\u0627\u062a \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0635\u0641\u062d\u06c1 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0644\u0648\u0645 \u062e\u0644\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0641\u06cc\u0686\u0631 \u06a9\u06d2 \u0639\u0627\u0645 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u06d2 \u062f\u0648\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-putting-firebase-dependencies-in-the-shared-package\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba Firebase \u0627\u0646\u062d\u0635\u0627\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0648 Firebase \u0627\u0648\u0631 Flutter \u067e\u06cc\u06a9\u062c\u0632 \u0633\u06d2 \u0622\u0632\u0627\u062f \u0631\u06c1\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 <code>firebase_functions<\/code> \u06cc\u0627 <code>cloud_firestore<\/code> \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062a\u0648\u0691 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0632 \u06cc\u0627 \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0633\u0631\u0648\u0631 \u0633\u0627\u0626\u06cc\u0688 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u0646\u062d\u0635\u0627\u0631 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u06a9\u0644\u0627\u0626\u0646\u0679 \u0633\u0627\u0626\u06cc\u0688 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0645\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0633 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0648\u0631\u0698\u0646 \u0645\u06cc\u06ba \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0627\u0648\u0631 \u062a\u0627\u0644\u06cc\u0641 \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba \u0635\u0631\u0641 \u062e\u0627\u0644\u0635 \u0688\u0627\u0631\u0679 \u0645\u0646\u0637\u0642 \u0627\u0648\u0631 \u0645\u0627\u0688\u0644 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0641\u0627\u0626\u0631\u0628\u06cc\u0633 \u06a9\u06d2 \u062a\u0639\u0627\u0645\u0644\u0627\u062a \u0641\u0646\u06a9\u0634\u0646 \u067e\u06cc\u06a9\u06cc\u062c \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0627\u0644\u06af \u0627\u0644\u06af \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0632 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0645\u0627\u0645 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0646\u062f\u0631 \u0631\u06a9\u06be\u06cc\u06ba <code>onCall<\/code> \u06cc\u0627 <code>onRequest<\/code> \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u0622\u067e \u06a9\u0648 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0637\u0627\u0642\u062a \u0627\u0633 \u06a9\u06cc \u0622\u0632\u0645\u0627\u0626\u0634 \u06c1\u06d2\u06d4 \u0641\u0646\u06a9\u0634\u0646 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06cc\u0627 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u062e\u0627\u0644\u0635 \u0627\u0641\u0639\u0627\u0644 \u0645\u06cc\u06ba \u062a\u0648\u062b\u06cc\u0642\u060c \u062a\u0628\u062f\u06cc\u0644\u06cc\u060c \u0627\u0648\u0631 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u0646\u06a9\u0627\u0644\u06cc\u06ba\u06d4 \u0627\u0646 \u062e\u0627\u0644\u0635 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u0631\u06cc\u06ba: <code>dart test<\/code> \u06cc\u06c1 Firebase \u0627\u0646\u0641\u0631\u0627\u0633\u0679\u0631\u06a9\u0686\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u06c1\u06d2\u06d4 \u0627\u067e\u0646\u06d2 \u0633\u06cc\u0646 \u0644\u06cc\u0626\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u06cc\u0646\u0688\u0644\u0631 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u06a9\u0648 \u0634\u06cc\u0688\u0648\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u0648 Firebase \u0627\u0646 \u067e\u0679\u0633 \u0627\u0648\u0631 \u0622\u0624\u0679 \u067e\u0679\u0633 \u06a9\u0648 \u0627\u0646 \u06a9\u06cc \u062e\u0627\u0644\u0635 \u0645\u0646\u0637\u0642 \u0633\u06d2 \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-mini-end-to-end-example\">\u0645\u0646\u06cc \u0627\u06cc\u0646\u0688 \u0679\u0648 \u0627\u06cc\u0646\u0688 \u0645\u062b\u0627\u0644<\/h2>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc\u060c \u0641\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0627\u0688\u0644\u060c \u0645\u0634\u062a\u0631\u06a9\u06c1 \u062a\u0648\u062b\u06cc\u0642\u060c \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u060c \u0627\u0648\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0641\u0644\u0679\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u067e\u0648\u0633\u0679 \u062a\u062e\u0644\u06cc\u0642 \u0641\u0646\u06a9\u0634\u0646 \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u06a9\u06d2 \u062a\u0645\u0627\u0645 \u062a\u0635\u0648\u0631\u0627\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0639\u0645\u0644 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0636\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-shared-package\">\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c<\/h3>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/models\/post.dart\n\nclass Post {\n  final String id;\n  final String title;\n  final String content;\n  final String authorId;\n  final int likeCount;\n\n  const Post({\n    required this.id,\n    required this.title,\n    required this.content,\n    required this.authorId,\n    required this.likeCount,\n  });\n\n  factory Post.fromMap(String id, Map<string dynamic=\"\"> data) {\n    return Post(\n      id: id,\n      title: data['title'] as String? ?? '',\n      content: data['content'] as String? ?? '',\n      authorId: data['authorId'] as String? ?? '',\n      likeCount: data['likeCount'] as int? ?? 0,\n    );\n  }\n\n  Map<string dynamic=\"\"> toMap() => {\n    'title': title,\n    'content': content,\n    'authorId': authorId,\n    'likeCount': likeCount,\n  };\n}\n<\/string><\/string><\/code><\/pre>\n<p><code>Post.fromMap<\/code>    \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06cc ID \u0627\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u0627 \u0641\u06cc\u0644\u0688 \u0645\u06cc\u067e\u060c \u062c\u0633\u06d2 Firestore \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0688\u06cc\u0679\u0627 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0644\u06d2 \u06a9\u0631 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0622\u0628\u0627\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>Post<\/code> \u0645\u062b\u0627\u0644 \u06a9\u06c1 <code>as String? ?? ''<\/code> \u067e\u06cc\u0679\u0631\u0646 \u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0627\u0633\u0679 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u06cc\u06a9 \u06a9\u0627\u0644\u0639\u062f\u0645 \u0645\u062a\u0628\u0627\u062f\u0644 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0641\u06cc\u0644\u0688 \u063a\u0627\u0626\u0628 \u06cc\u0627 null \u06c1\u06d2 \u062a\u0648\u060c null dereference error \u06a9\u0648 \u0628\u0691\u06be\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0633\u0679\u0631\u0646\u06af \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>toMap()<\/code> \u0633\u06cc\u0631\u06cc\u0644\u0627\u0626\u0632\u06cc\u0634\u0646 <code>Post<\/code> \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 <code>Map<\/code> \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u062e\u0627\u0631\u062c \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u060c \u0627\u0633\u06d2 Firestore \u067e\u0631 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u0628\u0646\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>id<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 Firestore \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 \u06a9\u06d2 \u0628\u0627\u0688\u06cc \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632 IDs \u062a\u06cc\u0627\u0631 \u0627\u0648\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>likeCount<\/code> \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0646\u0626\u06cc \u067e\u0648\u0633\u0679 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 0 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0628\u0691\u06be\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0622\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u067e \u0688\u06cc\u0679 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/validation\/post_validation.dart\n\nclass PostValidation {\n  static const int titleMaxLength = 120;\n  static const int contentMaxLength = 5000;\n\n  static String? validateTitle(String? value) {\n    if (value == null || value.trim().isEmpty) return 'Title is required.';\n    if (value.trim().length > titleMaxLength) {\n      return 'Title cannot exceed $titleMaxLength characters.';\n    }\n    return null;\n  }\n\n  static String? validateContent(String? value) {\n    if (value == null || value.trim().isEmpty) return 'Content is required.';\n    if (value.trim().length > contentMaxLength) {\n      return 'Content cannot exceed $contentMaxLength characters.';\n    }\n    return null;\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0622\u0633\u0627\u0646 \u0648\u0631\u0698\u0646 \u06c1\u06d2\u06d4 <code>PostValidation<\/code> \u0622\u062e\u0631 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u06cc\u0642\u06d2 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>null<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u062c\u0627\u0626\u0632 \u06c1\u06d2\u06d4 <code>String<\/code> \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u062f\u06cc \u06af\u0626\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0628\u0627\u0637\u0644 \u06c1\u06d2\u06d4 \u0686\u06cc\u06a9\u0633 \u06a9\u0627 \u062d\u06a9\u0645 \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0648\u06ba (\u062e\u0627\u0644\u06cc \u0627\u0646 \u067e\u0679) \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062e\u0635\u0648\u0635 \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba (\u0628\u06c1\u062a \u0637\u0648\u06cc\u0644) \u062a\u06a9 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u0646\u0637\u0642\u06cc \u0627\u0648\u0631 \u0645\u0648\u062b\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0637\u0648\u0627\u0644\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06a9\u06d2 \u0686\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u0627\u0644\u06cc \u0686\u06cc\u06a9 \u0634\u0627\u0631\u0679 \u0633\u0631\u06a9\u0679 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/src\/constants\/api_constants.dart\n\nclass ApiConstants {\n  static const String createPost=\"createPost\";\n  static const String postsCollection = 'posts';\n}\n<\/code><\/pre>\n<p>\u0622\u062e\u0631 \u0633\u06d2 \u0622\u062e\u0631 \u062a\u06a9 \u0645\u062b\u0627\u0644 \u0645\u06cc\u06ba\u060c <code>ApiConstants<\/code> \u0627\u0633 \u06a9\u0648 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u06a9\u0627\u0631 \u062f\u0648 \u06a9\u0646\u0633\u0679\u06cc\u0646\u0679\u0633 \u062a\u06a9 \u0686\u06be\u0648\u0679\u0627 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u0627 \u0646\u0627\u0645\u06d4 \u06cc\u06c1 \u0645\u062b\u0627\u0644 \u06a9\u0648 \u0645\u0631\u06a9\u0648\u0632 \u0631\u06a9\u06be\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u06a9\u0644\u0627\u0633 \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0648\u0631 \u0645\u062c\u0645\u0648\u0639\u06c1 \u06a9\u06d2 \u0646\u0627\u0645\u0648\u06ba \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/shared\/lib\/shared.dart\n\nexport 'src\/models\/post.dart';\nexport 'src\/validation\/post_validation.dart';\nexport 'src\/constants\/api_constants.dart';\n<\/code><\/pre>\n<p>\u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u062a\u06cc\u0646\u0648\u06ba \u0645\u0627\u0688\u06cc\u0648\u0644\u0632 \u06a9\u0648 \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u06a9\u06cc \u062a\u0645\u0627\u0645 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u062c\u0627 \u0631\u06c1\u06cc \u06c1\u06cc\u06ba\u06d4 <code>package:shared\/shared.dart<\/code> \u0641\u0648\u0631\u06cc \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>Post<\/code>\u060c <code>PostValidation<\/code>\u0627\u0648\u0631 <code>ApiConstants<\/code> \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0628\u06be\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0633 \u0633\u0628 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u0645\u06cc\u06ba \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-cloud-function\">\u0628\u0627\u062f\u0644 \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a<\/h3>\n<pre><code class=\"language-dart\">\/\/ functions\/bin\/server.dart\n\nimport 'dart:convert';\nimport 'package:firebase_functions\/firebase_functions.dart';\nimport 'package:google_cloud_firestore\/google_cloud_firestore.dart' show FieldValue;\nimport 'package:shared\/shared.dart';\n\nvoid main(List<string> args) async {\n  await fireUp(args, (firebase) {\n    firebase.https.onCall(\n      name: ApiConstants.createPost,\n      options: const CallableOptions(cors: Cors(['*'])),\n      (request, response) async {\n        if (request.auth == null) {\n          throw FirebaseFunctionsException(\n            code: 'unauthenticated',\n            message: 'You must be signed in to create a post.',\n          );\n        }\n\n        final uid = request.auth!.uid;\n        final data = request.data as Map<string dynamic=\"\">? ?? {};\n\n        final title = data['title'] as String?;\n        final content = data['content'] as String?;\n\n        final titleError = PostValidation.validateTitle(title);\n        if (titleError != null) {\n          throw FirebaseFunctionsException(\n            code: 'invalid-argument',\n            message: titleError,\n          );\n        }\n\n        final contentError = PostValidation.validateContent(content);\n        if (contentError != null) {\n          throw FirebaseFunctionsException(\n            code: 'invalid-argument',\n            message: contentError,\n          );\n        }\n\n        try {\n          final ref = await firebase.adminApp\n              .firestore()\n              .collection(ApiConstants.postsCollection)\n              .add({\n            'title': title!.trim(),\n            'content': content!.trim(),\n            'authorId': uid,\n            'likeCount': 0,\n            'createdAt': FieldValue.serverTimestamp(),\n          });\n\n          return CallableResult({\n            'postId': ref.id,\n            'success': true,\n          });\n        } catch (e) {\n          print('Error writing post to Firestore: $e');\n          throw FirebaseFunctionsException(\n            code: 'internal',\n            message: 'Failed to create post. Please try again.',\n          );\n        }\n      },\n    );\n  });\n}\n<\/string><\/string><\/code><\/pre>\n<p><code>final data = request.data as Map<string dynamic=\"\">? ?? {}<\/string><\/code>    \u0627\u06cc\u0633\u06d2 \u0645\u0639\u0627\u0645\u0644\u0627\u062a \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06a9\u0644\u0627\u0626\u0646\u0679 \u062e\u0627\u0644\u06cc \u0646\u0642\u0634\u06d2 \u067e\u0631 \u0648\u0627\u067e\u0633 \u06af\u0631 \u06a9\u0631\u060c \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u0641\u06cc\u0644\u0688\u0632 \u06a9\u0648 \u0646\u06a9\u0627\u0644\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 null dereferences \u06a9\u0648 \u0631\u0648\u06a9 \u06a9\u0631 \u0627\u06cc\u06a9 null body \u0628\u06be\u06cc\u062c\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>!<\/code> \u06a9\u0648 <code>title!.trim()<\/code> \u0627\u0648\u0631 <code>content!.trim()<\/code> \u0622\u067e \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06cc\u06ba \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0648\u067e\u0631 \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc \u0627\u0633 \u0628\u0627\u062a \u06a9\u0648 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0642\u062f\u0631\u06cc\u06ba \u063a\u06cc\u0631 \u06a9\u0627\u0644\u0639\u062f\u0645 \u0627\u0648\u0631 \u063a\u06cc\u0631 \u062e\u0627\u0644\u06cc \u06c1\u06cc\u06ba\u06d4 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0634\u0634\/\u06a9\u06cc\u0686 \u062d\u062a\u0645\u06cc \u062d\u0641\u0627\u0638\u062a\u06cc \u062c\u0627\u0644 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u06cc\u0688\u0645\u0646 SDK \u062a\u062d\u0631\u06cc\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 (\u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u06d2 \u0645\u0633\u0627\u0626\u0644\u060c \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0648\u0679\u06c1\u060c \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u062e\u0631\u0627\u0628\u06cc\u0627\u06ba)\u060c \u0641\u0646\u06a9\u0634\u0646 \u0627\u0633\u06d2 \u067e\u06a9\u0691\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u06a9\u0645\u0644 \u062f\u0627\u062e\u0644\u06cc \u062e\u0631\u0627\u0628\u06cc \u06a9\u0648 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0644\u0627\u06af \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>print<\/code> (\u06a9\u0644\u0627\u0624\u0688 \u0631\u0646 \u0644\u0627\u06af\u0632 \u0645\u06cc\u06ba \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u06cc\u0627 \u06af\u06cc\u0627) \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>'internal'<\/code> \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u0631 \u0627\u06cc\u06a9 \u062e\u0631\u0627\u0628\u06cc \u0648\u0627\u0642\u0639 \u06c1\u0648\u0626\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u06cc \u0648\u062c\u06c1 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-the-flutter-app\">\u0641\u0644\u0679\u0631 \u0627\u06cc\u067e<\/h3>\n<pre><code class=\"language-dart\">\/\/ lib\/services\/functions_service.dart\n\nimport 'package:cloud_functions\/cloud_functions.dart';\n\nclass FunctionsService {\n  static const String _createPostUrl=\"https:\/\/createpost-REPLACE-WITH-YOUR-HASH.a.run.app\";\n\n  Future<string> createPost({\n    required String title,\n    required String content,\n  }) async {\n    try {\n      final callable = FirebaseFunctions.instance\n          .httpsCallableFromURL(_createPostUrl);\n\n      final result = await callable.call({'title': title, 'content': content});\n\n      return result.data['postId'] as String;\n    } on FirebaseFunctionsException catch (e) {\n      throw _mapError(e);\n    }\n  }\n\n  Exception _mapError(FirebaseFunctionsException e) {\n    switch (e.code) {\n      case 'unauthenticated':\n        return Exception('Please sign in to continue.');\n      case 'invalid-argument':\n        return Exception(e.message ?? 'Invalid input.');\n      default:\n        return Exception('Something went wrong. Please try again.');\n    }\n  }\n}\n<\/string><\/code><\/pre>\n<p><code>FunctionsService<\/code>    \u06cc\u06c1 \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627\u0644 \u06a9\u06d2 \u06af\u0631\u062f \u0627\u06cc\u06a9 \u067e\u062a\u0644\u0627 \u0631\u06cc\u067e\u0631 \u06c1\u06d2\u06d4 \u0622\u067e \u06a9\u06cc \u0648\u0627\u062d\u062f \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0631\u0633\u062a \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u06cc\u06ba\u060c \u0688\u06cc\u0679\u0627 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\u060c \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0646\u06a9\u0627\u0644\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06d2 \u0627\u0633\u062a\u062b\u0646\u06cc\u0670 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0679\u0631\u06a9\u0686\u0631\u0688 \u0633\u0631\u0648\u0631 \u06a9\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <code>_mapError<\/code> \u062a\u0631\u062c\u0645\u06c1 <code>FirebaseFunctionsException<\/code> \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u062c\u0648 Firebase \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u06a9\u0648\u0688 \u06a9\u0648 \u0631\u06cc\u06af\u0648\u0644\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>Exception<\/code> \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u062c\u0633 \u0645\u06cc\u06ba \u0635\u0627\u0631\u0641 \u062f\u0648\u0633\u062a \u067e\u06cc\u063a\u0627\u0645 \u06c1\u0648\u06d4 \u06cc\u06c1 \u0628\u0644\u0627\u06a9 \u06cc\u0627 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06cc \u067e\u0631\u062a \u0633\u06d2 Firebase \u06a9\u06cc \u0642\u0633\u0645\u0648\u06ba \u06a9\u0648 \u062e\u0627\u0631\u062c \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 Firebase SDK \u06a9\u0627 \u067e\u0627\u0628\u0646\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/create_post\/create_post_screen.dart\n\nimport 'package:flutter\/material.dart';\nimport 'package:shared\/shared.dart';\nimport '..\/..\/services\/functions_service.dart';\n\nclass CreatePostScreen extends StatefulWidget {\n  const CreatePostScreen({super.key});\n\n  @override\n  State<createpostscreen> createState() => _CreatePostScreenState();\n}\n\nclass _CreatePostScreenState extends State<createpostscreen> {\n  final _formKey = GlobalKey<formstate>();\n  final _titleController = TextEditingController();\n  final _contentController = TextEditingController();\n  final _service = FunctionsService();\n\n  bool _isSubmitting = false;\n  String? _errorMessage;\n\n  @override\n  void dispose() {\n    _titleController.dispose();\n    _contentController.dispose();\n    super.dispose();\n  }\n\n  Future<void> _submit() async {\n    if (!(_formKey.currentState?.validate() ?? false)) return;\n\n    setState(() {\n      _isSubmitting = true;\n      _errorMessage = null;\n    });\n\n    try {\n      final postId = await _service.createPost(\n        title: _titleController.text,\n        content: _contentController.text,\n      );\n\n      if (!mounted) return;\n\n      ScaffoldMessenger.of(context).showSnackBar(\n        SnackBar(content: Text('Post created successfully! ID: $postId')),\n      );\n\n      Navigator.of(context).pop();\n    } catch (e) {\n      setState(() => _errorMessage = e.toString());\n    } finally {\n      if (mounted) setState(() => _isSubmitting = false);\n    }\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('New Post')),\n      body: Form(\n        key: _formKey,\n        child: ListView(\n          padding: const EdgeInsets.all(16),\n          children: [\n            if (_errorMessage != null)\n              Container(\n                padding: const EdgeInsets.all(12),\n                margin: const EdgeInsets.only(bottom: 16),\n                decoration: BoxDecoration(\n                  color: Colors.red.shade50,\n                  borderRadius: BorderRadius.circular(8),\n                ),\n                child: Text(\n                  _errorMessage!,\n                  style: TextStyle(color: Colors.red.shade800),\n                ),\n              ),\n            TextFormField(\n              controller: _titleController,\n              decoration: InputDecoration(\n                labelText: 'Title',\n                hintText: 'What is your post about?',\n                counterText:\n                    '({_titleController.text.length}\/){PostValidation.titleMaxLength}',\n              ),\n              maxLength: PostValidation.titleMaxLength,\n              validator: (value) => PostValidation.validateTitle(value),\n              onChanged: (_) => setState(() {}),\n            ),\n            const SizedBox(height: 16),\n            TextFormField(\n              controller: _contentController,\n              decoration: InputDecoration(\n                labelText: 'Content',\n                hintText: 'Write your post here...',\n                counterText:\n                    '({_contentController.text.length}\/){PostValidation.contentMaxLength}',\n                alignLabelWithHint: true,\n              ),\n              maxLength: PostValidation.contentMaxLength,\n              maxLines: 10,\n              validator: (value) => PostValidation.validateContent(value),\n              onChanged: (_) => setState(() {}),\n            ),\n            const SizedBox(height: 24),\n            FilledButton(\n              onPressed: _isSubmitting ? null : _submit,\n              child: _isSubmitting\n                  ? const SizedBox(\n                      height: 20,\n                      width: 20,\n                      child: CircularProgressIndicator(\n                        strokeWidth: 2,\n                        color: Colors.white,\n                      ),\n                    )\n                  : const Text('Publish Post'),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n<\/void><\/formstate><\/createpostscreen><\/createpostscreen><\/code><\/pre>\n<p><code>GlobalKey<formstate\/><\/code>    \u062f\u06d2 \u062f\u0648 <code>_submit()<\/code> \u0622\u067e \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062a\u0645\u0627\u0645 \u0641\u06cc\u0644\u0688\u0632 \u067e\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0631\u0645 \u06a9\u06cc \u062d\u0627\u0644\u062a \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>_formKey.currentState?.validate()<\/code> \u06a9\u0627\u0644 <code>validator<\/code> \u062a\u0645\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a <code>TextFormField<\/code> \u0641\u0627\u0631\u0645\u06cc\u0679 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633\u06cc <code>true<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u0645\u0645\u06a9\u0646 \u06c1\u06d2 \u062c\u0628 \u062a\u0645\u0627\u0645 \u062a\u0635\u062f\u06cc\u0642 \u06a9\u0646\u0646\u062f\u06af\u0627\u0646 null \u0648\u0627\u067e\u0633 \u06a9\u0631\u06cc\u06ba\u06d4 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0646\u0627\u06a9\u0627\u0645\u06cc \u067e\u0631 \u0642\u0628\u0644 \u0627\u0632 \u0648\u0642\u062a \u0648\u0627\u067e\u0633\u06cc \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u063a\u0644\u0637 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0627\u0644\u0632 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>_isSubmitting<\/code> \u0688\u0631\u0627\u0626\u06cc\u0648 UI \u062d\u0627\u0644\u062a\u06d4 \u0628\u0679\u0646 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06c1\u06d2 (<code>onPressed: null<\/code>) \u062c\u0628 \u06a9\u0627\u0644 \u062c\u0627\u0631\u06cc \u06c1\u06d2\u06d4 <code>CircularProgressIndicator<\/code> \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u06a9\u06cc\u0627 \u06c1\u0648 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0648\u0627\u0636\u062d \u062a\u0627\u062b\u0631\u0627\u062a \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0679\u0646 \u0644\u06cc\u0628\u0644\u0632 \u06a9\u0648 \u0628\u062f\u0644 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 <code>if (!mounted) return<\/code> \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc <code>_submit()<\/code> \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0644 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>setState<\/code> \u06cc\u0627 <code>Navigator<\/code> &quot;setState called after dispose&#8221; \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc \u0648\u06cc\u062c\u0679 \u067e\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062f\u0631\u062e\u062a \u0633\u06d2 \u06c1\u0679\u0627 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>finally<\/code> \u0628\u0644\u0627\u06a9\u0633 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u06c1\u06d2\u06d4 <code>_isSubmitting<\/code> \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u0627\u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u067e\u06be\u06cc\u0646\u06a9 \u062f\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u06c1\u0645\u06cc\u0634\u06c1 \u063a\u0644\u0637 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u0628\u0679\u0646 \u06a9\u0648 \u0644\u0648\u0688\u0646\u06af \u062d\u0627\u0644\u062a \u0645\u06cc\u06ba \u0645\u0633\u062a\u0642\u0644 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06be\u0646\u0633\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/main.dart\n\nimport 'package:flutter\/material.dart';\nimport 'package:firebase_core\/firebase_core.dart';\nimport 'package:cloud_functions\/cloud_functions.dart';\nimport 'dart:io' show Platform;\nimport 'firebase_options.dart';\nimport 'features\/create_post\/create_post_screen.dart';\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  await Firebase.initializeApp(\n    options: DefaultFirebaseOptions.currentPlatform,\n  );\n\n  if (const bool.fromEnvironment('USE_EMULATOR', defaultValue: false)) {\n    final host = Platform.isAndroid ? '10.0.2.2' : 'localhost';\n    FirebaseFunctions.instance.useFunctionsEmulator(host, 5001);\n  }\n\n  runApp(const MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Full-Stack Dart Demo',\n      debugShowCheckedModeBanner: false,\n      theme: ThemeData(\n        colorScheme: ColorScheme.fromSeed(seedColor: Colors.indigo),\n        useMaterial3: true,\n      ),\n      home: const CreatePostScreen(),\n    );\n  }\n}\n<\/code><\/pre>\n<p><code>WidgetsFlutterBinding.ensureInitialized()<\/code>    \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0641\u0644\u0679\u0631 \u067e\u0644\u06af \u0627\u0646 \u06a9\u0648\u0688 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba Firebase \u06a9\u06cc \u0627\u0628\u062a\u062f\u0627\u0621 \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u0626\u06cc \u062c\u0627\u0626\u06d2\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0641\u0648\u0646 <code>Firebase.initializeApp()<\/code> \u067e\u06c1\u0644\u06d2 <code>runApp()<\/code> \u0627\u06cc\u06a9 \u062e\u0631\u0627\u0628\u06cc \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>DefaultFirebaseOptions.currentPlatform<\/code> \u062c\u0648 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u0627\u0633 \u0633\u06d2 \u067e\u0691\u06be\u06cc\u06ba\u06d4 <code>firebase_options.dart<\/code> \u0627\u067e\u0646\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a Firebase \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>const bool.fromEnvironment('USE_EMULATOR', defaultValue: false)<\/code> \u0627\u06cc\u06a9 \u06a9\u0645\u067e\u0627\u0626\u0644 \u0679\u0627\u0626\u0645 \u0645\u0633\u062a\u0642\u0644 \u067e\u0691\u06be\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u06af\u0632\u0631 \u06a9\u0631 \u0633\u06cc\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u0633\u06a9\u062a\u0627 \u06c1\u06d2: <code>--dart-define=USE_EMULATOR=true<\/code> \u0622\u067e \u06a9\u0648 <code>flutter run<\/code> \u062d\u06a9\u0645 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631\u0632 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06c1\u06d2: <code>kDebugMode<\/code>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0627\u0633 \u0637\u0631\u062d \u062f\u06a9\u06be\u062a\u06cc \u06c1\u06d2: <code>kDebugMode<\/code> \u0627\u0633\u06d2 \u063a\u0644\u0637 \u067e\u0631 \u0633\u06cc\u0679 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0631\u06cc\u0644\u06cc\u0632 \u0628\u0644\u0688\u0632 \u0645\u0631\u062a\u0628 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2 \u0648\u0631\u0646\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06ba \u06af\u06d2\u06d4 <code>--dart-define=USE_EMULATOR=true<\/code> \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0646\u062a\u06cc\u062c\u06c1 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>Platform.isAndroid<\/code> \u0627\u067e\u0646\u06d2 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u06c1\u0648\u0633\u0679 \u0627\u06cc\u0688\u0631\u06cc\u0633 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0633\u06cc\u0679\u0646\u06af\u0632 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-conclusion\">\u0646\u062a\u06cc\u062c\u06c1<\/h2>\n<p>\u0688\u0627\u0631\u0679 \u0622\u0646 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0641\u0644\u0679\u0631 \u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc \u0628\u0631\u0633\u0648\u06ba \u0633\u06d2 \u062e\u0648\u0627\u06c1\u0634 \u0645\u0646\u062f \u062a\u06be\u06cc\u060c \u0627\u0648\u0631 \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0646\u06cc\u06a9\u0633\u0679 2026 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u0627\u0633 \u0642\u0633\u0645 \u06a9\u06d2 \u062c\u0648\u0634 \u0648 \u062e\u0631\u0648\u0634 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062c\u0648 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0622\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062f\u06cc\u0631\u06cc\u0646\u06c1 \u0645\u0633\u0627\u0626\u0644 \u0628\u0627\u0644\u0622\u062e\u0631 \u062d\u0644 \u06c1\u0648 \u062c\u0627\u0626\u06cc\u06ba\u06d4 2023 \u0633\u06d2 \u062c\u0645\u0639 \u0634\u062f\u06c1 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0635\u0627\u0631\u0641 \u06a9\u06cc \u0622\u0648\u0627\u0632 \u06a9\u0627 \u062f\u06be\u0627\u06af\u06c1 \u0645\u0628\u0627\u0631\u06a9\u0628\u0627\u062f\u0648\u06ba \u0633\u06d2 \u0628\u06be\u0631\u0627 \u06c1\u0648\u0627 \u062a\u06be\u0627\u06d4 \u0648\u06c1 \u0688\u0648\u06cc\u0644\u067e\u0631 \u062c\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0679\u0627\u0626\u067e \u0627\u0633\u06a9\u0631\u067e\u0679 \u0633\u06cc\u06a9\u06be \u0644\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u0627\u0633 \u0633\u06d2 \u0646\u0627\u0648\u0627\u0642\u0641 \u06c1\u06cc\u06ba \u0627\u0646 \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u0686\u0627\u0646\u06a9 \u0627\u0633 \u0632\u0628\u0627\u0646 \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633 \u062c\u0627\u0646\u06d2 \u06a9\u0627 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2 \u062c\u0648 \u0648\u06c1 \u062c\u0627\u0646\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u06a9\u0646\u06cc\u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u0648\u0627\u0642\u0639\u06cc \u0679\u06be\u0648\u0633 \u06c1\u06d2\u06d4 \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0627\u06d2 \u0627\u0648 \u0679\u06cc \u062a\u0627\u0644\u06cc\u0641 \u0645\u06cc\u06ba \u062a\u0634\u0631\u06cc\u062d \u0634\u062f\u06c1 \u0631\u0646 \u0679\u0627\u0626\u0645 \u0633\u06d2 \u06a9\u0645 \u06a9\u0648\u0644\u0688 \u0627\u0633\u0679\u0627\u0631\u0679 \u0679\u0627\u0626\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0645\u062d\u0641\u0648\u0638\u060c \u0645\u0636\u0628\u0648\u0637\u06cc \u0633\u06d2 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0646\u0638\u0627\u0645 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0648 \u062e\u0648\u0627\u06c1\u0634 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u063a\u06cc\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u067e\u0630\u06cc\u0631 \u0645\u0627\u0688\u0644 I\/O- \u067e\u0627\u0628\u0646\u062f \u0633\u0631\u0648\u0631 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0627\u0645 \u06a9\u06d2 \u0628\u0648\u062c\u06be \u06a9\u0648 \u0645\u0624\u062b\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>firebase_functions<\/code> \u06cc\u06c1 \u067e\u06cc\u06a9\u062c FlutterFire \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06d2 ergonomics \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 Flutter \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0646 \u0644\u0648\u06af\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u06a9\u0645 \u0648\u06a9\u0631 \u06c1\u06d2 \u062c\u0646 \u06a9\u06d2 \u067e\u0627\u0633 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u06c1\u06cc Firebase \u0627\u067e\u0646\u06d2 \u06a9\u0644\u0627\u0626\u0646\u0679\u0633 \u0645\u06cc\u06ba \u0636\u0645 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u062d\u0627\u0644\u062a \u062d\u0642\u06cc\u0642\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u062d\u062a\u0631\u0627\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u067e\u0633 \u0645\u0646\u0638\u0631 \u06a9\u06d2 \u0645\u062d\u0631\u06a9\u0627\u062a \u06a9\u0648 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062a\u0639\u06cc\u0646\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4 \u0645\u062c\u06be\u06d2 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u06a9\u0646\u0633\u0648\u0644 \u0645\u06cc\u06ba \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u0646\u0638\u0631 \u0646\u06c1\u06cc\u06ba \u0622 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4 \u0646\u0627\u0645 \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u0642\u0627\u0628\u0644 \u06a9\u0627\u0644 \u06a9\u0627\u0644\u0646\u06af \u06a9\u0627\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0627\u063a\u0630 \u06a9\u06d2 \u0627\u06cc\u06a9 \u0679\u06a9\u0691\u06d2 \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u0644 \u0641\u06cc\u0635\u0644\u0648\u06ba \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u06a9\u0631\u06d2 \u06af\u0627\u060c \u0627\u0648\u0631 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0631\u06cc\u0644\u06cc\u0632 \u06a9\u06cc \u062a\u0627\u0631\u06cc\u062e \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062d\u0644 \u06a9\u0631 \u0644\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 Firebase \u0679\u06cc\u0645 \u0627\u0633 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062a\u06cc\u0627\u0631 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0639\u0644\u0627\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u0633\u06d2 \u067e\u06cc\u0634 \u0631\u0641\u062a \u06a9\u06cc \u0631\u0641\u062a\u0627\u0631 \u062d\u0648\u0635\u0644\u06c1 \u0627\u0641\u0632\u0627 \u0631\u06c1\u06cc \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u0646\u0638\u0627\u0645 \u06a9\u0648 \u0642\u062f\u0627\u0645\u062a \u067e\u0633\u0646\u062f\u06cc \u0633\u06d2 \u0645\u0646\u0635\u0648\u0628\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u0631\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0632 \u0622\u067e \u06a9\u06d2 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u0645\u0631\u06a9\u0632\u06cc \u062e\u06cc\u0627\u0644 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06cc\u06ba\u060c \u0642\u0637\u0639 \u0646\u0638\u0631 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u06cc \u0641\u0646\u06a9\u0634\u0646\u0644 \u0635\u0644\u0627\u062d\u06cc\u062a\u06cc\u06ba \u06a9\u062a\u0646\u06cc \u06c1\u06cc \u067e\u062e\u062a\u06c1 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1\u0627\u06ba \u062a\u06a9 \u06a9\u06c1 \u0627\u06af\u0631 \u06c1\u0645 \u0679\u0631\u06af\u0631 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 Node.js \u0645\u06cc\u06ba \u0627\u0628\u06be\u06cc \u06a9\u0686\u06be \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u0627\u062c\u06a9 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062f\u0648\u0646\u0648\u06ba \u0637\u0631\u0641 \u0633\u06d2 \u06a9\u06be\u06cc\u0646\u0686\u06d2 \u06af\u0626\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0688\u06cc\u0679\u0627 \u0645\u0627\u0688\u0644 \u0627\u0648\u0631 \u062a\u0648\u062b\u06cc\u0642 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u06a9\u06cc \u062a\u0639\u0645\u06cc\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u06a9\u0648 \u0628\u06c1\u062a\u0631 \u0628\u0646\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0641\u0627\u0644\u062a\u0648 \u0642\u0633\u0645 \u06a9\u06cc \u062a\u0639\u0631\u06cc\u0641 \u06cc\u0627 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 API \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u0679\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06cc\u0691\u06d2 \u06a9\u06d2 \u0632\u0645\u0631\u06d2 \u06a9\u0648 \u062e\u062a\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 \u062c\u0627\u0646\u0686 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u0645\u0642\u062f\u0627\u0631 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06cc\u06d4 \u067e\u06cc\u06a9\u06cc\u062c\u0632 \u0627\u0628 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0688\u0627\u0631\u0679 \u0641\u06cc\u0686\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u0645\u067e\u0644\u06cc\u0641\u0627\u0626\u0631\u0632 \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0627\u0646\u0679\u06cc\u06af\u0631\u06cc\u0679\u0688 \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u0644\u0679\u0631 \u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc \u0627\u0628\u06be\u06cc \u06cc\u06c1 \u062f\u06cc\u06a9\u06be\u0646\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0641\u0644 \u0627\u0633\u0679\u06cc\u06a9 \u0688\u0627\u0631\u0679 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0645\u0646\u0635\u0648\u0628\u0648\u06ba \u0645\u06cc\u06ba \u0645\u0634\u062a\u0631\u06a9\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0648 \u0645\u0646\u0638\u0645 \u06a9\u0631\u0646\u06d2\u060c \u0679\u06cc\u0633\u0679 \u0627\u06cc\u0628\u0644\u0679\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06cc \u0633\u0627\u062e\u062a\u060c \u06a9\u0627\u0644 \u0627\u06cc\u0628\u0644 \u0627\u0648\u0631 \u0627\u06cc\u0686 \u0679\u06cc \u0679\u06cc \u067e\u06cc \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0679\u0631\u06cc\u0688 \u0622\u0641 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062d\u062f\u0648\u062f \u06a9\u0648 \u0645\u0646\u0627\u0633\u0628 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0633\u0646\u0628\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06d2 \u0646\u0645\u0648\u0646\u06d2 \u0627\u0628 \u0628\u06be\u06cc \u0642\u0627\u0626\u0645 \u06a9\u06cc\u06d2 \u062c\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0628\u0627\u062a\u06cc\u06ba \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u0645\u0632\u06cc\u062f \u0679\u06cc\u0645\u06cc\u06ba \u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u06a9\u0627\u0645 \u06a9\u0627 \u0628\u0648\u062c\u06be \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0648 \u06a9\u0686\u06be \u0648\u06c1 \u0633\u06cc\u06a9\u06be\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u06a9\u0645\u06cc\u0648\u0646\u0679\u06cc \u0628\u0627\u0642\u06cc \u06a9\u0648 \u0628\u06be\u0631 \u062f\u06d2 \u06af\u06cc\u06d4<\/p>\n<h2 id=\"heading-references\">\u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a<\/h2>\n<h3 id=\"heading-official-firebase-documentation\">\u0628\u0627\u0636\u0627\u0628\u0637\u06c1 \u0641\u0627\u0626\u0631 \u0628\u06cc\u0633 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a<\/h3>\n<h3 id=\"heading-announcement-and-blog-posts\">\u0627\u0639\u0644\u0627\u0646\u0627\u062a \u0627\u0648\u0631 \u0628\u0644\u0627\u06af \u067e\u0648\u0633\u0679\u0633<\/h3>\n<h3 id=\"heading-packages\">\u067e\u06cc\u06a9\u062c<\/h3>\n<ul>\n<li>\n<p><strong>pub.dev \u0645\u06cc\u06ba firebase_functions<\/strong><br \/>\u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0641\u06cc\u0634\u0644 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u062c\u0632 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba: <code>fireUp<\/code>\u060c <code>onRequest<\/code>\u060c <code>onCall<\/code>\u060c <code>HttpsOptions<\/code>\u060c <code>CallableOptions<\/code>\u0627\u0648\u0631 <code>FirebaseFunctionsException<\/code>. https:\/\/pub.dev\/packages\/firebase_functions<\/p>\n<\/li>\n<li>\n<p><strong>GitHub \u067e\u0631 firebase_functions<\/strong><br \/>\u0645\u0627\u062e\u0630 \u06a9\u0648\u0688\u060c \u0645\u0633\u0627\u0626\u0644 \u0627\u0648\u0631 \u0645\u062b\u0627\u0644\u06cc\u06ba\u06d4 <code>firebase_functions<\/code> \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c\u06d4 README \u0627\u0636\u0627\u0641\u06cc \u0645\u062b\u0627\u0644\u0648\u06ba \u0627\u0648\u0631 \u062d\u062f\u0648\u062f \u06a9\u06cc \u062a\u0627\u0632\u06c1 \u062a\u0631\u06cc\u0646 \u0641\u06c1\u0631\u0633\u062a \u067e\u0631 \u0645\u0634\u062a\u0645\u0644 \u06c1\u06d2\u06d4<br \/>https:\/\/github.com\/firebase\/firebase-functions-dart<\/p>\n<\/li>\n<li>\n<p><strong>pub.dev \u0645\u06cc\u06ba dart_firebase_admin<\/strong><br \/>\u0688\u0627\u0631\u0679 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 (\u06a9\u0644\u0627\u0624\u0688 \u0631\u0646\u060c \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0633\u0631\u0648\u0631\u0632\u060c \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0627\u0633\u06a9\u0631\u067e\u0679\u0633) \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2\u06d4 Invertase \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0645\u0646\u0638\u0645. https:\/\/pub.dev\/packages\/dart_firebase_admin<\/p>\n<\/li>\n<li>\n<p><strong>\u06af\u0679 \u06c1\u0628 \u067e\u0631 \u0688\u0627\u0631\u0679_\u0641\u0627\u0626\u0631\u0628\u06cc\u0633_\u0627\u06cc\u0688\u0645\u0646<\/strong><br \/>\u0688\u0627\u0631\u0679 \u0627\u06cc\u0688\u0645\u0646 SDK \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0627\u062e\u0630 \u06a9\u0648\u0688 \u0627\u0648\u0631 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a\u060c \u0628\u0634\u0645\u0648\u0644 Firestore\u060c \u062a\u0635\u062f\u06cc\u0642\u060c \u06a9\u0644\u0627\u0624\u0688 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c\u060c \u0627\u0648\u0631 FCM \u06a9\u06cc \u0645\u062b\u0627\u0644\u06cc\u06ba\u06d4 https:\/\/github.com\/invertase\/dart_firebase_admin<\/p>\n<\/li>\n<li>\n<p><strong>google_cloud_firestore pub.dev \u0645\u06cc\u06ba<\/strong><br \/>\u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0688\u0627\u0631\u0679 \u0641\u0627\u0626\u0631 \u0627\u0633\u0679\u0648\u0631 SDK\u06d4<br \/>https:\/\/pub.dev\/packages\/google_cloud_firestore<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"heading-codelabs-and-tutorials\">Codelabs \u0627\u0648\u0631 \u0633\u0628\u0642<\/h3>\n<h3 id=\"heading-related-flutter-and-dart-packages\">\u0645\u062a\u0639\u0644\u0642\u06c1 \u0641\u0644\u0679\u0631 \u0627\u0648\u0631 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u062c\u0632<\/h3>\n<p><em>\u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u0626\u06cc 2026 \u0645\u06cc\u06ba \u06af\u0648\u06af\u0644 \u06a9\u0644\u0627\u0624\u0688 \u0646\u06cc\u06a9\u0633\u0679 2026 \u0645\u06cc\u06ba \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062f\u06c1 \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0624\u0688 \u0641\u0646\u06a9\u0634\u0646 \u0633\u067e\u0648\u0631\u0679 \u06a9\u06cc \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0644\u06a9\u06be\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06d4<\/em> <code>firebase_functions<\/code> <em>\u0648\u0631\u0698\u0646 0.1.x \u0627\u0648\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2 \u067e\u06cc\u06a9\u062c\u0632<\/em> <code>dart_firebase_admin<\/code> <em>\u06cc\u06c1 Invertase \u06a9\u06d2 \u0632\u06cc\u0631 \u0627\u0646\u062a\u0638\u0627\u0645 \u0627\u06cc\u06a9 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u062a\u062c\u0631\u0628\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 API \u0627\u0648\u0631 \u0645\u0639\u0627\u0648\u0646 \u0679\u0631\u06af\u0631 \u06a9\u06cc \u0642\u0633\u0645\u06cc\u06ba \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06cc \u0631\u06cc\u0644\u06cc\u0632 \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u067e \u06af\u0631\u06cc\u0688 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u06c1\u0645\u06cc\u0634\u06c1 \u0628\u0627\u0636\u0627\u0628\u0637\u06c1 Firebase \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u0627\u0648\u0631 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u06d2 \u0644\u0627\u06af \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/em><\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u06cc\u06a9 \u062e\u0627\u0635 \u0642\u0633\u0645 \u06a9\u06cc \u0631\u06af\u0691 \u06c1\u06d2 \u062c\u0633\u06d2 \u06c1\u0631 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0631 \u0646\u06d2 \u0645\u062d\u0633\u0648\u0633 \u06a9\u06cc\u0627 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0644\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u06cc \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062f\u0646\u0648\u06ba \u06a9\u0648 \u0641\u0631\u0646\u0679 \u0627\u06cc\u0646\u0688 \u067e\u0631 \u0627\u0638\u06c1\u0627\u0631 \u062e\u06cc\u0627\u0644\u060c null-safe\u060c \u0627\u0648\u0631 \u0645\u0636\u0628\u0648\u0637\u06cc \u0633\u06d2 \u0679\u0627\u0626\u067e \u0634\u062f\u06c1 \u0688\u0627\u0631\u0679 \u06a9\u0648\u0688 \u0644\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06af\u0632\u0627\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u06a9\u0627 \u0645\u0627\u0688\u0644 \u0635\u0627\u0641 \u06c1\u06d2\u06d4 Async\/await \u0632\u0646\u062c\u06cc\u0631\u0648\u06ba \u06a9\u0648 \u0646\u062b\u0631 \u06a9\u06cc \u0637\u0631\u062d [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":24345,"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-24344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/24344","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=24344"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/24344\/revisions"}],"predecessor-version":[{"id":24346,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/24344\/revisions\/24346"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/24345"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=24344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=24344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=24344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}