{"id":29274,"date":"2026-09-13T20:41:54","date_gmt":"2026-09-13T20:41:54","guid":{"rendered":"https:\/\/umang.pk\/2026\/09\/13\/%d9%81%d9%84%d9%b9%d8%b1-%d9%85%db%8c%da%ba-%d9%84%db%8c%da%af%d9%88-%d9%81%d9%86-%d8%aa%d8%b9%d9%85%db%8c%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%86%d8%a7%d9%81%d8%b0-%da%a9%db%8c%d8%a7\/"},"modified":"2026-09-13T20:41:55","modified_gmt":"2026-09-13T20:41:55","slug":"%d9%81%d9%84%d9%b9%d8%b1-%d9%85%db%8c%da%ba-%d9%84%db%8c%da%af%d9%88-%d9%81%d9%86-%d8%aa%d8%b9%d9%85%db%8c%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%86%d8%a7%d9%81%d8%b0-%da%a9%db%8c%d8%a7","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/09\/13\/%d9%81%d9%84%d9%b9%d8%b1-%d9%85%db%8c%da%ba-%d9%84%db%8c%da%af%d9%88-%d9%81%d9%86-%d8%aa%d8%b9%d9%85%db%8c%d8%b1-%da%a9%d9%88-%da%a9%db%8c%d8%b3%db%92-%d9%86%d8%a7%d9%81%d8%b0-%da%a9%db%8c%d8%a7\/","title":{"rendered":"\u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u0644\u06cc\u06af\u0648 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 [Full Handbook]"},"content":{"rendered":"\n<div id=\"\">\n<p>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0631 \u0627\u06cc\u06a9 \u0646\u06d2 \u0627\u067e\u0646\u06cc \u0628\u0627\u0644\u063a \u0632\u0646\u062f\u06af\u06cc \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u0633\u06cc\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062f\u0648 LEGO \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u0648 \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679 \u067e\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u06c1 \u062c\u06af\u06c1 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u0646\u06d2 \u0634\u0627\u06cc\u062f \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0633\u0648\u0686\u0627 \u06c1\u0648 \u06af\u0627 \u06a9\u06c1 \u0627\u06cc\u0646\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0646 \u0633\u0627 \u067e\u0644\u0627\u0633\u0679\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u0627 \u06cc\u06c1 \u06a9\u0633 \u0641\u06cc\u06a9\u0679\u0631\u06cc \u0633\u06d2 \u0622\u0626\u06cc \u06c1\u06d2\u06d4 \u0627\u0633 \u0648\u0642\u062a \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0686\u06cc\u0632 \u06a9\u06cc \u067e\u0631\u0648\u0627\u06c1 \u062a\u06be\u06cc: \u06a9\u06cc\u0627 \u062c\u0691\u06cc\u06ba \u0622\u067e\u0633 \u0645\u06cc\u06ba \u0645\u0644\u062a\u06cc \u06c1\u06cc\u06ba\u061f<\/p>\n<p>\u0648\u06c1 \u0686\u06be\u0648\u0679\u06d2\u060c \u0639\u0627\u0645 \u0644\u0645\u062d\u0627\u062a \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u06a9\u0627 \u067e\u0648\u0631\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06cc\u06ba\u06d4 \u0627\u0628\u060c \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 LEGO \u0633\u06d2 \u062f\u0648\u0631 \u0631\u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 Flutter \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u062a\u0635\u0648\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u06a9\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u06c1\u06d2 \u062c\u0633\u06d2 \u0679\u06cc\u0645 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u0631 \u0634\u062e\u0635 \u062e\u0641\u06cc\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u0633\u06d2 \u0688\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0691\u06d2 \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0688\u06cc\u0679\u0627 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u060c \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u0631\u06cc\u06ba\u060c \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>build()<\/code> \u0637\u0631\u06cc\u0642\u06c1<\/p>\n<p>\u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0627\u0633\u06d2 \u0686\u06be\u0648\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u0686\u0627\u06c1\u062a\u0627\u06d4 \u0627\u062f\u0627\u0626\u06cc\u06af\u06cc \u06a9\u06d2 \u0628\u06c1\u0627\u0624 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u062a\u06cc\u0646 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0627\u0633\u06a9\u0631\u0648\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u062a\u0627\u06a9\u06c1 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646 \u062f\u0648 \u062a\u062c\u0631\u0628\u0627\u062a \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0641\u0631\u0642 (\u0644\u06cc\u06af\u0648 \u0627\u06cc\u0646\u0679 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0628\u062e\u0634 \u0627\u062d\u0633\u0627\u0633 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u06a9\u06be\u0648\u0644\u0646\u06d2 \u06a9\u0627 \u062e\u0648\u0641) \u0627\u06cc\u06a9 \u0639\u0627\u062f\u062a \u0645\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u06d4 LEGO \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u0644\u06cc\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0628\u0633 \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u06a9\u0648\u0688 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633 \u0637\u0631\u062d \u0646\u06c1\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>&quot;LEGO \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631&#8221; \u0635\u0631\u0641 LEGO \u06a9\u06d2 \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u06a9\u0648 \u06a9\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06d2\u06d4 \u0627\u0648\u0631 \u06cc\u06c1 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0622\u067e \u06a9\u0648 \u0622\u06c1\u0633\u062a\u06c1 \u0622\u06c1\u0633\u062a\u06c1 \u06a9\u0633\u06cc \u0628\u06c1\u062a \u0686\u06be\u0648\u0679\u06cc \u0686\u06cc\u0632 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0639\u0627\u062f\u062a \u0633\u06a9\u06be\u0627\u0626\u06d2 \u06af\u06cc \u062c\u0633\u06d2 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u0679\u06a9\u0691\u06d2 \u0679\u06a9\u0691\u06d2 \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u067e\u0631 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0631\u0646\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0622\u067e \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<p>\u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba\u060c \u06c1\u0645 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u060c \u062c\u0648 \u0627\u06cc\u06a9 \u06c1\u06cc \u0639\u0627\u062f\u0627\u062a \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635\u060c \u0645\u0639\u0631\u0648\u0641 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2 \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0628\u0627\u0644\u06a9\u0644 \u06a9\u06c1\u0627\u06ba \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\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\u0628\u062a\u062f\u0627\u0626\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u06a9\u0648 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0644\u0679\u0631 \u0648\u06cc\u062c\u0679 \u0644\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e\u0633 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u0622\u0634\u0646\u0627 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 <code>StatelessWidget<\/code> \u0627\u0648\u0631 \u0639\u0627\u0645 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0648 \u0688\u0627\u0631\u0679 \u06a9\u0644\u0627\u0633\u0632\u060c \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631\u0632 \u0627\u0648\u0631 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u0633\u0645\u062c\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06d2\u060c \u0648\u06c1 \u0633\u0679\u0688\u0632 \u062c\u0646 \u067e\u0631 \u06cc\u06c1 \u067e\u0648\u0631\u06cc \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u0628\u0646\u06cc \u06c1\u06d2\u060c \u0635\u0631\u0641 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633\u0632 \u0627\u0648\u0631 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06c1\u06cc\u06ba\u06d4 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06cc\u0627 \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0639\u0644\u0645 \u0645\u062f\u062f\u06af\u0627\u0631 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0636\u0631\u0648\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062e\u06cc\u0627\u0644 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06cc\u06c1 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u0633\u0627\u0645\u0646\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0628\u0639\u062f \u06a9\u06d2 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba <code>flutter_bloc<\/code>\u060c <code>get_it<\/code>\u060c <code>dio<\/code>\u0627\u0648\u0631 <code>go_router<\/code> \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u06cc\u06a9\u06cc\u062c\u06d4 \u062a\u0645\u0627\u0645 \u062f\u0631\u0622\u0645\u062f\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0627\u0633\u06cc \u0644\u0645\u062d\u06d2 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u0648\u06c1 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0635\u0627\u0641 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u0627 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2 \u0627\u0633 \u06a9\u0627 \u0639\u0645\u0644\u06cc \u0639\u0644\u0645 (\u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0633\u06d2 \u0622\u0632\u0627\u062f \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627) \u0645\u0641\u06cc\u062f \u0633\u06cc\u0627\u0642 \u0648 \u0633\u0628\u0627\u0642 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba \u0627\u0646 \u0642\u0627\u0631\u0626\u06cc\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0631\u06cc\u0634 \u06a9\u0648\u0631\u0633 \u0628\u06be\u06cc \u0634\u0627\u0645\u0644 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u0645\u06cc\u06ba \u0646\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>LEGO \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0627\u0688\u06cc\u0648\u0644\u0631 monorepo \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0636\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0633\u06cc\u06a9\u0634\u0646 \u0627\u0633 \u062e\u06cc\u0627\u0644 \u06a9\u0648 \u062e\u0627\u0644\u06cc \u0641\u0648\u0644\u0688\u0631 \u0633\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 monorepos \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u067e\u06cc\u0634\u06af\u06cc \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06cc \u0628\u06be\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0622\u067e \u0648\u06c1\u0627\u06ba \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0627\u06af\u0631 \u0622\u067e monorepo \u0688\u06be\u0627\u0646\u0686\u06d2\u060c Melos\u060c \u0627\u0648\u0631 Dart \u0648\u0631\u06a9 \u0627\u0633\u067e\u06cc\u0633 \u06a9\u06cc \u0645\u0632\u06cc\u062f \u06af\u06c1\u0631\u0627\u0626\u06cc \u0633\u06d2\u060c \u0648\u0642\u0641 \u0634\u062f\u06c1 \u0648\u0627\u06a9 \u062a\u06be\u0631\u0648 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u067e\u06c1\u0644\u06d2 \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba Monorepos \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u067e\u0691\u06be\u0646\u0627 \u0622\u067e \u06a9\u0648 \u06a9\u0686\u06be \u0645\u0641\u06cc\u062f \u067e\u0633 \u0645\u0646\u0638\u0631 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u06d2 \u06af\u0627 \u06a9\u06c1 \u0679\u06cc\u0645\u06cc\u06ba \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 monorepos \u062a\u06a9 \u06a9\u06cc\u0648\u06ba \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-what-lego-architecture-actually-means\">&quot;\u0644\u06cc\u06af\u0648 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631&#8221; \u06a9\u0627 \u0648\u0627\u0642\u0639\u06cc \u06a9\u06cc\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2\u06d4<\/h2>\n<p>\u0622\u0626\u06cc\u06d2 \u0627\u06cc\u06a9 \u0644\u0645\u062d\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u067e\u0633 LEGO bricks \u067e\u0631 \u0686\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1\u0627\u06ba \u062f\u0648 \u0686\u06cc\u0632\u06cc\u06ba \u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u06c1 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u06cc\u0627 \u06c1\u06d2: \u0627\u0633 \u06a9\u06cc \u0634\u06a9\u0644\u060c \u0627\u0633 \u06a9\u0627 \u0631\u0646\u06af\u060c \u0627\u0633 \u06a9\u0627 \u0645\u0642\u0635\u062f\u06d4 \u0627\u0648\u0631 \u0633\u0679\u0688\u0632\u060c \u0633\u0628 \u0633\u06d2 \u0627\u0648\u067e\u0631 \u0645\u0639\u06cc\u0627\u0631\u06cc \u06a9\u0646\u06a9\u0634\u0646 \u067e\u0648\u0627\u0626\u0646\u0679\u0633\u060c \u0627\u0648\u0631 \u0646\u0686\u0644\u06d2 \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u0679\u06cc\u0648\u0628\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0646\u06c1\u06cc\u06ba \u0627\u0633\u06cc \u0645\u0639\u06cc\u0627\u0631 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679\u0648\u06ba \u0633\u06d2 \u062c\u0648\u0691\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0633\u06cc \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u0648 \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679 \u0633\u06d2 \u062c\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u06cc \u0634\u06a9\u0644 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u06cc\u06d4 \u0622\u067e \u06a9\u0648 \u0635\u0631\u0641 \u0645\u0645\u0627\u062b\u0644 \u062c\u0691\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u067e\u0648\u0631\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0627\u0641\u0679 \u0648\u06cc\u0626\u0631 \u0627\u0633\u06d2 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u0628\u0627\u0644\u06a9\u0644 \u06a9\u0627\u067e\u06cc \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u0627\u06cc\u06a9 \u0627\u06cc\u067e \u06a9\u06cc \u0627\u06a9\u0627\u0626\u06cc \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0627\u06cc\u06a9 \u0648\u06cc\u062c\u06cc\u0679\u060c \u06a9\u0644\u0627\u0633\u060c \u0633\u0631\u0648\u0633\u060c \u06cc\u0627 \u067e\u0648\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u062c\u0691\u0646\u0627 \u0648\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u0648 \u0628\u06cc\u0631\u0648\u0646\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633\u060c \u0627\u0646\u0679\u0631\u0641\u06cc\u0633\u060c \u06cc\u0627 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u062f\u0633\u062a\u062e\u0637 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0648\u0688 \u0645\u06cc\u06ba \u062f\u0648 \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u0646\u06d2 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06cc\u067e \u06a9\u0627 \u0627\u06cc\u06a9 \u062d\u0635\u06c1 \u062f\u0648\u0633\u0631\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0635\u0631\u0641 \u0627\u067e\u0646\u06d2 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06cc\u0627 \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u062f\u0648\u0633\u0631\u0627 \u062d\u0635\u06c1 \u0627\u0633 \u06a9\u06d2 \u0646\u06cc\u0686\u06d2 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u0627\u062f \u0631\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0627 \u062f\u0646\u06cc\u0627 \u0633\u06d2 \u0631\u0627\u0628\u0637\u06c1 \u0635\u0631\u0641 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0633\u06cc \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u06a9\u06cc \u0627\u06cc\u0646\u0679\u06cc\u06ba \u062f\u0648\u0633\u0631\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u062c\u0691\u06cc \u06c1\u0648\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0679\u06be\u0648\u0633 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0648\u0627\u062d\u062f \u0639\u0627\u062f\u062a \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0645\u062d\u0631\u06a9 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u0646 \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u062a\u06d2 \u0631\u06c1\u06cc\u06ba \u06af\u06d2\u060c \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0648\u06cc\u062c\u06cc\u0679 \u0645\u06cc\u06ba\u060c \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0645\u06cc\u06ba\u060c \u067e\u06be\u0631 \u067e\u0648\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u0645\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u062e\u0631 \u0645\u06cc\u06ba \u067e\u0648\u0631\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u06ba\u06d4<\/p>\n<p>\u06a9\u0648\u0688 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u062c\u0648 \u0627\u067e\u0646\u0627 \u06a9\u0627\u0645 \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0648\u0633\u0631\u06cc \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u06be\u0648\u0644\u06d2 \u0628\u063a\u06cc\u0631 \u062e\u0648\u062f \u06c1\u06cc \u0628\u0648\u0644\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u0691\u0648\u0633\u06cc\u0648\u06ba \u06a9\u06d2 \u0646\u0648\u0679\u0633 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4 \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u067e\u0691\u0648\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0633 \u0637\u0631\u062d \u06a9\u0686\u06be \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0622\u067e \u06a9\u0648 \u0627\u0646\u06c1\u06cc\u06ba \u0635\u0631\u0641 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646 \u062a\u06cc\u0646\u0648\u06ba \u0627\u062d\u0633\u0627\u0633\u0627\u062a \u06a9\u0648 \u0630\u06c1\u0646 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0627\u0628 \u06a9\u06cc \u062a\u0645\u0627\u0645 \u0645\u062b\u0627\u0644\u06cc\u06ba \u062f\u0631\u0627\u0635\u0644 \u0635\u0631\u0641 \u062a\u06cc\u0646 \u062c\u0630\u0628\u0627\u062a \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u0688\u0627\u0631\u0679 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0631\u0627\u0632 \u06c1\u06d2\u06d4 \u0622\u067e \u0627\u0633 \u06a9\u0627 \u0646\u0627\u0645 \u0644\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0648\u0631\u0698\u0646 \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0631 \u0686\u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06cc \u0633\u0637\u0631 \u067e\u0631 \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba\u060c \u062c\u0648 \u0622\u067e \u0646\u06d2 \u06cc\u0642\u06cc\u0646\u0627\u064b \u067e\u06c1\u0644\u06d2 \u0644\u06a9\u06be\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">Padding(\n  padding: const EdgeInsets.all(8),\n  child: const Text('Hello'),\n)\n<\/code><\/pre>\n<p><code>Padding<\/code>    \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u0627\u0642\u0639\u06cc \u0627\u0633 \u06a9\u06cc \u067e\u0631\u0648\u0627\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06a9\u06c1 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06cc\u0627 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>child<\/code>. \u0627\u06cc\u0633\u0627 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 <code>Text<\/code>\u060c <code>Image<\/code>\u060c <code>Column<\/code>\u06cc\u0627 \u06a9\u0686\u06be \u0627\u0648\u0631\u06d4 \u0633\u0627\u062f\u06c1 \u0646\u0638\u0631 \u0645\u06cc\u06ba \u0686\u06be\u067e\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u0646\u0679 \u0627\u0648\u0631 \u062c\u0691\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 <code>Padding<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>child<\/code> \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u0633\u0679\u0688 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0648\u06cc\u062c\u06cc\u0679 \u062c\u0648 \u0627\u0633 \u0628\u06cc\u0627\u0646 \u067e\u0631 \u0641\u0679 \u0628\u06cc\u0679\u06be\u062a\u0627 \u06c1\u06d2 \u062e\u0648\u0634 \u0622\u0626\u0646\u062f \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u06d2 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0633\u06a9\u06be\u0627\u06cc\u0627 <code>Padding<\/code> \u0645\u062a\u0646 \u06cc\u0627 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u06a9\u06cc\u0633\u06d2 \u0631\u06cc\u0646\u0688\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0628\u0627\u0644\u06a9\u0644 \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4<\/p>\n<p>\u0627\u0628 \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u060c \u0622\u067e \u06a9\u06d2 \u0633\u0631 \u0645\u06cc\u06ba \u0641\u0679 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0641\u06cc \u0686\u06be\u0648\u0679\u06d2\u060c \u0627\u0648\u0631 \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06a9\u06c1 \u0627\u0633 \u0639\u0627\u062f\u062a \u06a9\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0648\u0642\u062a \u06a9\u06cc\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0642\u06cc\u0645\u062a\u06cc\u06ba \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06be\u0648\u0691\u0627 \u0633\u0627 \u06af\u0648\u0644\u060c \u0633\u0627\u06cc\u06c1 \u062f\u0627\u0631 \u0628\u0627\u06a9\u0633 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">class PriceTag extends StatelessWidget {\n  final double price;\n  const PriceTag({super.key, required this.price});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      padding: const EdgeInsets.all(8),\n      decoration: BoxDecoration(\n        color: Colors.white,\n        borderRadius: BorderRadius.circular(6),\n      ),\n      child: Text('$${price.toStringAsFixed(2)}'),\n    );\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0642\u0627\u0628\u0644 \u0642\u0628\u0648\u0644\u060c \u0628\u0627\u0644\u06a9\u0644 \u0686\u06be\u0648\u0679\u0627 \u0648\u06cc\u062c\u06cc\u0679 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0679\u0648\u0679\u0627 \u06c1\u0648\u0627 \u067e\u0631\u0632\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u067e\u0631 \u06af\u06c1\u0631\u06cc \u0646\u0638\u0631 \u0688\u0627\u0644\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u060c \u06c1\u0645 \u0628\u06cc\u06a9 \u0648\u0642\u062a \u062f\u0648 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba: \u0645\u0648\u0627\u062f \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0628\u0627\u06a9\u0633 \u06a9\u06cc \u0634\u06a9\u0644 \u0627\u0648\u0631 \u062e\u0648\u062f \u0645\u0648\u0627\u062f\u06d4<\/p>\n<p>\u062c\u0633 \u0644\u0645\u062d\u06d2 \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0627\u06cc\u06a9 \u06c1\u06cc \u06af\u0648\u0644 \u0634\u06cc\u0688\u0688 \u0628\u0627\u06a9\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0642\u06cc\u0645\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 (\u062c\u06cc\u0633\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0633\u0627 \u0644\u06cc\u0628\u0644 \u062c\u0648 &quot;\u0641\u0631\u0648\u062e\u062a&#8221; \u06a9\u06c1\u062a\u0627 \u06c1\u06d2)\u060c \u0622\u067e \u067e\u06be\u0646\u0633 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u0645 \u06c1\u0648 <code>Container<\/code> \u0646\u0626\u06d2 \u0648\u06cc\u062c\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u062c\u0627\u0646\u06d2 \u06cc\u0627 <code>extends<\/code> \u06c1\u0645 \u0633\u0679\u0627\u0626\u0644 \u06a9\u06cc \u0686\u06be \u0633\u0637\u0631\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u0627 \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u0628\u0646\u0627 \u06a9\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0645\u0636\u0628\u0648\u0637\u06cc \u0633\u06d2 \u062c\u0648\u0691\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06cc\u06c1 \u067e\u0648\u0631\u06cc \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0635\u0644\u0627\u062d \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u06d2\u06d4 <code>Padding<\/code> \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u062f\u06a9\u06be\u0627 \u0686\u06a9\u0627 \u06c1\u0648\u06ba\u06d4 \u0628\u0627\u06a9\u0633 \u06a9\u0648 \u062e\u0648\u062f \u06c1\u06cc \u0628\u0627\u06c1\u0631 \u0622\u0646\u06d2 \u062f\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0628\u0686\u06c1 \u0627\u0633\u06d2 \u0642\u0628\u0648\u0644 \u06a9\u0631 \u0633\u06a9\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">class SurfaceCard extends StatelessWidget {\n  final Widget child;\n  const SurfaceCard({super.key, required this.child});\n\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      padding: const EdgeInsets.all(8),\n      decoration: BoxDecoration(\n        color: Colors.white,\n        borderRadius: BorderRadius.circular(6),\n      ),\n      child: child,\n    );\n  }\n}\n<\/code><\/pre>\n<p><code>SurfaceCard<\/code>    \u0627\u0628 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u062a \u062c\u0627\u0646\u062a\u0627 \u06c1\u0648\u06ba\u06d4 \u06cc\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06d2\u060c \u06af\u0648\u0644\u060c \u0633\u0627\u06cc\u06c1 \u062f\u0627\u0631 \u0628\u0627\u06a9\u0633 \u06a9\u06cc \u0637\u0631\u062d \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0679\u0688 \u0628\u06be\u06cc \u06c1\u06d2\u06d4 <code>child<\/code>\u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u0634\u06a9\u0644 <code>Padding<\/code>\u0627\u06cc\u0633\u06d4 <code>PriceTag<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u0627\u0628 \u0622\u067e \u06a9\u0648 \u06cc\u06c1 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 \u06a9\u06c1 \u0628\u0627\u06a9\u0633 \u06a9\u06cc\u0633\u06d2 \u06a9\u06be\u06cc\u0646\u0686\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06c1 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">class PriceTag extends StatelessWidget {\n  final double price;\n  const PriceTag({super.key, required this.price});\n\n  @override\n  Widget build(BuildContext context) {\n    return SurfaceCard(child: Text('$${price.toStringAsFixed(2)}'));\n  }\n}\n<\/code><\/pre>\n<p>\u0648\u06c1 \u0627\u06cc\u06a9 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0627\u0633 \u062d\u0635\u06d2 \u06a9\u0627 \u067e\u0648\u0631\u0627 \u0633\u0628\u0642 \u06c1\u06d2\u06d4 <code>SurfaceCard<\/code> \u0627\u0628 \u0622\u067e \u0627\u0633\u06d2 \u0627\u067e\u0646\u06d2 &quot;\u0633\u06cc\u0644&#8221; \u0644\u06cc\u0628\u0644\u060c \u0686\u06be\u0648\u0679\u0627 \u0627\u0648\u062a\u0627\u0631\u060c \u062a\u0639\u0631\u06cc\u0641\u06cc \u0628\u06cc\u062c \u0648\u063a\u06cc\u0631\u06c1 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0631\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06a9\u0628\u06be\u06cc \u06c1\u0627\u062a\u06be \u0646\u06c1\u06cc\u06ba \u0644\u06af\u0627\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0646\u06c1\u0648\u06ba \u0646\u06d2 \u06a9\u0628\u06be\u06cc \u06cc\u06c1 \u062e\u06cc\u0627\u0644 \u0631\u06a9\u06be\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u0633\u06cc\u06a9\u06be\u0627 \u06a9\u06c1 \u0627\u0646 \u06a9\u0627 \u0628\u0686\u06c1 \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0627\u0646\u0686 \u06a9\u0631\u0646\u0627 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc \u0627\u06cc\u0646\u0679 \u0648\u0627\u0642\u0639\u06cc \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2 \u06cc\u0627 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u06a9\u0648 \u06a9\u0627\u067e\u06cc \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0646\u0626\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u0648\u06ba\u061f \u0627\u06af\u0631 \u0627\u06cc\u0633\u0627 \u06c1\u06d2 \u062a\u0648\u060c \u0633\u0679\u0688 \u0627\u067e\u0646\u0627 \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2.<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u0648\u06c1\u06cc \u0639\u0627\u062f\u062a \u0634\u06a9\u0644 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0635\u0631\u0641 \u0633\u0627\u0626\u0632 \u0645\u06cc\u06ba \u067e\u06be\u06cc\u0644 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u0634\u0627\u067e\u0646\u06af \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u0627\u0631\u0688\u0632 \u062f\u0631\u0627\u0635\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u062e\u06cc\u0627\u0644 \u06c1\u06cc\u06ba\u060c \u0635\u0631\u0641 \u06cc\u06c1 \u06a9\u06c1 \u0628\u0686\u06d2 \u0642\u062f\u0631\u06d2 \u0628\u0691\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">class ProductThumbnail extends StatelessWidget {\n  final String imageUrl;\n  const ProductThumbnail({super.key, required this.imageUrl});\n\n  @override\n  Widget build(BuildContext context) {\n    return ClipRRect(\n      borderRadius: BorderRadius.circular(6),\n      child: Image.network(imageUrl, height: 120, fit: BoxFit.cover),\n    );\n  }\n}\n\nclass ProductCard extends StatelessWidget {\n  final String name;\n  final double price;\n  final String imageUrl;\n\n  const ProductCard({\n    super.key,\n    required this.name,\n    required this.price,\n    required this.imageUrl,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    return SurfaceCard(\n      child: Column(\n        crossAxisAlignment: CrossAxisAlignment.start,\n        children: [\n          ProductThumbnail(imageUrl: imageUrl),\n          Text(name, style: const TextStyle(fontWeight: FontWeight.bold)),\n          Text('$${price.toStringAsFixed(2)}'),\n        ],\n      ),\n    );\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u062a\u0635\u0648\u0631\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0686\u06be \u0646\u06cc\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0627\u06d4 <code>ProductThumbnail<\/code> \u06cc\u06c1 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u0686\u06be\u0648\u0679\u0627 \u0628\u0644\u0627\u06a9 \u06c1\u06d2 \u062c\u0648 \u0635\u0631\u0641 \u062a\u0635\u0627\u0648\u06cc\u0631 \u06a9\u0648 \u0644\u0648\u0688 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0631\u0627\u0634\u0646\u06d2 \u06a9\u0627 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06c1\u06d2\u06d4 \u0644\u06c1\u0630\u0627 \u0627\u06af\u0631 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0633\u0648\u0626\u0686 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>Image.network<\/code> \u06a9\u06cc\u0634\u0688 \u0627\u0645\u06cc\u062c \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<p><code>ProductCard<\/code>    \u0627\u0628 \u06c1\u0645 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u06d2\u06d4 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u0627 (<code>SurfaceCard<\/code> \u0628\u0627\u06a9\u0633 \u0627\u0648\u0631 <code>ProductThumbnail<\/code> \u062a\u0635\u0648\u06cc\u0631 \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba)\u060c \u06cc\u06c1 \u0627\u0633\u06cc \u0637\u0631\u062d \u06c1\u06d2 \u062c\u0633 \u0637\u0631\u062d \u0622\u067e \u0645\u062e\u062a\u0644\u0641 \u062e\u0627\u0646\u0648\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u06d2 \u0645\u0627\u0688\u0644 \u0645\u06cc\u06ba \u062f\u0648 \u0679\u06a9\u0691\u06d2 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u06cc\u0646\u0648\u06ba \u0648\u06cc\u062c\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0645\u0627\u0645 \u062f\u0631\u0622\u0645\u062f\u0627\u062a \u0627\u0628 \u0628\u06be\u06cc \u0633\u0627\u062f\u06c1 \u06c1\u06cc\u06ba\u06d4 <code>package:flutter\/material.dart<\/code>. \u06cc\u06c1\u0627\u06ba \u0622\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0633\u06cc \u0646\u0626\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u062a\u06be\u06cc\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0633\u0637\u062d \u067e\u0631 LEGO \u0633\u0648\u0686 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u06cc\u06c1 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0628\u0627\u06a9\u0633 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0644\u0627\u0626\u0646 \u06a9\u06c1\u0627\u06ba \u06a9\u06be\u06cc\u0646\u0686\u0646\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-bricks-with-studs-contracts-instead-of-concrete-dependencies\">\u0633\u0679\u0688 \u0645\u06cc\u0633\u0646\u0631\u06cc: \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0639\u0627\u06c1\u062f\u06d2<\/h2>\n<p>\u0627\u06a9\u06cc\u0644\u06d2 \u06a9\u0645\u067e\u0648\u0632\u06cc\u0634\u0646 \u0633\u06d2 \u0622\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 UI \u0645\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0642\u0627\u0628\u0644 \u062a\u0628\u062f\u06cc\u0644\u06cc \u0631\u0648\u06cc\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u0646\u0679\u0648\u06ba \u0627\u0648\u0631 \u0627\u0633 \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u0645\u0639\u0627\u06c1\u062f\u06c1 (\u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633 \u06cc\u0627 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0642\u0633\u0645) \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba <code>ProductCard<\/code> \u0645\u062c\u06be\u06d2 \u06a9\u0627\u0631\u0679 \u0645\u06cc\u06ba \u067e\u0631\u0648\u0688\u06a9\u0679\u0633 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06a9\u06d2 \u0679\u06cc\u0628 \u067e\u0631 \u0631\u062f\u0639\u0645\u0644 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0686\u0627\u06c1\u062a\u0627 \u06a9\u06c1 \u06a9\u0627\u0631\u0688 \u062e\u0648\u062f \u06cc\u06c1 \u062c\u0627\u0646 \u0644\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 REST API \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627\u060c \u0645\u0642\u0627\u0645\u06cc \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0631 \u0644\u06a9\u06be\u0646\u0627\u060c \u06cc\u0627 \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u06a9\u0646\u0633\u0648\u0644 \u067e\u0631 \u067e\u0631\u0646\u0679 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">abstract class CartWriter {\n  Future<void> add(String productId);\n}\n\nclass ApiCartWriter implements CartWriter {\n  final Dio client;\n  ApiCartWriter(this.client);\n\n  @override\n  Future<void> add(String productId) async {\n    await client.post('\/cart\/items', data: {'productId': productId});\n  }\n}\n\nclass InMemoryCartWriter implements CartWriter {\n  final List<string> items = [];\n\n  @override\n  Future<void> add(String productId) async {\n    items.add(productId);\n  }\n}\n<\/void><\/string><\/void><\/void><\/code><\/pre>\n<p>\u0627\u0648\u0631 \u0648\u06cc\u062c\u0679 \u0635\u0631\u0641 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u0633\u06d2 \u0628\u0627\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">class AddToCartButton extends StatelessWidget {\n  final String productId;\n  final CartWriter cartWriter;\n\n  const AddToCartButton({\n    super.key,\n    required this.productId,\n    required this.cartWriter,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    return ElevatedButton(\n      onPressed: () => cartWriter.add(productId),\n      child: const Text('Add to cart'),\n    );\n  }\n}\n<\/code><\/pre>\n<p><code>abstract class CartWriter<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u062c\u0691\u0646\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>add(String productId)<\/code>\u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \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 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06c1\u06d2\u060c \u067e\u0686\u06be\u0644\u06d2 \u062d\u0635\u06d2 \u0633\u06d2 \u0645\u0627\u062f\u0651\u06c1 \u06a9\u0627\u0631\u06cc \u06a9\u0627 \u0627\u0635\u0648\u0644 \u0646\u06c1\u06cc\u06ba\u060c \u0644\u0641\u0638\u06cc \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0644\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>ApiCartWriter<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>Dio<\/code>\u0645\u0642\u0628\u0648\u0644 HTTP \u06a9\u0644\u0627\u0626\u0646\u0679 \u067e\u06cc\u06a9\u062c\u0632 <code>import 'package:dio\/dio.dart';<\/code> \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0627\u0648\u067e\u0631\u06cc \u062d\u0635\u06d2 \u0645\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4 \u06cc\u06c1 \u0646\u06cc\u0679 \u0648\u0631\u06a9\u0646\u06af \u06a9\u06cc \u062a\u0645\u0627\u0645 \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u0633 \u06a9\u0644\u0627\u0633 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u062e\u062a\u062a\u0627\u0645\u06cc \u0646\u0642\u0637\u06c1 URL \u06cc\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u0634\u06a9\u0644 \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>InMemoryCartWriter<\/code> \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679 \u062c\u0648 \u0627\u0633\u06cc \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062c\u0627\u0646\u0686\u060c \u067e\u06cc\u0634 \u0646\u0638\u0627\u0631\u06c1\u060c \u06cc\u0627 \u0622\u0641 \u0644\u0627\u0626\u0646 \u0688\u06cc\u0645\u0648 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0641\u06cc\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u06a9\u0648\u0626\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc Dio \u06cc\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p><code>AddToCartButton<\/code>    \u062e\u0644\u0644 <code>CartWriter<\/code> \u062e\u0648\u062f \u06a9\u0648 \u0627\u0646\u0633\u0679\u06cc\u0679\u06cc\u0648\u0679 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2\u06d4 \u0627\u0633\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06cc\u06c1 \u0648\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06c1\u06d2 \u062c\u0648 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u0648 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631\u0622\u0645\u062f \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0648\u06cc\u062c\u06cc\u0679 \u062e\u0648\u062f \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0627\u06c1\u0631 \u0633\u06d2 \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u06af\u0632\u0627\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0646\u0639\u0627\u0645 \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u0648\u0642\u0641 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0628 \u0622\u067e \u0648\u06cc\u062c\u06cc\u0679 \u0679\u06cc\u0633\u0679 \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u067e\u0627\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>InMemoryCartWriter<\/code> \u0627\u0648\u0631 \u06cc\u06c1 \u062f\u0639\u0648\u06cc\u0670 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1: <code>cartWriter.items<\/code> \u0627\u0633 \u0645\u06cc\u06ba \u0635\u062d\u06cc\u062d \u067e\u0631\u0648\u0688\u06a9\u0679 \u06c1\u06d2\u060c \u06a9\u0648\u0626\u06cc \u0641\u0631\u0636\u06cc \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06cc\u0627 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0627\u0633\u0679\u0628\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/09\/1789332113_264_\u0641\u0644\u0679\u0631-\u0645\u06cc\u06ba-\u0644\u06cc\u06af\u0648-\u0641\u0646-\u062a\u0639\u0645\u06cc\u0631-\u06a9\u0648-\u06a9\u06cc\u0633\u06d2-\u0646\u0627\u0641\u0630-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0648 CartWriter \u062e\u0644\u0627\u0635\u06c1 \u06a9\u0644\u0627\u0633 \u067e\u0631 \u0645\u0628\u0646\u06cc AddToCartButton \u062f\u06a9\u06be\u0627 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u06cc\u06a9 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 ApiCartWriter \u0627\u0648\u0631 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0679\u06cc\u0633\u0679\u0646\u06af \u06a9\u06d2 \u0644\u06cc\u06d2 InMemoryCartWriter \u0633\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-lego-at-the-folder-level\">\u0641\u0648\u0644\u0688\u0631 \u06a9\u06cc \u0633\u0637\u062d \u067e\u0631 LEGO<\/h2>\n<p>\u0627\u06af\u0631 \u06c1\u0645 \u06cc\u06c1 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0627\u0646\u0641\u0631\u0627\u062f\u06cc \u06a9\u0644\u0627\u0633\u0648\u06ba \u06a9\u0648 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0648\u06c1\u06cc \u0645\u0646\u0637\u0642 \u0627\u0633 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0641\u0648\u0644\u0688\u0631\u0632 \u06a9\u0648 \u06a9\u0633 \u0637\u0631\u062d \u0645\u0646\u0638\u0645 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u063a\u0644\u0637\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u0627 \u06c1\u06d2\u06d4 <code>screens<\/code> \u0641\u0648\u0644\u0688\u0631\u060c <code>widgets<\/code> \u0641\u0648\u0644\u0688\u0631 \u0627\u0648\u0631 <code>services<\/code> \u0641\u0648\u0644\u0688\u0631\u0632 \u0633\u0627\u062a\u06be \u0633\u0627\u062a\u06be \u0628\u06cc\u0679\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0627\u0641 \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0644\u06a9\u0644 \u0628\u0631\u0639\u06a9\u0633 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0644\u06cc\u06af\u0648 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0634\u0627\u067e\u0646\u06af \u06a9\u0627\u0631\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0633\u0645\u062c\u06be\u0646\u06d2 \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0646 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0641\u0648\u0644\u0688\u0631\u0632 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u06be\u0644\u0627\u0646\u06af \u0644\u06af\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0634\u0627\u067e\u0646\u06af \u06a9\u0627\u0631\u0679 \u0633\u0631\u0648\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u06a9\u0686\u06be \u0646\u06a9\u0627\u0644\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0648\u0627\u0642\u0639\u06cc \u062e\u0648\u062f \u0645\u062e\u062a\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c LEGO \u06a9\u06d2 \u0645\u0648\u0627\u0641\u0642 \u0648\u0631\u0698\u0646 \u06a9\u0648 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0627\u0633 \u06a9\u06cc \u0627\u067e\u0646\u06cc \u0627\u06cc\u0646\u0679 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u06c1\u0631 \u0648\u06c1 \u0686\u06cc\u0632 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0627\u0633\u06d2 \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u0631\u0641 \u0648\u06c1\u06cc \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0686\u06be\u0648 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">lib\/\n  features\/\n    product\/\n      product.dart          <- \"barrel\" file: the public stud\n      src\/\n        widgets\/\n          product_card.dart\n          product_thumbnail.dart\n        services\/\n          cart_writer.dart\n        models\/\n          product.dart\n    cart\/\n      cart.dart\n      src\/\n        widgets\/\n          cart_item.dart\n        services\/\n          cart_repository.dart\n  core\/\n    theme\/\n    routing\/\n    network\/\n<\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u06a9\u0644\u06cc\u062f\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u06c1\u06cc\u06ba: <code>product.dart<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u06c1\u06d2 \u062c\u0648 \u0635\u0631\u0641 \u062f\u0648\u0633\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/product.dart\nlibrary product;\n\nexport 'src\/widgets\/product_card.dart';\nexport 'src\/models\/product.dart';\n\/\/ note: cart_writer.dart is intentionally NOT exported.\n\/\/ it's an internal implementation detail of this feature.\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>library product;<\/code> \u0644\u0627\u0626\u0646 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u067e \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u067e\u0631\u0648\u0688\u06a9\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06d2 \u0627\u0646\u062f\u0631\u0627\u062c \u06a9\u06d2 \u0646\u0642\u0637\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u0645 \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0635\u0648\u0644 \u06c1\u06d2\u060c \u0628\u0630\u0627\u062a \u062e\u0648\u062f \u06a9\u0648\u0626\u06cc \u0633\u062e\u062a \u062d\u062f \u0646\u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>export<\/code> \u0628\u06cc\u0627\u0646 \u0645\u0646\u062a\u062e\u0628 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0628\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062c\u0648 \u0641\u0627\u0626\u0644\u06cc\u06ba \u06cc\u06c1\u0627\u06ba \u062f\u0631\u062c \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u0627\u0646 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>cart_writer.dart<\/code>\u062e\u0635\u0648\u0635\u06cc\u062a \u0646\u062c\u06cc \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u06cc\u06af\u0631 \u0627\u0641\u0639\u0627\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>import 'package:app\/features\/product\/product.dart';<\/code> \u0622\u067e \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 LEGO \u06a9\u06d2 \u062d\u0642\u06cc\u0642\u06cc \u0622\u0626\u06cc\u0688\u06cc\u0627 \u06a9\u06cc \u062f\u0631\u0633\u062a \u0639\u06a9\u0627\u0633\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>src\/<\/code> \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u06d2 \u0627\u0646\u062f\u0631\u060c \u0688\u06be\u0644\u06d2 \u06c1\u0648\u0626\u06d2 \u067e\u0644\u0627\u0633\u0679\u06a9\u060c \u0628\u06cc\u0631\u0644 \u06a9\u06d2 \u0688\u06be\u06cc\u0631 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0648\u0627\u062d\u062f \u0633\u0637\u062d \u06c1\u06d2 \u062c\u0633\u06d2 \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679\u06cc\u06ba \u0686\u06be\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0627\u0633 \u062d\u062f \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>analysis_options.yaml<\/code> \u0644\u0646\u0679\u0646\u06af \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06cc \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0633\u0627\u062a\u06be\u060c \u06cc\u0627 \u0635\u0631\u0641 \u06a9\u0648\u0688 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u06a9\u06d2 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2: \u0627\u0646\u062f\u0631 \u06a9\u0648\u0626\u06cc \u0641\u0627\u0626\u0644\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 <code>features\/cart\/src\/<\/code> \u0627\u0633\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u06c1\u0648\u06af\u0627\u06d4 <code>src\/<\/code> \u0641\u0627\u0626\u0644 \u06a9\u0627 \u0645\u0627\u062e\u0630 <code>features\/product\/<\/code>. \u0627\u06af\u0631 \u06a9\u0627\u0631\u0679 \u06a9\u0648 \u0648\u0627\u0642\u0639\u06cc \u067e\u0631\u0648\u0688\u06a9\u0679 \u0633\u06d2 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648 \u062a\u0648 \u0627\u0633\u06d2 \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u0645\u0644 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>product.dart<\/code>\u062f\u0627\u062e\u0644\u06c1 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062a\u0631\u062a\u06cc\u0628 \u0646\u06c1 \u062f\u06cc\u06ba\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/09\/1789332113_19_\u0641\u0644\u0679\u0631-\u0645\u06cc\u06ba-\u0644\u06cc\u06af\u0648-\u0641\u0646-\u062a\u0639\u0645\u06cc\u0631-\u06a9\u0648-\u06a9\u06cc\u0633\u06d2-\u0646\u0627\u0641\u0630-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0627\u06cc\u06a9 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u0644 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0633 \u0645\u06cc\u06ba \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0633 \u0637\u0631\u062d \u0627\u06cc\u06a9 \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u062c\u06cc \u0627\u0646\u0679\u0631\u0646\u0644\u0632 \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u062d\u0627\u0635\u0644 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0646\u0641\u0627\u0630 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0686\u06be\u067e\u0627\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0639\u0648\u0627\u0645\u06cc API \u06a9\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-contracts-between-modules-repositories-and-service-locators\">\u0627\u0646\u0679\u0631 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679\u0633: \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc\u0632 \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631<\/h2>\n<p>\u0641\u0648\u0644\u0688\u0631 \u06a9\u06cc \u062d\u062f\u0648\u062f \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u0627\u0646\u062f\u0631 \u06a9\u06cc \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062d\u0642\u06cc\u0642\u06cc \u0627\u06cc\u067e\u0633 \u06a9\u0648 \u0627\u0646 \u062d\u062f\u0648\u062f \u0645\u06cc\u06ba \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2\u06d4 \u0645\u062b\u0627\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u062e\u0631\u06cc\u062f\u0627\u0631\u06cc \u06a9\u06cc \u0679\u0648\u06a9\u0631\u06cc \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u067e\u0631\u0648\u0688\u06a9\u0679 \u0641\u06cc\u0686\u0631 \u06a9\u06cc \u0645\u062e\u0635\u0648\u0635 \u0633\u0631\u0648\u0633 \u06a9\u0644\u0627\u0633 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0642\u06cc\u0645\u062a\u0648\u06ba \u06a9\u0648 \u0628\u0627\u0632\u06cc\u0627\u0641\u062a \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1 \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u067e\u06cc\u0679\u0631\u0646 \u0627\u0648\u0631 \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u0622\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u0639\u0627\u06c1\u062f\u06c1 \u062f\u0648 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0645\u0634\u062a\u0631\u06a9\u06c1\u060c \u063a\u06cc\u0631 \u062c\u0627\u0646\u0628\u062f\u0627\u0631 \u0645\u0642\u0627\u0645 \u067e\u0631 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/core\/contracts\/product_lookup.dart\nabstract class ProductLookup {\n  Future<double> priceOf(String productId);\n}\n<\/double><\/code><\/pre>\n<p>\u0645\u0635\u0646\u0648\u0639\u0627\u062a \u06a9\u06cc \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062d\u0642\u06cc\u0642\u06cc \u062f\u0646\u06cc\u0627 \u06a9\u0627 \u0646\u0641\u0627\u0630 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/src\/services\/product_repository.dart\nimport 'package:app\/core\/contracts\/product_lookup.dart';\n\nclass ProductRepository implements ProductLookup {\n  final Map<string double=\"\"> _cachedPrices;\n  ProductRepository(this._cachedPrices);\n\n  @override\n  Future<double> priceOf(String productId) async {\n    return _cachedPrices[productId] ?? 0;\n  }\n}\n<\/double><\/string><\/code><\/pre>\n<p>\u0634\u0627\u067e\u0646\u06af \u06a9\u0627\u0631\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u0635\u0631\u0641 \u0627\u0633 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2: <code>ProductLookup<\/code>\u0627\u0635\u0644 \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0648\u0691\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0631\u062c\u0633\u0679\u0631\u06cc \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>get_it<\/code> \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0639\u06cc\u0627\u0631\u06cc \u067e\u06cc\u06a9\u062c \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/core\/di\/service_locator.dart\nimport 'package:get_it\/get_it.dart';\nimport 'package:app\/core\/contracts\/product_lookup.dart';\nimport 'package:app\/features\/product\/src\/services\/product_repository.dart';\n\nfinal getIt = GetIt.instance;\n\nvoid setupServiceLocator() {\n  getIt.registerLazySingleton<productlookup>(\n    () => ProductRepository({'p1': 19.99, 'p2': 4.50}),\n  );\n}\n<\/productlookup><\/code><\/pre>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/cart\/src\/services\/cart_calculator.dart\nimport 'package:app\/core\/contracts\/product_lookup.dart';\nimport 'package:app\/core\/di\/service_locator.dart';\n\nclass CartCalculator {\n  final ProductLookup _productLookup;\n\n  CartCalculator({ProductLookup? productLookup})\n      : _productLookup = productLookup ?? getIt<productlookup>();\n\n  Future<double> total(List<string> productIds) async {\n    double sum = 0;\n    for (final id in productIds) {\n      sum += await _productLookup.priceOf(id);\n    }\n    return sum;\n  }\n}\n<\/string><\/double><\/productlookup><\/code><\/pre>\n<p>\u0644\u0627\u0626\u0646 <code>import 'package:get_it\/get_it.dart';<\/code> \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u067e\u06cc\u06a9\u062c \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>GetIt.instance<\/code> \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0648\u0627\u062d\u062f \u0639\u0627\u0644\u0645\u06cc \u0631\u062c\u0633\u0679\u0631\u06cc (\u0633\u0646\u06af\u0644\u0679\u0646) \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0641\u0648\u0646 \u06a9\u0627\u0644 <code>registerLazySingleton<productlookup>(...)<\/productlookup><\/code> \u062c\u0628 \u06a9\u0648\u0626\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0648\u06c1 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u0633\u06d2 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba: <code>ProductLookup<\/code>\u0645\u062c\u06be\u06d2 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0627\u0646 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06d2 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>ProductRepository<\/code>. \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0627\u0633 \u0648\u0642\u062a \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2 \u062c\u0628 \u067e\u06c1\u0644\u06cc \u0628\u0627\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1\u0627\u06ba \u0627\u06c1\u0645 \u0686\u06cc\u0632 \u0639\u0627\u0645 \u0642\u0633\u0645 \u06a9\u0627 \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0631\u062c\u0633\u0679\u0631\u06cc \u06a9\u06cc \u0686\u0627\u0628\u06cc\u0627\u06ba \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0633\u06d2 \u0646\u06c1\u06cc\u06ba \u0628\u0644\u06a9\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u0633\u06d2 \u0637\u06d2 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>ProductRepository<\/code>. \u06cc\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u06a9\u06d2 \u062a\u062d\u062a \u0646\u0641\u0627\u0630 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06c1\u06d2\u06d4<\/p>\n<p><code>setupServiceLocator()<\/code>    \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>main()<\/code>\u067e\u06c1\u0644\u06d2 <code>runApp()<\/code>\u06cc\u06c1 \u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u062d\u062f \u0627\u0633\u0645\u0628\u0644\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u06cc \u062a\u0645\u0627\u0645 \u0686\u06cc\u0632\u0648\u06ba \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062c\u0627\u0646\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u062d\u062f \u062c\u06af\u06c1\u06d4<\/p>\n<p><code>CartCalculator<\/code>\u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631 \u0627\u062e\u062a\u06cc\u0627\u0631\u0627\u062a \u06a9\u0648 \u0642\u0628\u0648\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>ProductLookup<\/code>\u0644\u0648\u06a9\u06cc\u0679\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0633\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062f\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0688\u06cc\u0641\u0627\u0644\u0679 \u067e\u0631 \u0633\u06cc\u0679 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4 \u06cc\u06c1 \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u067e\u06cc\u0631\u0627\u0645\u06cc\u0679\u0631 \u0686\u0627\u0644 \u0622\u067e \u06a9\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0622\u0633\u0627\u0646\u06cc \u0633\u06d2 \u0642\u0627\u0628\u0644 \u0622\u0632\u0645\u0627\u0626\u0634 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0645\u062a\u062d\u0627\u0646 \u062c\u0639\u0644\u06cc \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0627\u0633 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>ProductLookup<\/code> \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 <code>getIt<\/code>.<\/p>\n<p>\u062a\u0648\u062c\u06c1 \u0641\u0631\u0645\u0627\u0626\u06cc\u06ba <code>cart_calculator.dart<\/code> \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u06a9\u0686\u06be \u062f\u0631\u0622\u0645\u062f \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>features\/product\/src\/<\/code>. \u0635\u0631\u0641 \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u0627\u0648\u0631 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u0635\u0644 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u06a9\u0627\u0644\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u067e\u0633 \u06a9\u0648 \u0628\u062f\u0644 \u06a9\u0631\u060c \u0634\u0631\u0648\u0639 \u0633\u06d2 \u06c1\u06cc \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0644\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>cart_calculator.dart<\/code> \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u062a\u0631\u0645\u06cc\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>ProductRepository<\/code> \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 <code>ProductLookup<\/code>.<\/p>\n<p>\u067e\u06cc\u0645\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u062d\u0627\u0638 \u0633\u06d2 \u06cc\u06c1 \u0644\u06cc\u06af\u0648 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u06cc \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0686\u0627\u0644 \u06c1\u06d2\u06d4 \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0627\u06cc\u06a9 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc\u060c \u063a\u06cc\u0631 \u062c\u0627\u0646\u0628\u062f\u0627\u0631 \u0632\u0648\u0646 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4 <code>core\/contracts\/<\/code>\u06a9\u0646\u06a9\u0631\u06cc\u0679 \u06a9\u06cc \u0627\u06cc\u0646\u0679 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u0627\u062d\u062f \u0648\u0627\u0626\u0631\u0646\u06af \u067e\u0648\u0627\u0626\u0646\u0679 (\u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631) \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0648\u0627\u062d\u062f \u062c\u06af\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-composing-whole-features-like-a-lego-set\">LEGO \u0633\u06cc\u0679 \u06a9\u06cc \u0637\u0631\u062d \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0641\u0639\u0627\u0644<\/h2>\n<p>\u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0633\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0622\u062e\u0631\u06cc \u0645\u0631\u062d\u0644\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0648\u0631\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u067e\u0644\u06af \u0627\u06cc\u0628\u0644 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u0627 \u062c\u0627\u0626\u06d2 \u062c\u0633\u06d2 \u0627\u06cc\u067e \u0634\u06cc\u0644 \u0627\u0633\u0679\u0627\u0631\u0679 \u0627\u067e \u067e\u0631 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u06cc \u0637\u0631\u062d \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0637\u0631\u062d LEGO \u06c1\u062f\u0627\u06cc\u0627\u062a \u06a9\u062a\u0627\u0628\u0686\u06c1 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0648\u0646 \u0633\u06cc \u0630\u06cc\u0644\u06cc \u0627\u0633\u0645\u0628\u0644\u06cc \u0628\u06cc\u0633 \u067e\u0644\u06cc\u0679 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/core\/feature_module.dart\nimport 'package:go_router\/go_router.dart';\n\nabstract class FeatureModule {\n  List<routebase> get routes;\n  void registerDependencies();\n}\n<\/routebase><\/code><\/pre>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/cart\/cart_module.dart\nimport 'package:go_router\/go_router.dart';\nimport 'package:app\/core\/feature_module.dart';\nimport 'package:app\/core\/di\/service_locator.dart';\nimport 'src\/screens\/cart_screen.dart';\nimport 'src\/services\/cart_calculator.dart';\n\nclass CartModule implements FeatureModule {\n  @override\n  void registerDependencies() {\n    getIt.registerFactory<cartcalculator>(() => CartCalculator());\n  }\n\n  @override\n  List<routebase> get routes => [\n        GoRoute(path: '\/cart', builder: (context, state) => const CartScreen()),\n      ];\n}\n<\/routebase><\/cartcalculator><\/code><\/pre>\n<pre><code class=\"language-dart\">\/\/ lib\/app.dart\nimport 'package:flutter\/material.dart';\nimport 'package:go_router\/go_router.dart';\nimport 'features\/cart\/cart_module.dart';\nimport 'features\/product\/product_module.dart';\nimport 'core\/feature_module.dart';\n\nfinal List<featuremodule> modules = [\n  ProductModule(),\n  CartModule(),\n];\n\nGoRouter buildRouter() {\n  for (final module in modules) {\n    module.registerDependencies();\n  }\n  return GoRouter(\n    routes: modules.expand((m) => m.routes).toList(),\n  );\n}\n\nclass App extends StatelessWidget {\n  const App({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp.router(routerConfig: buildRouter());\n  }\n}\n<\/featuremodule><\/code><\/pre>\n<p><code>FeatureModule<\/code>    \u06cc\u06c1 \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0627\u0639\u0644\u06cc\u0670 \u0633\u0637\u062d \u06a9\u0627 \u0627\u0633\u0679\u0688 \u06c1\u06d2\u06d4 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0641\u0646\u06a9\u0634\u0646 \u062c\u0633\u06d2 \u0622\u067e \u0634\u06cc\u0644 \u0633\u06d2 \u062c\u0648\u0691\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0633\u06d2 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2: <code>routes<\/code>\u0627\u0633 \u0633\u06d2 \u0645\u0631\u0627\u062f \u0648\u06c1 \u0633\u06a9\u0631\u06cc\u0646 \u06c1\u06d2 \u062c\u0648 \u0628\u06d2 \u0646\u0642\u0627\u0628 \u06c1\u06d2\u060c <code>registerDependencies()<\/code>\u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u0633\u06d2 \u062c\u0691\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p><code>CartModule<\/code>    \u0627\u0633 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 <code>registerDependencies()<\/code> \u06cc\u06c1 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>CartCalculator<\/code> \u0641\u06cc\u06a9\u0679\u0631\u06cc \u06a9\u0648\u06d4 \u0633\u0646\u06af\u0644\u0679\u0646 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u062c\u0628 \u0628\u06be\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0645\u062b\u0627\u0644 \u06c1\u06d2\u06d4 <code>ProductRepository<\/code> \u067e\u0686\u06be\u0644\u06d2 \u062d\u0635\u06d2 \u0633\u06d2\u06d4 \u0631\u062c\u0633\u0679\u0631\u06cc\u0634\u0646 \u06a9\u0627 \u0627\u0646\u062f\u0627\u0632 \u0627\u06cc\u06a9 \u0641\u06cc\u0635\u0644\u06c1 \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0631\u0622\u0645\u062f <code>package:go_router\/go_router.dart<\/code> \u0645\u0644\u062a\u0627 \u06c1\u06d2 <code>go_router<\/code> \u067e\u06cc\u06a9\u062c \u06cc\u06c1 \u06af\u0631\u062f\u0634 <code>RouteBase<\/code> \u0679\u0627\u0633\u06a9 \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u0627\u0633\u0679\u06cc\u06a9 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>GoRoute(path: ..., builder: ...)<\/code> \u06a9\u0633\u06cc \u0631\u0627\u0633\u062a\u06d2 \u06a9\u0627 \u0646\u0642\u0634\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u06cc\u0648 \u0622\u0631 \u0627\u06cc\u0644\u060c \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631\u06d4 <code>app.dart<\/code> \u06cc\u06c1 \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06cc \u0627\u0635\u0644 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u062c\u0691 \u06c1\u06d2\u06d4 \u06a9\u06c1 <code>modules<\/code> \u0641\u06c1\u0631\u0633\u062a \u0627\u06cc\u06a9 \u06c1\u062f\u0627\u06cc\u0627\u062a\u06cc \u06a9\u062a\u0627\u0628\u0686\u06c1 \u06c1\u06d2 \u0627\u0648\u0631 \u067e\u0648\u0631\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0648\u0627\u062d\u062f \u0641\u0627\u0626\u0644 \u06c1\u06d2 \u062c\u0648 \u062c\u0627\u0646\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u062a\u0645\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u06ba\u06d4 \u06c1\u0631 \u0645\u0627\u0688\u06cc\u0648\u0644 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0639\u0627\u062f\u06c1 \u06a9\u0631\u06cc\u06ba\u060c \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u06cc\u06ba \u0686\u067e\u0679\u0627 \u06a9\u0631\u06cc\u06ba\u06d4 <code>GoRouter<\/code>.<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0646\u0626\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u0644\u06a9\u06be\u06cc\u06ba\u06d4 <code>FeatureModule<\/code> \u0646\u0627\u0641\u0630 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 <code>modules<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0641\u06c1\u0631\u0633\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0641\u06cc\u0686\u0631 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0686\u06be\u0648\u0627 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0644\u06cc\u06af\u0648 \u06a9\u0627 \u0648\u0639\u062f\u06c1 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u067e\u0648\u0631\u0627 \u06c1\u0648\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0622\u067e \u0627\u067e\u0646\u06d2 \u0633\u06cc\u0679 \u0645\u06cc\u06ba \u0646\u0626\u06cc \u200b\u200b\u0627\u06cc\u0646\u0679\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0628\u0627\u06a9\u0633 \u0645\u06cc\u06ba \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0688\u06be\u0627\u0644\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/09\/1789332113_152_\u0641\u0644\u0679\u0631-\u0645\u06cc\u06ba-\u0644\u06cc\u06af\u0648-\u0641\u0646-\u062a\u0639\u0645\u06cc\u0631-\u06a9\u0648-\u06a9\u06cc\u0633\u06d2-\u0646\u0627\u0641\u0630-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0627\u06cc\u06a9 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0648 \u0627\u06cc\u06a9 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0627\u0646\u0679\u0631\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u0627\u0624\u0679\u0631 \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0628\u06a9\u06c1 \u0627\u0633\u0679\u06cc\u0646\u0688 \u0627\u0633\u0679\u0648\u0646 \u0641\u0646\u06a9\u0634\u0646 \u0645\u0627\u0688\u06cc\u0648\u0644\u0632 \u0627\u0648\u0631 \u0645\u0633\u062a\u0642\u0628\u0644 \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0645\u0627\u0688\u06cc\u0648\u0644\u0632 \u0633\u06d2 \u0631\u0648\u0679\u0633 \u0628\u06be\u06cc \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u06cc\u06c1 \u0644\u06cc\u06af\u0648 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06c1\u06d2\u06d4 \u0648\u062c\u06cc\u0679\u0633 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06a9\u0644\u0627\u0633\u0632 \u06a9\u0627 \u0627\u0646\u062d\u0635\u0627\u0631 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u067e\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0641\u0648\u0644\u0688\u0631\u0632 \u062d\u062f\u0648\u062f \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0645\u0627\u0688\u06cc\u0648\u0644 \u0644\u0627\u0626\u0646\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u0644\u0648\u06a9\u06cc\u0679\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0645\u062c\u0645\u0648\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0641\u0639\u0627\u0644\u06cc\u062a \u0627\u06cc\u067e \u0634\u06cc\u0644 \u0645\u06cc\u06ba \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>FeatureModule<\/code> \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0627\u0628 \u06c1\u0645 \u0635\u0627\u0641 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0631\u0627\u0628\u0631\u06cc \u06a9\u06cc \u0628\u0646\u06cc\u0627\u062f \u067e\u0631 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-clean-architecture-crash-course\">\u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0631\u06cc\u0634 \u06a9\u0648\u0631\u0633<\/h2>\n<p>\u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u060c \u062c\u0633\u06d2 \u0631\u0627\u0628\u0631\u0679 \u0633\u06cc. \u0645\u0627\u0631\u0679\u0646 \u0646\u06d2 \u0645\u0642\u0628\u0648\u0644 \u0628\u0646\u0627\u06cc\u0627\u060c \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635 \u062a\u06c1\u06c1 \u0628\u0646\u062f\u06cc \u06a9\u06cc \u0627\u0633\u06a9\u06cc\u0645 \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06cc \u0627\u0635\u0648\u0644 \u06a9\u06d2 \u06af\u0631\u062f \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u06a9\u06d2 \u0646\u0627\u0645 \u0633\u06d2 \u062c\u0627\u0646\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0627\u062e\u0630 \u06a9\u0648\u0688 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0635\u0631\u0641 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc\u060c \u06cc\u0639\u0646\u06cc \u0627\u0639\u0644\u06cc\u0670 \u0633\u0637\u062d \u06a9\u06cc \u067e\u0627\u0644\u06cc\u0633\u06cc\u0648\u06ba \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u062a\u06c1\u06c1 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0686\u06cc\u0632 \u0628\u06cc\u0631\u0648\u0646\u06cc \u062a\u06c1\u06c1 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646 \u0633\u06a9\u062a\u06cc\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/09\/1789332113_332_\u0641\u0644\u0679\u0631-\u0645\u06cc\u06ba-\u0644\u06cc\u06af\u0648-\u0641\u0646-\u062a\u0639\u0645\u06cc\u0631-\u06a9\u0648-\u06a9\u06cc\u0633\u06d2-\u0646\u0627\u0641\u0630-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u06cc\u06c1 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u0644 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u067e\u0631\u06cc\u0632\u0646\u0679\u06cc\u0634\u0646 \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0644\u06cc\u0626\u0631\u0632 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u0648\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0631\u06a9\u0632\u06cc \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<p>\u0622\u0626\u06cc\u06d2 \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u062f\u0627\u0631\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u060c \u0645\u0634\u062a\u0631\u06a9\u06c1 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u0627\u0634\u06cc\u0627\u0621\u060c \u0627\u0648\u0631 \u062a\u06cc\u0646\u0648\u06ba \u067e\u0631\u062a\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646 (\u0622\u0626\u06cc \u0688\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u067e\u0631\u0648\u0688\u06a9\u0679 \u062d\u0627\u0635\u0644 \u06a9\u0631\u06cc\u06ba) \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/domain\/entities\/product.dart\nclass Product {\n  final String id;\n  final String name;\n  final double price;\n\n  const Product({required this.id, required this.name, required this.price});\n}\n<\/code><\/pre>\n<p>\u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u067e\u0648\u0631\u0679\u0633 \u06c1\u06cc\u06ba\u060c \u062c\u0648 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u0688\u0648\u0645\u06cc\u0646 \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0644\u06cc\u06a9\u0646 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/domain\/repositories\/product_repository.dart\nimport '..\/entities\/product.dart';\n\nabstract class ProductRepository {\n  Future<product> getById(String id);\n}\n<\/product><\/code><\/pre>\n<p>\u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0627 \u0645\u0639\u0627\u0645\u0644\u06c1 \u067e\u06be\u0631 \u0627\u06cc\u06a9 \u0646\u0627\u0645\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/domain\/usecases\/get_product.dart\nimport '..\/entities\/product.dart';\nimport '..\/repositories\/product_repository.dart';\n\nclass GetProduct {\n  final ProductRepository repository;\n  GetProduct(this.repository);\n\n  Future<product> call(String id) => repository.getById(id);\n}\n<\/product><\/code><\/pre>\n<p>\u0688\u06cc\u0679\u0627 \u067e\u0631\u062a \u0627\u0628 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0648 \u0688\u0648\u0645\u06cc\u0646 \u06a9\u06cc \u067e\u0648\u0631\u0679\u0633 \u06a9\u0648 \u0645\u0637\u0645\u0626\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/data\/repositories\/product_repository_impl.dart\nimport 'package:app\/features\/product\/domain\/entities\/product.dart';\nimport 'package:app\/features\/product\/domain\/repositories\/product_repository.dart';\nimport '..\/datasources\/product_remote_data_source.dart';\n\nclass ProductRepositoryImpl implements ProductRepository {\n  final ProductRemoteDataSource remoteDataSource;\n  ProductRepositoryImpl(this.remoteDataSource);\n\n  @override\n  Future<product> getById(String id) async {\n    final dto = await remoteDataSource.fetchProduct(id);\n    return Product(id: dto.id, name: dto.name, price: dto.price);\n  }\n}\n<\/product><\/code><\/pre>\n<p>\u0627\u0648\u0631 \u06cc\u06c1 \u0631\u06cc\u0645\u0648\u0679 \u0688\u06cc\u0679\u0627 \u0633\u0648\u0631\u0633 \u06c1\u06d2 \u062c\u0648 \u0627\u0635\u0644 HTTP \u06a9\u0627\u0644 \u0627\u0648\u0631 \u062e\u0627\u0645 JSON \u0641\u0627\u0631\u0645 \u06a9\u0627 \u0645\u0627\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/data\/datasources\/product_remote_data_source.dart\nimport 'package:dio\/dio.dart';\n\nclass ProductDto {\n  final String id;\n  final String name;\n  final double price;\n  ProductDto({required this.id, required this.name, required this.price});\n\n  factory ProductDto.fromJson(Map<string dynamic=\"\"> json) => ProductDto(\n        id: json['id'],\n        name: json['name'],\n        price: (json['price'] as num).toDouble(),\n      );\n}\n\nclass ProductRemoteDataSource {\n  final Dio client;\n  ProductRemoteDataSource(this.client);\n\n  Future<productdto> fetchProduct(String id) async {\n    final response = await client.get('\/products\/$id');\n    return ProductDto.fromJson(response.data);\n  }\n}\n<\/productdto><\/string><\/code><\/pre>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u067e\u0631\u06cc\u0632\u0646\u0679\u06cc\u0634\u0646 \u067e\u0631\u062a \u06a9\u06cc\u0648\u0628\u0679 \u06c1\u06d2\u060c \u062c\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/presentation\/cubit\/product_cubit.dart\nimport 'package:flutter_bloc\/flutter_bloc.dart';\nimport 'package:app\/features\/product\/domain\/entities\/product.dart';\nimport 'package:app\/features\/product\/domain\/usecases\/get_product.dart';\n\nsealed class ProductState {}\nclass ProductLoading extends ProductState {}\nclass ProductLoaded extends ProductState {\n  final Product product;\n  ProductLoaded(this.product);\n}\nclass ProductError extends ProductState {\n  final String message;\n  ProductError(this.message);\n}\n\nclass ProductCubit extends Cubit<productstate> {\n  final GetProduct getProduct;\n  ProductCubit(this.getProduct) : super(ProductLoading());\n\n  Future<void> load(String id) async {\n    emit(ProductLoading());\n    try {\n      final product = await getProduct(id);\n      emit(ProductLoaded(product));\n    } catch (e) {\n      emit(ProductError(e.toString()));\n    }\n  }\n}\n<\/void><\/productstate><\/code><\/pre>\n<p>\u0622\u0626\u06cc\u06d2 \u06c1\u0631 \u067e\u0631\u062a \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u0633\u06d2 \u062f\u06cc\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 <code>entities\/product.dart<\/code> \u06a9\u0648\u0626\u06cc \u062f\u0631\u0622\u0645\u062f\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u06a9\u0627 \u0648\u0627\u062d\u062f \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0627\u0635\u0648\u0644 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u0641\u0644\u0679\u0631\u060c \u0688\u06cc\u0648\u060c \u06cc\u0627 \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u062e\u0627\u0644\u0635 \u0688\u0627\u0631\u0679 \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0633\u06cc \u062a\u0631\u0645\u06cc\u0645 \u06a9\u06d2 \u06a9\u0645\u0627\u0646\u0688 \u0644\u0627\u0626\u0646 \u0679\u0648\u0644\u0632 \u06cc\u0627 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0645\u06cc\u06ba \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>repositories\/product_repository.dart<\/code>    \u067e\u0648\u0631\u0679 \u0627\u06cc\u06a9 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633 \u06c1\u06d2\u06d4 \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u0627\u0633 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 <code>getById<\/code>\u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u06cc \u0631\u0648\u062d \u06c1\u06d2\u06d4 <code>CartWriter<\/code> \u0627\u0648\u0631 <code>ProductLookup<\/code> \u067e\u0686\u06be\u0644\u06d2 \u062d\u0635\u06d2 \u0633\u06d2\u06d4 \u0633\u0628 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0646\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0644\u0679\u0646\u06d2 \u06a9\u06cc \u0627\u06cc\u062c\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u060c \u06cc\u06c1 \u0635\u0631\u0641 \u06c1\u0631 \u0633\u06cc\u0648\u0646 \u067e\u0631 \u0627\u0633\u06d2 \u0645\u0646\u0638\u0645 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>usecases\/get_product.dart<\/code>    \u0627\u06cc\u06a9 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u06a9\u0627\u0645 \u0645\u06a9\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>GetProduct<\/code> \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u0627 <code>call(String id)<\/code>\u0622\u067e \u0627\u0641\u0639\u0627\u0644 \u062c\u06cc\u0633\u06d2 \u0645\u062b\u0627\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>getProduct('p1')<\/code>. \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631 \u06c1\u06d2\u06d4 <code>ProductRepository<\/code> (\u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u06cc\u06a9 \u062e\u0644\u0627\u0635\u06c1 \u0628\u0646\u062f\u0631\u06af\u0627\u06c1)\u060c \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0679\u06be\u0648\u0633 \u0628\u0646\u062f\u0631\u06af\u0627\u06c1 \u0646\u06c1\u06cc\u06ba\u06d4 <code>ProductRepositoryImpl<\/code>.<\/p>\n<p><code>data\/datasources\/product_remote_data_source.dart<\/code>    \u0627\u067e\u0646\u06d2 <code>import 'package:dio\/dio.dart';<\/code> \u0648\u0627\u0626\u0631 \u0641\u0627\u0631\u0645\u06cc\u0679 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0645\u0639\u0644\u0648\u0645\u0627\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be <code>ProductDto.fromJson<\/code>. \u06cc\u06c1 \u0645\u06a9\u0645\u0644 \u0641\u0639\u0627\u0644\u06cc\u062a \u0648\u0627\u0644\u06cc \u0648\u0627\u062d\u062f \u0641\u0627\u0626\u0644 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0633\u0631\u0648\u0631 \u067e\u0631 \u062e\u0627\u0645 JSON \u06a9\u06cc\u0633\u0627 \u0644\u06af\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>data\/repositories\/product_repository_impl.dart<\/code>    \u0688\u0648\u0645\u06cc\u0646\u0632 \u06a9\u06cc \u0628\u0646\u062f\u0631\u06af\u0627\u06c1\u0648\u06ba \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u06a9\u06d2 \u0627\u0648\u0631 \u0634\u06a9\u0644\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u06a9\u06d2\u060c <code>ProductDto<\/code> \u0648\u0627\u067e\u0633\u06cc (\u0688\u06cc\u0679\u0627 \u0631\u06cc\u062c\u0646 \u06a9\u06cc \u0634\u06a9\u0644) \u0627\u0648\u0631 <code>Product<\/code> (\u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u06a9\u06cc \u0634\u06a9\u0644)\u06d4 \u06cc\u06c1 \u062a\u0628\u062f\u06cc\u0644\u06cc \u06a9\u0627 \u0645\u0631\u062d\u0644\u06c1 \u0688\u0648\u0645\u06cc\u0646 \u067e\u0631\u062a \u06a9\u0648 JSON \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>presentation\/cubit\/product_cubit.dart<\/code>    \u062f\u0631\u0622\u0645\u062f \u0634\u062f\u06c1 \u0633\u0627\u0645\u0627\u0646 <code>package:flutter_bloc\/flutter_bloc.dart<\/code> \u06a9\u06d2 \u0644\u06cc\u06d2 <code>Cubit<\/code>\u0627\u0648\u0631 \u0688\u0648\u0645\u06cc\u0646 \u0645\u06cc\u06ba <code>GetProduct<\/code> \u0627\u0648\u0631 <code>Product<\/code>\u0644\u06cc\u06a9\u0646 \u0633\u06d2 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba\u06d4 <code>data\/<\/code>. \u06a9\u06c1 <code>sealed class ProductState<\/code> \u062a\u06cc\u0646 \u0630\u06cc\u0644\u06cc \u0637\u0628\u0642\u0627\u062a (<code>ProductLoading<\/code>\u060c <code>ProductLoaded<\/code>\u0627\u0648\u0631 <code>ProductError<\/code>) \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062a\u0645\u0627\u0645 \u0645\u0645\u06a9\u0646\u06c1 UI \u0631\u06cc\u0627\u0633\u062a\u0648\u06ba \u06a9\u0627 \u0645\u0627\u0688\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0648\u06cc\u062c\u06cc\u0679 \u067e\u0631\u062a \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u0627\u0646\u062f\u0627\u0632\u06c1 \u0644\u06af\u0627\u0626\u06d2 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0645\u0644\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u0648 \u062c\u0648 \u0622\u067e\u0633 \u0645\u06cc\u06ba \u062c\u0648\u0691\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u06a9\u0645\u067e\u0648\u0632\u06cc\u0634\u0646 \u0631\u0648\u0679 \u06a9\u0627 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0648\u0631\u0698\u0646 \u06c1\u06d2 \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/product_injection.dart\nimport 'package:dio\/dio.dart';\nimport 'package:get_it\/get_it.dart';\nimport 'domain\/repositories\/product_repository.dart';\nimport 'domain\/usecases\/get_product.dart';\nimport 'data\/datasources\/product_remote_data_source.dart';\nimport 'data\/repositories\/product_repository_impl.dart';\n\nvoid registerProductFeature(GetIt getIt) {\n  getIt.registerLazySingleton(() => Dio());\n  getIt.registerLazySingleton(() => ProductRemoteDataSource(getIt<dio>()));\n  getIt.registerLazySingleton<productrepository>(\n    () => ProductRepositoryImpl(getIt<productremotedatasource>()),\n  );\n  getIt.registerFactory(() => GetProduct(getIt<productrepository>()));\n}\n<\/productrepository><\/productremotedatasource><\/productrepository><\/dio><\/code><\/pre>\n<p>\u06cc\u06c1 \u0641\u0627\u0626\u0644 \u0645\u06a9\u0645\u0644 \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0648\u0627\u062d\u062f \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u0622\u067e \u062a\u0645\u0627\u0645 \u067e\u0631\u062a\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062f\u06cc\u06a9\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba: \u0688\u0648\u0645\u06cc\u0646\u060c \u0688\u06cc\u0679\u0627\u060c \u06a9\u0646\u06a9\u0631\u06cc\u0679\u060c \u0648\u063a\u06cc\u0631\u06c1\u06d4 <code>Dio<\/code> \u06af\u0627\u06c1\u06a9 \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0648\u06c1\u06cc \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc \u06c1\u06d2\u06d4 <code>service_locator.dart<\/code> \u0627\u0648\u0631 <code>CartModule<\/code> \u06cc\u06c1 \u06af\u0632\u0634\u062a\u06c1 LEGO \u06a9\u06cc\u0633\u0632 \u0645\u06cc\u06ba \u0645\u0646\u0639\u0642\u062f \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2.<\/p>\n<h2 id=\"heading-lego-architecture-compared-with-clean-architecture\">\u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0628\u0645\u0642\u0627\u0628\u0644\u06c1 \u0644\u06cc\u06af\u0648 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631<\/h2>\n<p>\u0627\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0627\u0646 \u062f\u0648\u0646\u0648\u06ba \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\u0627\u062a \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0645\u0645\u0627\u062b\u0644\u062a \u0628\u06c1\u062a \u0648\u0627\u0636\u062d \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0627\u0644\u0679 \u067e\u0631 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u062f\u0648\u0646\u0648\u06ba \u0633\u0646\u06af\u0644 \u0648\u0627\u0626\u0631\u0646\u06af \u067e\u0648\u0627\u0626\u0646\u0679\u0633 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0641\u0631\u0642 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0627\u06cc\u06a9 \u062c\u0648\u0627\u0628\u0627\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>LEGO \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0648 \u062a\u0639\u0645\u06cc\u0631\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a \u0627\u0648\u0631 \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0646\u06d2 \u06cc\u0627 \u0641\u0644\u0633\u0641\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0639\u0645\u0627\u0631\u062a \u06a9\u06d2 \u0628\u0644\u0627\u06a9\u0633 \u062c\u06cc\u0633\u06d2 \u0648\u06cc\u062c\u0679\u060c \u062e\u062f\u0645\u0627\u062a\u060c \u06cc\u0627 \u067e\u0648\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0644 \u0645\u0627\u0688\u06cc\u0648\u0644\u0632 \u06a9\u0648 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u062c\u06c1\u0627\u06ba \u0628\u06be\u06cc \u0622\u067e \u0627\u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0648\u06c1\u0627\u06ba \u062d\u062f\u0648\u062f \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba: \u0641\u0648\u0644\u0688\u0631\u0632\u060c \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644\u0632\u060c \u0645\u0627\u0688\u06cc\u0648\u0644\u0631 \u06a9\u0646\u0679\u0631\u06cc\u06a9\u0679\u0633 \u0648\u063a\u06cc\u0631\u06c1 \u0645\u06cc\u06ba\u06d4 \u0622\u067e \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0627 \u0633\u0627\u0626\u0632 \u06cc\u0627 \u0637\u0648\u0644 \u0648 \u0639\u0631\u0636 \u0628\u06be\u06cc \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0645\u0642\u0635\u062f \u062a\u0628\u0627\u062f\u0644\u06c1 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0679\u06a9\u0691\u06d2 \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u067e\u0691\u0648\u0633\u06cc\u0648\u06ba \u06a9\u0648 \u0646\u0642\u0635\u0627\u0646 \u067e\u06c1\u0646\u0686\u0627\u0626\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>LEGO \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u06a9\u0645 \u0648\u06a9\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0631\u062c\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0644\u0679\u0631 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0628 \u0622\u067e \u0645\u0632\u06cc\u062f \u0628\u0639\u062f \u06a9\u06cc \u0633\u0637\u062d\u0648\u06ba \u06a9\u0648 \u0627\u067e\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0628\u062a\u062f\u0631\u06cc\u062c \u067e\u06be\u06cc\u0644\u062a\u0627 \u06c1\u06d2\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0648\u0627\u0626\u0644\u0631 \u067e\u0644\u06cc\u0679 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba \u062c\u062a\u0646\u0627 \u0622\u067e \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0646 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2 \u062c\u0646 \u06a9\u0648 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06cc \u0644\u0686\u06a9\u062f\u0627\u0631 \u062d\u062f\u0648\u062f\u060c \u0645\u062a\u0648\u0627\u0632\u06cc \u0622\u067e\u0631\u06cc\u0634\u0646\u0632\u060c \u0627\u0648\u0631 \u0628\u062a\u062f\u0631\u06cc\u062c \u0627\u067e\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u062e\u0637\u0631\u06c1 \u0627\u0633\u06d2 \u0635\u0631\u0641 \u0646\u0627\u0645 \u0633\u06d2 LEGO \u06a9\u06c1\u0646\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u0646\u0679\u06cc\u06ba \u062e\u0627\u0645\u0648\u0634\u06cc \u0633\u06d2 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u06c1\u0646\u0686 \u0631\u06c1\u06cc \u06c1\u06cc\u06ba\u060c \u062d\u0627\u0644\u0627\u0646\u06a9\u06c1 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u062f\u0648\u0633\u0631\u06cc \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0628\u0631\u0639\u06a9\u0633\u060c \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0627\u06cc\u06a9 \u0645\u062e\u0635\u0648\u0635\u060c \u0646\u0627\u0645\u06cc \u0644\u06cc\u0626\u0631\u0646\u06af \u0627\u0633\u06a9\u06cc\u0645 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0627\u06cc\u06a9 \u0645\u0642\u0631\u0631\u06c1 \u0634\u06a9\u0644 \u06c1\u06d2 (\u067e\u0631\u06cc\u0632\u0646\u0679\u06cc\u0634\u0646\u060c \u0688\u0648\u0645\u06cc\u0646\u060c \u0688\u06cc\u0679\u0627\u060c \u0648\u063a\u06cc\u0631\u06c1) \u0627\u0648\u0631 \u062c\u0633 \u06a9\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0646\u062f\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u0631\u06af\u0646\u0627\u0626\u0632\u0646\u06af \u06cc\u0648\u0646\u0679\u0633 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0627\u062f\u0627\u0631\u06d2\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632 \u0627\u0648\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc\u0632 \u06c1\u06cc\u06ba\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u06c1\u062f\u0627\u0641 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9\u060c UI\u060c \u0627\u0648\u0631 \u0688\u06cc\u0679\u0627 \u0628\u06cc\u0633 \u0633\u06d2 \u0622\u0632\u0645\u0627\u0626\u0634 \u0627\u0648\u0631 \u0622\u0632\u0627\u062f\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1 \u06a9\u0627\u0641\u06cc \u0628\u06a9\u06be\u0631\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062f\u06c1\u0631\u0627\u0626\u06d2 \u062c\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0628\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062f\u06c1 \u0688\u06be\u0627\u0646\u0686\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be\u06d4<\/p>\n<p>\u0633\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u0627 \u0645\u0646\u062d\u0646\u06cc \u062e\u0637\u0648\u0637 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06cc\u0632 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062f\u0646 \u0633\u06d2 \u0641\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u0646\u0645\u0627\u06cc\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u0632\u06cc\u0627\u062f\u06c1 \u0628\u0648\u0627\u0626\u0644\u0631 \u067e\u0644\u06cc\u0679 \u0641\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0627\u062f\u0627\u0631\u0648\u06ba\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632\u060c \u062f\u0648 \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0644\u06cc\u0626\u0631\u0632\u060c DTOs \u0627\u0648\u0631 qubits \u06cc\u0627 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646\u0632\u06d4<\/p>\n<p>\u067e\u06cc\u0686\u06cc\u062f\u06c1 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u0648\u0627\u0644\u06cc \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u06c1\u062a\u0631\u06cc\u0646 \u0645\u0648\u0632\u0648\u06ba \u06c1\u06d2 \u062c\u0646\u06c1\u06cc\u06ba UI \u06cc\u0627 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u06cc \u062a\u0628\u062f\u06cc\u0644\u06cc\u0648\u06ba \u0633\u06d2 \u0622\u0632\u0627\u062f \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4 \u0628\u0646\u06cc\u0627\u062f\u06cc \u062e\u0637\u0631\u06c1 \u0628\u0648\u0627\u0626\u0644\u0631 \u067e\u0644\u06cc\u0679 \u06a9\u06cc \u062e\u0627\u0637\u0631 \u0628\u0648\u0627\u0626\u0644\u0631 \u067e\u0644\u06cc\u0679 \u06c1\u06d2\u06d4 \u062f\u0648\u0633\u0631\u06d2 \u0627\u0644\u0641\u0627\u0638 \u0645\u06cc\u06ba\u060c \u0622\u067e \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u062a\u06cc\u0646 \u067e\u0631\u062a\u06cc\u06ba \u0628\u0646\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u062c\u0646 \u06a9\u06cc \u062d\u0641\u0627\u0638\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062a\u0639\u0644\u0642 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0686\u0646\u06d2 \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0645\u0641\u06cc\u062f \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2: \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be LEGO \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u06c1\u062a \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u0645\u062e\u0635\u0648\u0635 \u0637\u0631\u06cc\u0642\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06c1\u06d2\u06d4 \u06c1\u0633\u062a\u06cc\u0627\u06ba\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632\u060c \u0627\u0648\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u062e\u0648\u062f \u0627\u0633\u0679\u0688\u0632\u060c \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u0646\u0679 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0622\u067e\u0633 \u0645\u06cc\u06ba \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 LEGO \u0622\u0626\u06cc\u0688\u06cc\u0627 \u06c1\u06d2\u060c \u062c\u0633 \u0645\u06cc\u06ba \u0641\u06a9\u0633\u0688\u060c \u0631\u0627\u0626\u06d2 \u0648\u0627\u0644\u06cc \u0634\u06a9\u0644\u06cc\u06ba \u0644\u06af\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u067e \u0644\u06cc\u06af\u0648 \u06a9\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba\u06d4 <strong>\u06cc\u0627<\/strong> \u0635\u0627\u0641 \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631\u06d4 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0633\u06d2 \u0622\u067e \u0627\u067e\u0646\u06cc LEGO \u0627\u06cc\u0646\u0679\u0648\u06ba \u0645\u06cc\u06ba \u06a9\u062a\u0646\u06cc \u0645\u062e\u0635\u0648\u0635 \u0634\u06a9\u0644 \u0644\u06af\u0627\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-merging-both-in-a-modular-monorepo\">\u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0627\u0688\u06cc\u0648\u0644\u0631 Monorepo \u0645\u06cc\u06ba \u0636\u0645 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u0628 \u062a\u06a9 \u06a9\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u0646\u06d2 \u0627\u06cc\u06a9 \u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0688\u06be\u0627\u0646\u0686\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4 \u0628\u06cc\u0631\u0644 \u06a9\u06d2 \u0688\u06be\u06cc\u0631\u0648\u06ba \u0646\u06d2 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9 \u062f\u06cc\u0627\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0646 \u06a9\u06cc \u062d\u062f\u0648\u062f \u0627\u0628 \u0628\u06be\u06cc \u0635\u0631\u0641 \u06a9\u0646\u0648\u0646\u0634\u0646 \u062a\u06be\u06cc\u06ba\u06d4 \u062c\u0633\u0645\u0627\u0646\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0641\u0627\u0626\u0644\u0648\u06ba \u06a9\u0648 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0631\u0648\u06a9\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>features\/cart\/<\/code> \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba\u06d4 <code>features\/product\/src\/<\/code>\u0646\u0638\u0645 \u0648 \u0636\u0628\u0637 \u0627\u0648\u0631 \u06a9\u0648\u0688 \u06a9\u0627 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1\u06d4<\/p>\n<p>\u067e\u06cc\u062f\u0627\u0648\u0627\u0631\u06cc \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631\u060c \u06a9\u0686\u06be \u0679\u06cc\u0645\u06cc\u06ba \u06c1\u0631 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u0648 \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0635\u0644 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u062c \u0645\u06cc\u06ba \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631 \u06a9\u06d2 \u0627\u0633 \u0641\u0631\u0642 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u062e\u062a\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062d\u062f\u0648\u062f \u0646\u0638\u0645 \u0648 \u0636\u0628\u0637 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062e\u0648\u062f \u067e\u06cc\u06a9\u06cc\u062c\u0646\u06af \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633\u06d2 \u0627\u06a9\u062b\u0631 \u0645\u0648\u0646\u0648\u0631\u06cc\u067e\u0648 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0645\u06cc\u06ba \u0627\u0633 \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0679\u0648\u0644 \u0645\u06cc\u0644\u0648\u0633 \u06c1\u06d2\u06d4 \u0627\u0633 \u062d\u0635\u06d2 \u06a9\u0627 \u0628\u0642\u06cc\u06c1 \u062d\u0635\u06c1 \u0622\u067e \u06a9\u06d2 \u0633\u06cc\u0679 \u0627\u067e \u06a9\u0648 \u0634\u0631\u0648\u0639 \u0633\u06d2 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0633\u0627 \u0642\u062f\u0645\u060c \u0644\u06c1\u0630\u0627 \u062d\u062a\u0645\u06cc \u0641\u0648\u0644\u0688\u0631 \u06a9\u06d2 \u062f\u0631\u062e\u062a \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u0627\u06cc\u0633\u0627 \u0645\u062d\u0633\u0648\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06cc\u06c1 \u062c\u0627\u062f\u0648\u0626\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u0627 \u06c1\u0648\u06d4<\/p>\n<h3 id=\"heading-starting-from-an-empty-folder\">\u0627\u06cc\u06a9 \u062e\u0627\u0644\u06cc \u0641\u0648\u0644\u0688\u0631 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/h3>\n<p>Flutter \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u06a9\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0641\u0648\u0644\u0688\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba Flutter \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-bash\">mkdir my_lego_project\ncd my_lego_project\n<\/code><\/pre>\n<p>\u0627\u0633 \u0648\u0642\u062a <code>my_lego_project<\/code> \u06cc\u06c1 \u0641\u0644\u0679\u0631 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u06c1\u0627\u06ba \u0646\u06c1\u06cc\u06ba \u06c1\u06d2 <code>pubspec.yaml<\/code>\u0646\u06c1\u06cc\u06ba <code>lib<\/code> \u0641\u0648\u0644\u0688\u0631\u060c \u0627\u0648\u0631 \u0646\u06c1\u06cc\u06ba <code>android<\/code> \u0641\u0648\u0644\u0688\u0631 \u06cc\u06c1 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0688\u0627\u0626\u0631\u06a9\u0679\u0631\u06cc \u06c1\u06d2\u060c \u062c\u0648 \u0641\u0648\u0644\u0688\u0631\u0632 \u06a9\u06cc \u0637\u0631\u062d \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u0627\u067e\u0646\u06d2 \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a \u06a9\u0648 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06c1\u0631 \u0686\u06cc\u0632 \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0628\u0646\u0627\u0626\u06cc \u06af\u0626\u06cc \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0679\u06a9\u0691\u0627\u06d4<\/p>\n<h3 id=\"heading-giving-the-project-somewhere-for-native-code-to-live\">\u0627\u067e\u0646\u0627 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0688\u06cc\u0644\u06cc\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u062c\u06c1\u0627\u06ba \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06d4<\/h3>\n<p>\u0627\u067e\u0646\u06d2 \u0641\u0648\u0646 \u06a9\u0648 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc iOS \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4 \u062a\u0648 \u0627\u0646\u062f\u0631 \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u067e\u06c1\u0644\u06cc \u0686\u06cc\u0632 \u06c1\u06d2 <code>my_lego_project<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0641\u0644\u0679\u0631 \u0627\u06cc\u067e \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0648\u06c1\u06cc \u06a9\u0645\u0627\u0646\u0688\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0622\u067e \u06c1\u0645\u06cc\u0634\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u0622\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">mkdir apps\ncd apps\nflutter create app_main\n<\/code><\/pre>\n<p><code>flutter create app_main<\/code>    \u0628\u0627\u0644\u06a9\u0644 \u0648\u06cc\u0633\u0627 \u06c1\u06cc \u0628\u0631\u062a\u0627\u0624 \u06a9\u0631\u06cc\u06ba \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0622\u067e \u06c1\u0645\u06cc\u0634\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 <code>android\/<\/code>\u060c <code>ios\/<\/code>\u060c <code>lib\/main.dart<\/code>\u0627\u0648\u0631 <code>pubspec.yaml<\/code>\u062a\u0645\u0627\u0645 \u0627\u0646\u062f\u0631 <code>apps\/app_main\/<\/code>. \u0627\u0633 \u0645\u0631\u062d\u0644\u06d2 \u067e\u0631 \u0627\u0628\u06be\u06cc \u062a\u06a9 LEGO \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0627\u0628 \u062a\u06a9 \u0635\u0631\u0641 \u06cc\u06c1 \u0641\u06cc\u0635\u0644\u06c1 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0639\u0627\u0645 \u0627\u06cc\u067e \u0688\u0633\u06a9 \u067e\u0631 \u06a9\u06c1\u0627\u06ba \u0631\u06c1\u062a\u06cc \u06c1\u06d2\u06d4 <code>apps<\/code> \u06cc\u06c1 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">my_lego_project\/\n  apps\/\n    app_main\/\n      android\/\n      ios\/\n      lib\/\n        main.dart\n      pubspec.yaml\n<\/code><\/pre>\n<p>\u06cc\u06c1 <code>app_main<\/code> \u0641\u0648\u0644\u0688\u0631 \u067e\u0648\u0631\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0648\u0627\u062d\u062f \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>android\/<\/code> \u06cc\u0627 <code>ios\/<\/code>. \u06cc\u06c1\u0627\u06ba \u0633\u06d2 \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062f\u06c1 \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0648\u06c1 \u067e\u06cc\u06a9\u06cc\u062c \u0634\u0627\u0645\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<h3 id=\"heading-creating-the-first-brick\">\u0627\u067e\u0646\u06cc \u067e\u06c1\u0644\u06cc \u0627\u06cc\u0646\u0679 \u0628\u0646\u0627\u0646\u0627<\/h3>\n<p>\u0627\u0628 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u067e\u0631 \u0648\u0627\u067e\u0633 \u062c\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u062f\u0648\u0633\u0631\u0627 \u0641\u0648\u0644\u0688\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 <code>packages<\/code>\u067e\u0627\u0633 \u0628\u06cc\u0679\u06be\u0648 <code>apps<\/code>.<\/p>\n<pre><code class=\"language-bash\">cd ..\/..\nmkdir packages\ncd packages\n<\/code><\/pre>\n<p>\u0627\u0646\u062f\u0631 <code>packages<\/code>\u0627\u067e\u0646\u0627 \u067e\u06c1\u0644\u0627 \u0641\u0646\u06a9\u0634\u0646 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u0644\u06cc\u06a9\u0646 \u0627\u0633 \u0628\u0627\u0631 \u06c1\u0645 \u0627\u06cc\u06a9 \u06c1\u06cc \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u062c\u06be\u0646\u0688\u06d2 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>flutter create<\/code> \u062d\u06a9\u0645<\/p>\n<pre><code class=\"language-bash\">flutter create --template=package feature_login\n<\/code><\/pre>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0641\u0631\u0642 \u06c1\u06d2\u06d4 <code>--template=package<\/code>. \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c <code>flutter create<\/code> \u0641\u0631\u0636 \u06a9\u0631\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u0627\u0628\u0644 \u0639\u0645\u0644 \u0627\u06cc\u067e \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u060c \u0627\u06cc\u06a9 \u0688\u06cc\u0641\u0627\u0644\u0679 \u0641\u0648\u0644\u0688\u0631 \u0628\u0646\u0627\u0626\u06cc\u06ba\u06d4 \u06cc\u06c1 Flutter \u06a9\u0648 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0628\u0646\u0627\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u0639\u0646\u06cc <code>lib\/<\/code> \u0641\u0648\u0644\u0688\u0631\u060c <code>test\/<\/code> \u0641\u0648\u0644\u0688\u0631 \u0627\u0648\u0631 <code>pubspec.yaml<\/code>) \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u0686\u06be\u0648\u0691 \u062f\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>android\/<\/code>\u060c <code>ios\/<\/code>\u0627\u0648\u0631 <code>web\/<\/code>. \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u062e\u0648\u062f \u0646\u06c1\u06cc\u06ba \u0686\u0644\u062a\u06d2\u06d4 \u0635\u0631\u0641 \u0627\u0646 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u06a9\u06d2 \u067e\u0627\u0633 \u0648\u06c1 \u0641\u0648\u0644\u0688\u0631 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">my_lego_project\/\n  apps\/\n    app_main\/            (has native folders)\n  packages\/\n    feature_login\/\n      lib\/\n      test\/\n      pubspec.yaml\n<\/code><\/pre>\n<p>\u0627\u0633 \u0648\u0642\u062a\u060c <code>feature_login<\/code> \u0627\u0648\u0631 <code>app_main<\/code> \u06c1\u0645 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2\u06d4 \u06cc\u06c1 \u062f\u0648 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0641\u0648\u0644\u0688\u0631\u0632 \u06c1\u06cc\u06ba \u062c\u0648 \u0688\u0633\u06a9 \u067e\u0631 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06a9\u06d2 \u0642\u0631\u06cc\u0628 \u0648\u0627\u0642\u0639 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-connecting-the-brick-to-the-app-with-a-path-dependency\">\u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u0646\u0679 \u06a9\u0648 \u0627\u067e\u0646\u06cc \u0627\u06cc\u067e \u0633\u06d2 \u062c\u0648\u0691\u06cc\u06ba\u06d4<\/h3>\n<p>\u0633\u06cc\u0679 <code>app_main<\/code> \u0633\u06d2 \u06a9\u0648\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>feature_login<\/code>\u0627\u0633\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0634\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 \u0622\u067e \u06cc\u06c1 \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u06cc\u0633\u06d2 pub.dev \u0645\u06cc\u06ba \u067e\u06cc\u06a9\u06cc\u062c \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u0627\u060c \u0633\u0648\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0646\u0627\u0645 \u0627\u0648\u0631 \u0648\u0631\u0698\u0646 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0645\u0642\u0627\u0645\u06cc \u0641\u0648\u0644\u0688\u0631 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-yaml\"># apps\/app_main\/pubspec.yaml\nname: app_main\ndescription: The actual iOS and Android wrapper application.\n\ndependencies:\n  flutter:\n    sdk: flutter\n  feature_login:\n    path: ..\/..\/packages\/feature_login\n<\/code><\/pre>\n<p>\u0644\u0627\u0626\u0646 <code>path: ..\/..\/packages\/feature_login<\/code> \u06a9\u0627 \u0631\u0634\u062a\u06c1 \u062f\u0627\u0631 \u0631\u0627\u0633\u062a\u06c1 \u06c1\u06d2\u06d4 <code>app_main<\/code>\u0627\u067e\u0646\u06d2 <code>pubspec.yaml<\/code> \u062f\u0648 \u0641\u0648\u0644\u0688\u0631\u0632 \u06a9\u0627 \u0628\u06cc\u06a9 \u0627\u067e \u0644\u06cc\u06ba\u06d4 <code>feature_login<\/code>. \u06cc\u06c1 \u0646\u06c1 \u062a\u0648 \u0645\u06cc\u0644\u0648\u0633 \u06a9\u06cc \u06a9\u0648\u0626\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc LEGO \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06cc \u0627\u06cc\u062c\u0627\u062f \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c \u0645\u06cc\u0646\u06cc\u062c\u0631 \u06a9\u06cc \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u062e\u0635\u0648\u0635\u06cc\u062a \u06c1\u06d2\u06d4 <code>path:<\/code> \u0645\u0642\u0627\u0645\u06cc \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0646\u062d\u0635\u0627\u0631\u06d4<\/p>\n<p>\u0628\u0686\u0627\u0646\u06d2 \u0627\u0648\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f <code>flutter pub get<\/code> \u0627\u0646\u062f\u0631 <code>apps\/app_main<\/code> \u06a9\u0627\u0641\u06cc <code>lib\/main.dart<\/code> \u06a9\u0648 <code>app_main<\/code> \u0644\u06a9\u06be\u0646\u0627 <code>import 'package:feature_login\/feature_login.dart';<\/code> \u062c\u0648 \u0628\u06be\u06cc \u067e\u06cc\u06a9\u062c \u0633\u0627\u0645\u0646\u06d2 \u0622\u0626\u06d2 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u0648\u0642\u062a \u067e\u0648\u0631\u0627 \u0633\u06cc\u0679 \u0627\u067e \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u06a9\u0627\u0645 \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0628\u0627\u062a \u0642\u0627\u0628\u0644 \u063a\u0648\u0631 \u06c1\u06d2 \u06a9\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u062f\u0648 \u067e\u06cc\u06a9\u062c\u0632 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u06cc\u0644\u0648\u0633 \u06a9\u0627 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u06a9\u0648\u0626\u06cc \u0630\u06a9\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u06cc\u0644\u0648\u0633 \u06a9\u0648 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0645\u062a\u0639\u0627\u0631\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u062d\u062f\u0648\u062f \u0646\u06c1\u06cc\u06ba \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0628\u0627\u0624\u0646\u0688\u0631\u06cc \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>pubspec.yaml<\/code> \u0627\u0648\u0631 <code>path:<\/code> \u0627\u0646\u062d\u0635\u0627\u0631 \u0645\u06cc\u0644\u0648\u0633 \u062c\u0648 \u0627\u0636\u0627\u0641\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u06af\u0631 \u0645\u062a\u0639\u062f\u062f \u067e\u06cc\u06a9\u062c\u0648\u06ba \u0645\u06cc\u06ba \u062f\u06c1\u0631\u0627\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u06cc\u06c1 \u0646\u0645\u0648\u0646\u06c1 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06af\u0644\u0627 \u0645\u0633\u0626\u0644\u06c1 \u062d\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-where-melosyaml-actually-comes-from\">melos.yaml \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06c1\u0627\u06ba \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u061f<\/h3>\n<p><code>melos.yaml<\/code>    \u06cc\u06c1 Flutter \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u062a\u06cc\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0646\u06c1 \u06c1\u06cc \u06a9\u0648\u0626\u06cc \u0679\u0648\u0644 \u0627\u0633\u06d2 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u062a\u06cc\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u0648 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0641\u0627\u0626\u0644 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u067e\u0646\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0633\u0627\u062f\u06c1 \u0679\u06cc\u06a9\u0633\u0679 \u0641\u0627\u0626\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u06a9\u06be\u06cc\u06ba\u06d4<\/p>\n<p>\u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0645\u06cc\u0644\u0648\u0633 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0645\u067e\u06cc\u0648\u0679\u0631 \u067e\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u06af\u0644\u0648\u0628\u0644 \u0688\u0627\u0631\u0679 \u0679\u0648\u0644 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0646\u0633\u0679\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">dart pub global activate melos\n<\/code><\/pre>\n<p>\u067e\u06be\u0631 \u062c\u0691 \u0645\u06cc\u06ba <code>my_lego_project<\/code>\u06a9\u06d2 \u067e\u0627\u0633 <code>apps<\/code> \u0627\u0648\u0631 <code>packages<\/code> \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u0626\u06cc \u0641\u0627\u0626\u0644 \u0628\u0646\u0627\u0626\u06cc\u06ba\u060c \u0627\u0633\u06d2 \u0646\u0627\u0645 \u062f\u06cc\u06ba\u06d4 <code>melos.yaml<\/code> \u067e\u06be\u0631 \u0679\u0627\u0626\u067e \u06a9\u0631\u06cc\u06ba:<\/p>\n<pre><code class=\"language-yaml\">name: my_lego_project\n\npackages:\n  - apps\/**\n  - packages\/**\n<\/code><\/pre>\n<pre><code class=\"language-plaintext\">my_lego_project\/\n  melos.yaml\n  apps\/\n    app_main\/\n  packages\/\n    feature_login\/\n<\/code><\/pre>\n<p>\u06a9\u06c1 <code>packages:<\/code> \u06cc\u06c1\u0627\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u06af\u0644\u0648\u0628 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>apps\/**<\/code> \u0627\u0648\u0631 <code>packages\/**<\/code> \u0645\u06cc\u0644\u0648\u0633 \u06a9\u0648 \u062f\u0648\u0646\u0648\u06ba \u0641\u0648\u0644\u0688\u0631\u0632 \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u0630\u06cc\u0644\u06cc \u0641\u0648\u0644\u0688\u0631\u0632 \u067e\u0631 \u06a9\u0627\u0631\u0631\u0648\u0627\u0626\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>pubspec.yaml<\/code> \u0627\u06cc\u06a9 monorepo \u06a9\u06d2 \u0627\u06cc\u06a9 \u0631\u06a9\u0646 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631. \u06cc\u06c1\u0627\u06ba \u06a9\u0686\u06be \u0628\u06be\u06cc \u067e\u0648\u0634\u06cc\u062f\u06c1 \u06cc\u0627 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0622\u067e \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0645\u06cc\u0644\u0648\u0633 \u06a9\u0648 \u0628\u062a\u0627 \u0631\u06c1\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06a9\u06c1\u0627\u06ba \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4<\/p>\n<h3 id=\"heading-what-melos-bootstrap-actually-does\">\u06a9\u06cc\u0627 <code>melos bootstrap<\/code> \u0627\u0635\u0644 \u0645\u06cc\u06ba<\/h3>\n<p>\u062f\u0648 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2 <code>flutter pub get<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0645\u06cc\u06ba <code>app_main<\/code> \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0627\u0646\u062f\u0631 <code>feature_login<\/code> \u06cc\u06c1 \u06a9\u0648\u0626\u06cc \u0628\u0648\u062c\u06be \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0645\u06cc\u0644\u0648\u0633 \u06a9\u06cc \u0642\u062f\u0631 \u0627\u0633 \u0648\u0642\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 10 \u0633\u06d2 20 \u067e\u06cc\u06a9\u062c\u0632 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062c\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u062d\u0644 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0627\u0648\u0631 \u062c\u0646 \u0645\u06cc\u06ba \u0633\u06d2 \u06c1\u0631 \u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u0631\u0627\u0633\u062a\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06a9\u0626\u06cc \u062f\u0648\u0633\u0631\u06d2 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06c1\u0631 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0631\u0648\u0679 \u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u0645\u0627\u0646\u0688 \u0686\u0644\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">melos bootstrap\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0648\u0627\u062d\u062f \u062d\u06a9\u0645 \u06c1\u06d2: <code>melos.yaml<\/code>\u0646\u06cc\u0686\u06d2 \u062a\u0645\u0627\u0645 \u067e\u06cc\u06a9\u06cc\u062c\u0632 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>apps\/**<\/code> \u0627\u0648\u0631 <code>packages\/**<\/code>\u0627\u0648\u0631 \u067e\u06be\u0631 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba: <code>flutter pub get<\/code> \u0627\u067e\u0646\u06d2 \u062a\u0645\u0627\u0645 \u0645\u0642\u0627\u0645\u06cc \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062d\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>path:<\/code> \u0631\u0627\u0633\u062a\u06d2 \u0645\u06cc\u06ba \u0622\u067e \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0645\u0648\u062c\u0648\u062f \u0645\u06cc\u06a9\u0627\u0646\u0632\u0645 \u06a9\u06d2 \u0627\u0648\u067e\u0631 \u0627\u06cc\u06a9 \u0622\u0631\u06a9\u06cc\u0633\u0679\u0631\u06cc\u0634\u0646 \u0679\u0648\u0644 \u06c1\u06d2 (\u0639\u0627\u0645 \u0645\u06cc\u06a9\u0627\u0646\u0632\u0645)\u06d4 <code>pubspec.yaml<\/code> \u0627\u0648\u0631 <code>path:<\/code> \u0627\u0648\u067e\u0631 \u062f\u06a9\u06be\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2) \u06cc\u06c1 \u0627\u067e\u0646\u0627 \u0646\u06cc\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u0627\u0688\u06cc\u0648\u0644\u0631\u0679\u06cc \u062e\u0648\u062f \u0627\u0644\u06af \u0627\u0644\u06af \u0686\u06cc\u0632\u0648\u06ba \u0633\u06d2 \u0622\u062a\u06cc \u06c1\u06d2\u06d4 <code>pubspec.yaml<\/code> \u0641\u0627\u0626\u0644 \u0627\u0648\u0631 \u0648\u0627\u0636\u062d \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631\u06d4 \u0645\u06cc\u0644\u0648\u0633 \u0628\u06c1\u062a \u0633\u06d2 \u06a9\u0645\u0627\u0646\u0688\u0632 \u06a9\u0648 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u0627\u0648\u0631 \u0628\u0627\u0631 \u0628\u0627\u0631 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba CI \u067e\u0627\u0626\u067e \u0644\u0627\u0626\u0646 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0627\u0646 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u067e\u0631 \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0628\u062f\u0644 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h3 id=\"heading-what-actually-belongs-in-appmains-lib-folder\">\u0627\u0635\u0644 \u0645\u06cc\u06ba app_main \u06a9\u06d2 lib \u0641\u0648\u0644\u0688\u0631 \u0645\u06cc\u06ba \u06a9\u06cc\u0627 \u06c1\u06d2\u06d4<\/h3>\n<p>\u0627\u0633 \u0645\u0642\u0627\u0645 \u067e\u0631 \u0627\u06cc\u06a9 \u0641\u0637\u0631\u06cc \u0633\u0648\u0627\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u06c1\u0631 \u0641\u06cc\u0686\u0631 \u062f\u0631\u0627\u0635\u0644 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u0648\u06af\u0627\u06d4 \u0628\u06c1\u0631 \u062d\u0627\u0644\u060c \u0639\u0627\u0645 \u0641\u0644\u0679\u0631 \u0688\u0648\u06cc\u0644\u067e\u0645\u0646\u0679 \u0645\u06cc\u06ba\u060c \u0627\u06cc\u06a9 \u067e\u06cc\u06a9\u062c \u06a9\u0627 \u0645\u0637\u0644\u0628 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0686\u06cc\u0632 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u0688\u06cc\u0679 \u0686\u0646\u0646\u06d2 \u0648\u0627\u0644\u0627\u060c \u067e\u0648\u0631\u06cc \u0644\u0627\u06af \u0627\u0646 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0646\u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u0633 \u067e\u06cc\u0679\u0631\u0646 \u0645\u06cc\u06ba\u060c \u067e\u0648\u0631\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a\u060c \u062c\u06cc\u0633\u06d2 \u0644\u0627\u06af \u0627\u0646\u060c \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u067e\u06cc\u06a9\u06cc\u062c \u0628\u0646 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0627\u0633\u06a9\u0631\u06cc\u0646\u0632\u060c \u0627\u0633\u0679\u06cc\u0679 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679\u060c \u0627\u0648\u0631 \u0628\u0632\u0646\u0633 \u0645\u0646\u0637\u0642\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0648\u06c1\u06cc \u06a9\u0646\u0679\u06cc\u0646\u0645\u0646\u0679 \u0645\u0642\u0635\u062f \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u06a9\u06cc \u06c1\u0631 \u0633\u0637\u062d \u06a9\u0648 \u0686\u0644\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>feature_login<\/code> \u06cc\u06c1 \u0627\u0633 \u06a9\u0627 \u0627\u067e\u0646\u0627 \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0688\u0648\u06cc\u0644\u067e\u0631\u0632 \u06c1\u06cc\u06ba\u06d4 <code>feature_home<\/code> \u0622\u067e \u063a\u0644\u0637\u06cc \u0633\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2 <code>feature_login<\/code>\u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u0628\u06be\u06cc \u0628\u06be\u06cc \u0627\u0646\u062d\u0635\u0627\u0631 \u0642\u0631\u0627\u0631 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u06d4 <code>feature_home<\/code>\u0627\u067e\u0646\u06d2 <code>pubspec.yaml<\/code>. \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0627\u0633\u06d2 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2\u060c \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0627\u0646\u06a9\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0633\u06d2 \u062f\u0648\u0633\u0631\u0627 \u0633\u0648\u0627\u0644 \u067e\u06cc\u062f\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0627\u0633\u06a9\u0631\u06cc\u0646\u0632\u060c \u0627\u0633\u0679\u06cc\u0679 \u0645\u06cc\u0646\u062c\u0645\u0646\u0679\u060c \u0627\u0648\u0631 \u0645\u0646\u0637\u0642 \u0633\u0628 \u0627\u06cc\u06a9 \u0641\u0646\u06a9\u0634\u0646\u0644 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u06a9\u06cc\u0627 \u0628\u0686\u0627 \u06c1\u06d2\u061f <code>app_main\/lib<\/code>? \u062c\u0648\u0627\u0628 \u06c1\u06d2 <code>app_main\/lib<\/code> \u06cc\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u062a\u06cc\u0646 \u0630\u0645\u06c1 \u062f\u0627\u0631\u06cc\u0648\u06ba \u067e\u0631 \u0627\u0628\u0644\u062a\u0627 \u06c1\u06d2:<\/p>\n<ol>\n<li>\n<p>\u06cc\u06c1 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 <code>main.dart<\/code>\u0627\u06cc\u067e \u06a9\u0648 \u0628\u0648\u0679 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0637\u0644\u0628 \u06a9\u0631\u06cc\u06ba\u06d4 <code>runApp()<\/code>.<\/p>\n<\/li>\n<li>\n<p>\u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0646\u062c\u06cc\u06a9\u0634\u0646 \u06a9\u06cc \u062a\u0631\u062a\u06cc\u0628\u0627\u062a \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u0686\u06be\u0644\u06d2 \u062d\u0635\u06d2 \u0633\u06d2 \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0631\u0648\u0679 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06c1\u0627\u06ba \u0627\u06cc\u06a9 \u0679\u06be\u0648\u0633 \u0646\u0641\u0627\u0630\u060c \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u0627\u06cc\u06a9 \u062d\u0642\u06cc\u0642\u06cc \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0644\u0627\u0626\u0646\u0679\u060c \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0637\u0644\u0648\u0628\u06c1 \u0641\u06cc\u0686\u0631 \u067e\u06cc\u06a9\u062c\u0632 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<li>\n<p>\u0627\u0648\u0631 \u0627\u0633 \u0645\u06cc\u06ba \u0645\u0627\u0633\u0679\u0631 \u0631\u0627\u0624\u0679\u0631 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u0645\u06cc\u06ba \u062f\u0631\u062c \u0630\u06cc\u0644 \u0641\u06cc\u0686\u0631 \u067e\u06cc\u06a9\u062c \u06c1\u06d2\u06d4 <code>feature_login<\/code> \u0622\u067e \u062c\u0627\u0646 \u0628\u0648\u062c\u06be \u06a9\u0631 \u06cc\u06c1 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u0646\u062a\u06d2 <code>feature_home<\/code> \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 \u062a\u0648 \u0628\u0633 <code>app_main<\/code>\u062f\u0648\u0646\u0648\u06ba \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u0633\u06d2 \u062f\u0648\u0633\u0631\u06d2 \u062a\u06a9 \u062c\u0627\u0646\u06d2 \u06a9\u06cc \u067e\u0648\u0632\u06cc\u0634\u0646 \u0645\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<\/li>\n<\/ol>\n<p>\u06cc\u06c1\u0627\u06ba \u0646\u06cc\u0648\u06cc\u06af\u06cc\u0634\u0646 \u06af\u0644\u0648 \u067e\u0631 \u0627\u06cc\u06a9 \u0679\u06be\u0648\u0633 \u0646\u0638\u0631 \u06c1\u06d2\u060c \u062c\u0648 \u0641\u06cc\u0686\u0631 \u067e\u06cc\u06a9\u062c \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0633\u06d2 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ packages\/feature_login\/lib\/login_screen.dart\nabstract class LoginNavigationContract {\n  void onLoginSuccess();\n}\n\nclass LoginScreen extends StatelessWidget {\n  final LoginNavigationContract navigator;\n\n  const LoginScreen({super.key, required this.navigator});\n\n  @override\n  Widget build(BuildContext context) {\n    return ElevatedButton(\n      onPressed: () => navigator.onLoginSuccess(),\n      child: const Text('Submit'),\n    );\n  }\n}\n<\/code><\/pre>\n<p><code>feature_login<\/code>    \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba <code>LoginNavigationContract<\/code>\u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u062a\u062c\u0631\u06cc\u062f\u06cc \u06a9\u0644\u0627\u0633\u060c <code>onLoginSuccess()<\/code>. <code>LoginScreen<\/code> \u062f\u0648\u0633\u0631\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0648\u06c1\u06cc \u0645\u0639\u0627\u06c1\u062f\u06c1 \u067e\u06cc\u0679\u0631\u0646 \u06c1\u06d2 \u062c\u0648 \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0644\u0627\u0633 \u06a9\u06cc \u062d\u062f\u0648\u062f \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u067e\u06cc\u06a9\u06cc\u062c \u06a9\u06cc \u062d\u062f\u0648\u062f \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>feature_login<\/code> \u06cc\u06c1 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \"\u0627\u06af\u0644\u0627\" \u0627\u0635\u0644 \u0645\u06cc\u06ba \u06a9\u06c1\u0627\u06ba \u06c1\u06d2 \u0627\u0633 \u06a9\u0627 \u0630\u06a9\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0622\u06af\u06d2 \u06a9\u06cc\u0627 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u0626\u06d2\u06d4<\/p>\n<p><code>app_main<\/code>    \u06cc\u06c1 \u0648\u0627\u062d\u062f \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u062c\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0645\u06cc\u06ba \u062f\u0648\u0646\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0627\u0646\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>feature_login<\/code> \u0627\u0648\u0631 <code>feature_home<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u06cc\u06c1\u06cc \u0633\u0648\u0627\u0644 \u06a9\u0627 \u062c\u0648\u0627\u0628 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ apps\/app_main\/lib\/app_navigator.dart\nimport 'package:feature_login\/feature_login.dart';\nimport 'package:feature_home\/feature_home.dart';\nimport 'package:flutter\/material.dart';\n\nclass AppNavigator implements LoginNavigationContract {\n  final BuildContext context;\n  AppNavigator(this.context);\n\n  @override\n  void onLoginSuccess() {\n    Navigator.push(context, MaterialPageRoute(builder: (_) => const HomeScreen()));\n  }\n}\n<\/code><\/pre>\n<p><code>AppNavigator<\/code>    \u0646\u0627\u0641\u0630 \u06a9\u0631\u0646\u0627 <code>LoginNavigationContract<\/code> \u06cc\u06c1 \u0648\u0627\u062d\u062f \u062c\u06af\u06c1 \u06c1\u06d2 \u062c\u0648 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>feature_login<\/code> \u0627\u0648\u0631 <code>feature_home<\/code> \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062c\u0628 <code>onLoginSuccess()<\/code> \u0622\u06af \u0644\u06af\u0627\u0626\u06cc\u06ba\u060c \u062f\u06be\u06a9\u06cc\u0644 \u062f\u06cc\u06ba\u06d4 <code>HomeScreen<\/code>\u0627\u0646\u062f\u0631 \u0648\u062c\u06cc\u0679\u0633 <code>feature_home<\/code>. \u0686\u0644\u062a\u06cc \u0627\u06cc\u067e \u0633\u06d2 \u062c\u0691\u0646\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>main.dart<\/code>.<\/p>\n<pre><code class=\"language-dart\">\/\/ apps\/app_main\/lib\/main.dart\nimport 'package:flutter\/material.dart';\nimport 'package:feature_login\/feature_login.dart';\nimport 'app_navigator.dart';\n\nvoid main() => runApp(const App());\n\nclass App extends StatelessWidget {\n  const App({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: LoginScreen(navigator: AppNavigator(context)),\n    );\n  }\n}\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u067e\u0648\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631 \u06c1\u06d2\u06d4 <code>feature_login<\/code> \u0622\u067e \u0627\u0633\u06a9\u0631\u06cc\u0646\u060c \u062a\u0648\u062b\u06cc\u0642\u060c \u0627\u0648\u0631 \u06a9\u0627\u0645\u06cc\u0627\u0628 \u0644\u0627\u06af \u0627\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u06a9\u06cc\u0627 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0633 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0633\u0648\u0627\u0644\u0627\u062a \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0627\u0633 \u06a9\u0627 \u0627\u0638\u06c1\u0627\u0631 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0645\u0639\u0627\u06c1\u062f\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><code>app_main<\/code>\u0627\u0648\u0631 \u0635\u0631\u0641 <code>app_main<\/code>\u0645\u06cc\u0631\u06d2 \u067e\u0627\u0633 \u0645\u062e\u0635\u0648\u0635 \u062c\u0648\u0627\u0628\u0627\u062a \u06c1\u06cc\u06ba\u06d4 <code>android\/<\/code>\u060c <code>ios\/<\/code>\u060c <code>main.dart<\/code>\u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u0646\u062c\u06a9\u0634\u0646 \u0627\u0648\u0631 \u0631\u0648\u0679\u0646\u06af. \u062f\u06cc\u06af\u0631 \u062a\u0645\u0627\u0645 \u067e\u06cc\u06a9\u062c\u0632 <code>packages\/<\/code> \u06cc\u06c1 \u0627\u0633\u06cc \u0634\u06a9\u0644 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>feature_login<\/code>: \u0633\u06d2 <code>lib\/<\/code> \u0641\u0648\u0644\u0688\u0631\u060c <code>test\/<\/code> \u0641\u0648\u0644\u0688\u0631\u060c <code>pubspec.yaml<\/code> \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 <code>path:<\/code> \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0648\u0626\u06cc \u0688\u06cc\u0641\u0627\u0644\u0679 \u0641\u0648\u0644\u0688\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u067e\u0648\u0631\u06d2 \u067e\u0631\u0648\u062c\u06cc\u06a9\u0679 \u0645\u06cc\u06ba \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-plaintext\">my_lego_project\/\n  melos.yaml\n  apps\/\n    app_main\/\n      android\/            <- only here\n      ios\/                <- only here\n      lib\/\n        main.dart          owns: boot, DI, routing\n        app_navigator.dart\n      pubspec.yaml         depends on every feature package\n  packages\/\n    feature_login\/\n      lib\/                owns: login screens, logic\n      pubspec.yaml         depends on nothing feature-specific\n    feature_home\/\n      lib\/                owns: home screens, logic\n      pubspec.yaml\n<\/code><\/pre>\n<p>\u062c\u0628 \u062a\u0645\u0627\u0645 \u067e\u06cc\u06a9\u062c\u0632 \u0627\u067e\u0646\u06cc \u062c\u06af\u06c1 \u067e\u0631 \u06c1\u06cc\u06ba\u060c \u0633\u0628 \u0633\u06d2 \u0627\u06c1\u0645 \u0644\u0627\u0626\u0646\u06cc\u06ba \u0627\u0628 \u0628\u06be\u06cc \u0648\u06c1\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u067e\u06c1\u0644\u06d2 \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0627\u0626\u06cc \u06af\u0626\u06cc \u062a\u06be\u06cc\u06ba\u06d4 \u06cc\u0639\u0646\u06cc \u0641\u06cc\u0686\u0631 \u067e\u06cc\u06a9\u062c \u06a9\u0627 <code>pubspec.yaml<\/code> \u0635\u0631\u0641 \u0627\u0646 \u067e\u06cc\u06a9\u062c\u0648\u06ba \u06a9\u06cc \u0641\u06c1\u0631\u0633\u062a \u0628\u0646\u0627\u0626\u06cc\u06ba \u062c\u0646 \u067e\u0631 \u0622\u067e \u062f\u0631\u062d\u0642\u06cc\u0642\u062a \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>feature_home<\/code> \u06a9\u0628\u06be\u06cc \u0638\u0627\u06c1\u0631 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u0627 <code>feature_login<\/code>\u0627\u06cc\u0633 <code>pubspec.yaml<\/code>\u062a\u0648 <code>feature_login<\/code> \u0622\u067e \u0627\u0633\u06d2 \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc \u062d\u0627\u0635\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2\u06d4 \u06cc\u06c1 \u062c\u0627\u0626\u0632\u06c1 \u0644\u06cc\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u067e\u06a9\u0691\u06d2 \u062c\u0627\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062e\u0648\u062f \u0688\u0627\u0631\u0679 \u067e\u06cc\u06a9\u06cc\u062c\u0646\u06af \u0633\u0633\u0679\u0645 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0646\u0627\u0641\u0630 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 Flutter \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 LEGO \u0641\u0646 \u062a\u0639\u0645\u06cc\u0631 \u06a9\u0627 \u0633\u0628 \u0633\u06d2 \u0637\u0627\u0642\u062a\u0648\u0631 \u0648\u0631\u0698\u0646 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u0627\u06cc\u06a9 \u0644\u0641\u0638\u06cc \u067e\u06cc\u06a9\u06cc\u062c \u06c1\u06d2 \u062c\u0648 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0648\u0631\u0698\u0646 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062c\u0691\u0646\u0627 \u0627\u06cc\u06a9 \u0644\u0641\u0638\u06cc \u067e\u06cc\u06a9\u06cc\u062c \u0627\u0646\u062d\u0635\u0627\u0631 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u0639\u0644\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>pubspec.yaml<\/code>\u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2\u060c \u06a9\u0648\u0688 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u0646\u06c1\u06cc\u06ba\u060c \u0642\u0648\u0627\u0646\u06cc\u0646 \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-swappable-state-management-bricks\">\u0642\u0627\u0628\u0644 \u062a\u0628\u0627\u062f\u0644\u06c1 \u0631\u06cc\u0627\u0633\u062a \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06cc \u0627\u06cc\u0646\u0679\u06cc\u06ba<\/h2>\n<p>\u0627\u06cc\u06a9 \u0627\u0648\u0631 \u062c\u062f\u06cc\u062f \u062a\u0631\u06cc\u0646 LEGO \u0627\u0642\u062f\u0627\u0645 \u062c\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062c\u0627\u0646\u0646\u0627 \u0636\u0631\u0648\u0631\u06cc \u06c1\u06d2 \u0648\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0627\u0646\u062a\u0638\u0627\u0645\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u06a9\u0648 \u0628\u06be\u06cc \u0628\u062f\u0644\u0646\u06d2 \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u0627\u06cc\u0646\u0679 \u0628\u0646\u0627\u0646\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u06c1\u0645 \u06c1\u06d2 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06cc \u0679\u06cc\u0645 \u0628\u0644\u0627\u06a9 \u0633\u06d2 \u0631\u06cc\u0648\u0631 \u067e\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u062a\u06cc \u06c1\u06d2\u060c \u06cc\u0627 \u0645\u0646\u062a\u0642\u0644\u06cc \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u062f\u0648\u0646\u0648\u06ba \u06a9\u0648 \u0633\u067e\u0648\u0631\u0679 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u062c\u0627\u0648\u06cc\u0632 \u0648\u06c1\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u06af\u0626\u06cc \u06c1\u06cc\u06ba\u06d4 \u0627\u0646 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u067e\u0631 \u0622\u067e \u06a9\u0627 UI \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06d2 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u0646\u0641\u0627\u0630 \u0627\u0646\u06c1\u06cc\u06ba \u0645\u0637\u0645\u0626\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/presentation\/product_presenter.dart\nabstract class ProductPresenter {\n  ProductUiState get state;\n  Stream<productuistate> get stateStream;\n  Future<void> load(String id);\n}\n\nclass ProductUiState {\n  final bool isLoading;\n  final String? name;\n  final String? error;\n  const ProductUiState({this.isLoading = false, this.name, this.error});\n}\n<\/void><\/productuistate><\/code><\/pre>\n<p>\u0627\u06cc\u06a9 \u0628\u0644\u0627\u06a9 \u067e\u0631 \u0645\u0628\u0646\u06cc \u0646\u0641\u0627\u0630 \u0627\u0633 \u0637\u0631\u062d \u0646\u0638\u0631 \u0622\u0626\u06d2 \u06af\u0627:<\/p>\n<pre><code class=\"language-dart\">class BlocProductPresenter implements ProductPresenter {\n  final ProductCubit _cubit;\n  BlocProductPresenter(this._cubit);\n\n  @override\n  ProductUiState get state => _mapState(_cubit.state);\n\n  @override\n  Stream<productuistate> get stateStream => _cubit.stream.map(_mapState);\n\n  @override\n  Future<void> load(String id) => _cubit.load(id);\n\n  ProductUiState _mapState(ProductState s) => switch (s) {\n        ProductLoading() => const ProductUiState(isLoading: true),\n        ProductLoaded(product: final p) => ProductUiState(name: p.name),\n        ProductError(message: final m) => ProductUiState(error: m),\n      };\n}\n<\/void><\/productuistate><\/code><\/pre>\n<p>\u06cc\u06c1\u0627\u06ba \u06c1\u0645 \u0635\u0631\u0641 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06cc \u067e\u0631\u062a \u06a9\u0648 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>ProductPresenter<\/code> \u0627\u0648\u0631 <code>ProductUiState<\/code>\u0645\u0637\u0644\u0642\u06cc\u062a <code>ProductCubit<\/code>\u060c <code>Bloc<\/code>\u06cc\u0627 \u0631\u06cc\u0648\u0631 \u067e\u0648\u0688 \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p><code>BlocProductPresenter<\/code>    \u06cc\u06c1 \u0627\u06cc\u06a9 \u0627\u0688\u0627\u067e\u0679\u0631 \u0627\u06cc\u0646\u0679 \u06c1\u06d2 \u062c\u0648 \u0628\u0644\u0627\u06a9 \u0645\u06cc\u06ba \u0645\u062e\u0635\u0648\u0635 \u0632\u0628\u0627\u0646\u0648\u06ba \u06a9\u0627 \u062a\u0631\u062c\u0645\u06c1 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>ProductState<\/code> \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0634\u06a9\u0644 \u0645\u06cc\u06ba \u062a\u0634\u06a9\u06cc\u0644 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 <code>ProductUiState<\/code> \u0645\u06cc\u06ba \u0688\u0627\u0631\u0679 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 UI \u06a9\u0648 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u0648\u06ba\u06d4 <code>switch<\/code> \u067e\u06cc\u0679\u0631\u0646 \u0645\u0644\u0627\u067e <code>sealed class<\/code> \u062f\u0631\u062c\u06c1 \u0628\u0646\u062f\u06cc \u062c\u06cc\u0633\u0627 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u0628\u06cc\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0679\u06cc\u0645 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0631\u06cc\u0648\u0631 \u067e\u0648\u0688 \u067e\u0631 \u0645\u0628\u0646\u06cc \u067e\u06cc\u0634 \u06a9\u0646\u0646\u062f\u06c1 \u0644\u06a9\u06be\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u0648\u0688 \u0628\u0627\u0644\u06a9\u0644 \u062a\u0628\u062f\u06cc\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0645\u067e\u0648\u0632\u06cc\u0634\u0646 \u0631\u0648\u0679 \u0645\u06cc\u06ba \u0635\u0631\u0641 \u0648\u0627\u0626\u0631\u0646\u06af \u062a\u0628\u062f\u06cc\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0633 \u067e\u0631\u06cc\u0632\u06cc\u0646\u0679\u0631 \u06a9\u0648 \u0648\u06cc\u062c\u06cc\u0679 \u0679\u0631\u06cc \u0645\u06cc\u06ba \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 LEGO \u0627\u0635\u0648\u0644 \u06c1\u06d2 \u062c\u0648 \u0633\u0628 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u063a\u06cc\u0631 \u0645\u0633\u062a\u062d\u06a9\u0645 \u0627\u0646\u062d\u0635\u0627\u0631 \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0631\u06cc\u0627\u0633\u062a\u06cc \u0646\u0638\u0645 \u0648 \u0646\u0633\u0642 \u06a9\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u062e\u0648\u062f \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0645\u062a\u0628\u0627\u062f\u0644 \u0627\u06cc\u0646\u0679 \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-a-full-worked-example-products-lego-style-with-clean-layers-inside\">\u0645\u06a9\u0645\u0644 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u0645\u062b\u0627\u0644: \u0627\u0646\u062f\u0631 \u0635\u0627\u0641 \u062a\u06c1\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be LEGO \u0637\u0631\u0632 \u06a9\u06cc \u0645\u0635\u0646\u0648\u0639\u0627\u062a\u06d4<\/h2>\n<p>\u06c1\u0645 \u06c1\u0631 \u0686\u06cc\u0632 \u06a9\u0648 \u0627\u06cc\u06a9 \u0645\u0631\u0628\u0648\u0637 \u062e\u0635\u0648\u0635\u06cc\u062a \u0645\u06cc\u06ba \u062c\u0645\u0639 \u06a9\u0631\u06cc\u06ba \u06af\u06d2\u060c \u0622\u067e \u06a9\u0648 \u0641\u0627\u0626\u0644 \u06a9\u0627 \u067e\u0648\u0631\u0627 \u062f\u0631\u062e\u062a \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u067e\u0631\u0632\u06d2 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0633\u06d2 \u0641\u0679 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062f\u06a9\u06be\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\">lib\/\n  core\/\n    contracts\/\n      product_lookup.dart          <- shared interface\n    di\/\n      service_locator.dart\n    feature_module.dart            <- app-shell contract\n  features\/\n    product\/\n      product.dart                 <- barrel file \/ public stud\n      product_module.dart          <- implements FeatureModule\n      domain\/\n        entities\/product.dart\n        repositories\/product_repository.dart\n        usecases\/get_product.dart\n      data\/\n        datasources\/product_remote_data_source.dart\n        repositories\/product_repository_impl.dart\n      presentation\/\n        cubit\/product_cubit.dart\n        widgets\/product_card.dart  <- composed UI bricks\n<\/code><\/pre>\n<p>\u0645\u0627\u0688\u06cc\u0648\u0644 \u0641\u0627\u0626\u0644\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0633\u0637\u062d\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u062c\u06af\u06c1 \u067e\u0631 \u0628\u0627\u0646\u062f\u06be\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-dart\">\/\/ lib\/features\/product\/product_module.dart\nimport 'package:dio\/dio.dart';\nimport 'package:go_router\/go_router.dart';\nimport 'package:app\/core\/feature_module.dart';\nimport 'package:app\/core\/di\/service_locator.dart';\nimport 'package:app\/core\/contracts\/product_lookup.dart';\nimport 'domain\/repositories\/product_repository.dart';\nimport 'domain\/usecases\/get_product.dart';\nimport 'data\/datasources\/product_remote_data_source.dart';\nimport 'data\/repositories\/product_repository_impl.dart';\nimport 'presentation\/screens\/product_screen.dart';\n\nclass ProductModule implements FeatureModule {\n  @override\n  void registerDependencies() {\n    getIt.registerLazySingleton(() => Dio());\n    getIt.registerLazySingleton(\n      () => ProductRemoteDataSource(getIt<dio>()),\n    );\n    getIt.registerLazySingleton<productrepository>(\n      () => ProductRepositoryImpl(getIt<productremotedatasource>()),\n    );\n    \/\/ this repository ALSO satisfies the cross-feature ProductLookup\n    \/\/ contract, so cart (or any other feature) can use it\n    \/\/ without ever importing anything from this feature's src\/.\n    getIt.registerLazySingleton<productlookup>(\n      () => getIt<productrepository>() as ProductLookup,\n    );\n    getIt.registerFactory(() => GetProduct(getIt<productrepository>()));\n  }\n\n  @override\n  List<routebase> get routes => [\n        GoRoute(\n          path: '\/product\/:id',\n          builder: (context, state) =>\n              ProductScreen(productId: state.pathParameters['id']!),\n        ),\n      ];\n}\n<\/routebase><\/productrepository><\/productrepository><\/productlookup><\/productremotedatasource><\/productrepository><\/dio><\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u0628\u0627\u0644\u06a9\u0644 \u0627\u06cc\u06a9 \u06a9\u0627\u0645 (\u0627\u0633\u0645\u0628\u0644\u06cc) \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 \u0645\u0646\u0633\u0644\u06a9 \u0627\u0646\u062d\u0635\u0627\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u0633\u0645\u062a \u0645\u06cc\u06ba \u0628\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0688\u06cc\u0679\u0627 \u0633\u06d2 \u0644\u06d2 \u06a9\u0631 \u0688\u0648\u0645\u06cc\u0646 \u062a\u06a9 \u067e\u0631\u06cc\u0632\u0646\u0679\u06cc\u0634\u0646 \u062a\u06a9\u060c \u067e\u0686\u06be\u0644\u06d2 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u06a9\u06d2 \u0645\u0637\u0627\u0628\u0642\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u06a9\u0648 \u067e\u0648\u0631\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>FeatureModule<\/code> \u06a9\u0646\u0641\u06cc\u06af\u0631\u06cc\u0634\u0646 \u0641\u06cc\u0686\u0631 \u0633\u06cc\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0645\u0639\u0627\u06c1\u062f\u06c1\u060c \u06cc\u0639\u0646\u06cc <code>app.dart<\/code> \u06c1\u06cc\u0646\u0688\u0644 <code>ProductModule<\/code> \u06cc\u06a9\u0633\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 <code>CartModule<\/code>. \u06cc\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 \u0635\u0631\u0641 \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0627\u06cc\u0646\u0679 \u06c1\u06d2\u06d4 <code>modules<\/code> \u0627\u0646\u0648\u06cc\u0646\u0679\u0631\u06cc<\/p>\n<p>\u0642\u0627\u0628\u0644 \u062a\u0648\u062c\u06c1 \u0688\u06cc\u0632\u0627\u0626\u0646 \u06a9\u06d2 \u0641\u06cc\u0635\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba: <code>ProductRepositoryImpl<\/code> \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062f\u0648 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0645\u0642\u0627\u0645\u06cc \u0627\u0641\u0639\u0627\u0644 <code>ProductRepository<\/code>\u06cc\u06c1 \u062e\u0635\u0648\u0635\u06cc\u062a \u0627\u0633 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0639\u0627\u0645\u0644\u06d2 \u0645\u06cc\u06ba \u0627\u0648\u0631 \u06a9\u0631\u0627\u0633 \u0641\u0646\u06a9\u0634\u0646\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 <code>ProductLookup<\/code>\u06cc\u06c1 \u062f\u06cc\u06af\u0631 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u0627\u0631\u0679\u0633\u060c \u062c\u0646 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u0631\u0641 \u0627\u0646 \u06a9\u0627\u0645\u0648\u06ba \u06a9\u0627 \u0627\u06cc\u06a9 \u0630\u06cc\u0644\u06cc \u0633\u06cc\u0679 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06cc\u06c1 \u0641\u06cc\u0686\u0631 \u0627\u0646\u062c\u0627\u0645 \u062f\u06d2 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0627\u06cc\u0688\u0648\u0627\u0646\u0633\u0688 LEGO \u067e\u06cc\u0679\u0631\u0646 \u06c1\u06d2 \u062c\u06c1\u0627\u06ba \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u06a9\u06cc \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u0626\u06cc \u0645\u062e\u062a\u0644\u0641 \u0634\u06a9\u0644 \u0648\u0627\u0644\u06d2 \u062c\u0691\u0648\u06ba \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u062a\u0639\u062f\u062f \u0635\u0627\u0631\u0641\u06cc\u0646 \u06a9\u0648 \u0627\u06cc\u06a9 \u062f\u0648\u0633\u0631\u06d2 \u06cc\u0627 \u067e\u0648\u0631\u06cc \u062e\u0635\u0648\u0635\u06cc\u062a \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0635\u0631\u0641 \u0627\u0646 \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0633\u0637\u062d \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/umang.pk\/wp-content\/uploads\/2026\/09\/1789332114_395_\u0641\u0644\u0679\u0631-\u0645\u06cc\u06ba-\u0644\u06cc\u06af\u0648-\u0641\u0646-\u062a\u0639\u0645\u06cc\u0631-\u06a9\u0648-\u06a9\u06cc\u0633\u06d2-\u0646\u0627\u0641\u0630-\u06a9\u06cc\u0627-\u062c\u0627\u0626\u06d2\u06d4.png\" alt=\"\u0627\u06cc\u06a9 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0688\u0627\u06cc\u0627\u06af\u0631\u0627\u0645 \u062c\u0633 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0679\u06be\u0648\u0633 \u0646\u0641\u0627\u0630 \u062f\u06a9\u06be\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u0648 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: \u0627\u06cc\u06a9 \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u062c\u0648 \u0635\u0631\u0641 \u067e\u0631\u0648\u0688\u06a9\u0679 \u06a9\u06cc \u0641\u0639\u0627\u0644\u06cc\u062a \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u062a\u0646\u06af \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u062c\u0648 \u062f\u06cc\u06af\u0631 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u062c\u06cc\u0633\u06d2 \u06a9\u06c1 \u06a9\u0627\u0631\u0679 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4\" style=\"display: block;\" width=\"600\" height=\"400\" loading=\"lazy\" title=\"\"><\/p>\n<h2 id=\"heading-when-to-use-which-and-common-pitfalls\">\u0627\u0633\u06d2 \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0639\u0627\u0645 \u0646\u0642\u0635\u0627\u0646\u0627\u062a<\/h2>\n<p>\u0645\u062e\u062a\u0635\u0631 \u0679\u0627\u0626\u0645 \u0644\u0627\u0626\u0646\u0632 \u0627\u0648\u0631 \u0686\u0646\u062f \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u0648\u0627\u0644\u06cc \u0686\u06be\u0648\u0679\u06cc \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 LEGO \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u06cc \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0633\u0637\u062d \u067e\u0631 \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u062a\u062c\u0648\u06cc\u0632 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u06a9 \u0648\u06cc\u062c\u06cc\u0679 \u0644\u06a9\u06be\u06cc\u06ba\u060c \u0686\u0646\u062f \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u06cc\u06ba \u062c\u0646 \u06a9\u06d2 \u0646\u0641\u0627\u0630 \u06a9\u06cc \u0622\u067e \u062a\u0648\u0642\u0639 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba (\u0645\u062b\u0644\u0627\u064b \u0646\u06cc\u0679 \u0648\u0631\u06a9 \u06a9\u0644\u0627\u0626\u0646\u0679 \u06cc\u0627 \u062a\u0648\u062b\u06cc\u0642)\u060c \u0627\u0648\u0631 \u0627\u062f\u0627\u0631\u0648\u06ba\u060c \u06a9\u06cc\u0633\u0632 \u0627\u0648\u0631 DTOs \u06a9\u0648 \u0627\u0633 \u0641\u0639\u0627\u0644\u06cc\u062a \u067e\u0631 \u0645\u062c\u0628\u0648\u0631 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba \u062c\u0648 \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0641\u06c1\u0631\u0633\u062a \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0635\u0627\u0631\u0641 \u06a9\u0648 \u0622\u0626\u0679\u0645\u0632 \u067e\u0631 \u0679\u06cc\u067e \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u06c1\u06cc \u06a9\u0648\u0688\u0628\u06cc\u0633\u060c \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644\u0648\u06ba \u0627\u0648\u0631 \u067e\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0645\u062a\u0639\u062f\u062f \u0627\u0641\u0631\u0627\u062f \u06a9\u06cc \u0628\u0691\u06be\u062a\u06cc \u06c1\u0648\u0626\u06cc \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 <code>FeatureModule<\/code> \u0645\u0639\u0627\u06c1\u062f\u06c1 \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0636\u0645 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0627\u0648\u0631 \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u062c\u0648\u0691\u06d2 \u06a9\u0648 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0688\u0648\u0645\u06cc\u0646 \u0645\u0646\u0637\u0642 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0633\u06d2 UI \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0633\u06d2 \u0628\u0627\u06c1\u0631 \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u06cc\u0627 \u0628\u06cc\u06a9 \u0627\u06cc\u0646\u0688 \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u06c1\u0631 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0627\u06cc\u06a9 \u0645\u06a9\u0645\u0644 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u067e\u0631\u062a \u0645\u062a\u0639\u0627\u0631\u0641 \u06a9\u0631\u0648\u0627\u0646\u0627 \u0627\u067e\u0646\u06d2 \u0622\u067e \u0645\u06cc\u06ba \u0642\u06cc\u0645\u062a\u06cc \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0627\u0635\u0648\u0644 \u0627\u0628 \u0645\u0639\u0645\u0648\u0644\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06c1 \u062c\u0627\u062a\u06d2\u06d4 \u0627\u0633 \u0645\u06cc\u06ba \u0631\u0639\u0627\u06cc\u062a\u060c \u0679\u06cc\u06a9\u0633 \u06a9\u06d2 \u0636\u0648\u0627\u0628\u0637\u060c \u0627\u06c1\u0644\u06cc\u062a \u06a9\u06cc \u062c\u0627\u0646\u0686\u060c \u0627\u0633\u0679\u06cc\u0679\u0633 \u0633\u0633\u0679\u0645\u060c \u0627\u0648\u0631 \u0628\u06c1\u062a \u06a9\u0686\u06be \u0634\u0627\u0645\u0644 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u0633\u06d2 \u0688\u06cc\u0632\u0627\u0626\u0646 \u0633\u0633\u0679\u0645\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0648 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0645\u062a\u0639\u062f\u062f \u0679\u06cc\u0645\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0627\u06cc\u067e\u0633 \u0645\u06cc\u06ba \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0627\u0688\u06cc\u0648\u0644\u0631 \u0645\u0648\u0646\u0648\u0631\u06cc\u067e\u0648 \u067e\u06cc\u0679\u0631\u0646 \u067e\u0631 \u062c\u0627\u0646\u0627 \u0633\u0645\u062c\u06be \u0645\u06cc\u06ba \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062e\u0635\u0648\u0635\u06cc\u0627\u062a \u0627\u0635\u0644 \u067e\u06cc\u06a9\u06cc\u062c\u0632 \u0628\u0646 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0631\u062a\u0628 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0648\u0688 \u06a9\u06d2 \u062c\u0627\u0626\u0632\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062d\u062f\u0648\u062f \u06a9\u0648 \u0646\u0627\u0641\u0630 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u06a9\u06d2 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u062f\u0648 \u0637\u0631\u06cc\u0642\u06d2 \u06c1\u06cc\u06ba: \u067e\u06c1\u0644\u0627 \u0635\u0631\u0641 \u0646\u0627\u0645 \u0645\u06cc\u06ba LEGO \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0627 \u0646\u0627\u0645 \u06c1\u06d2: <code>features\/cart\/<\/code>\u062a\u0627\u06c1\u0645 \u0627\u0633 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u0648\u062c\u0648\u062f \u0641\u0627\u0626\u0644\u06cc\u06ba \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u067e\u06c1\u0646\u0686 \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 <code>..\/..\/product\/src\/services\/product_repository.dart<\/code>. \u062c\u0633 \u0644\u0645\u062d\u06d2 \u0627\u06cc\u06a9 \u0641\u0627\u0626\u0644 \u062f\u0648\u0633\u0631\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u06cc \u0628\u06cc\u0631\u0644 \u0641\u0627\u0626\u0644 \u0633\u06d2 \u06af\u0632\u0631\u062a\u06cc \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u0641\u0646\u06a9\u0634\u0646 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u062a\u06cc \u06c1\u06d2\u06d4 <code>src\/<\/code>\u0622\u0632\u0627\u062f \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0627 \u0627\u0628 \u06a9\u0648\u0626\u06cc \u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u062c\u0648 \u0628\u0627\u0642\u06cc \u0631\u06c1 \u06af\u06cc\u0627 \u06c1\u06d2 \u0648\u06c1 \u0641\u06cc\u0686\u0631 \u0641\u0648\u0644\u0688\u0631 \u06a9\u0627\u0633\u0679\u06cc\u0648\u0645 \u067e\u06c1\u0646\u06d2 \u06c1\u0648\u0626\u06d2 \u0627\u06cc\u06a9 \u06cc\u06a9 \u0633\u0646\u06af\u06cc \u06c1\u06d2\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 \u062f\u0648\u0633\u0631\u06d2 \u0627\u0644\u0641\u0627\u0638 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u0645\u0639\u0627\u06c1\u062f\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0648 \u0631\u0648\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>core\/contracts\/<\/code>.<\/p>\n<p>\u062f\u0648\u0633\u0631\u0627 \u062e\u0627\u0644\u0635 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0627\u0631\u06af\u0648 \u06a9\u0644\u0679\u0646\u06af \u06c1\u06d2\u060c \u062c\u06c1\u0627\u06ba \u062d\u0642\u06cc\u0642\u062a \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0641\u06c1\u0631\u0633\u062a \u0644\u06cc\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u067e\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0635\u0644\u0627\u062d\u06cc\u062a \u0627\u062f\u0627\u0631\u0648\u06ba\u060c \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u0627\u0646\u0679\u0631\u0641\u06cc\u0633\u060c \u0627\u0633\u0679\u0648\u0631\u06cc\u062c \u06a9\u06d2 \u0646\u0641\u0627\u0630\u060c \u0688\u06cc \u0679\u06cc \u0627\u0648\u0632\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u06a9\u06cc\u0633\u0632 \u0627\u0648\u0631 \u06a9\u0648\u0626\u0628\u0679\u0633 \u067e\u0631 \u062e\u062a\u0645 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u067e\u0631 6 \u0641\u0627\u0626\u0644\u06cc\u06ba \u0627\u0648\u0631 3 \u067e\u0631\u062a\u06cc\u06ba \u06c1\u06cc\u06ba \u062c\u0646 \u0645\u06cc\u06ba \u06a9\u0648\u0626\u06cc \u062d\u0642\u06cc\u0642\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0642\u0637\u0639\u06cc \u0637\u0648\u0631 \u067e\u0631 \u063a\u0644\u0637 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u06d2 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0627 \u067e\u0648\u0631\u0627 \u0646\u06a9\u062a\u06c1 \u063a\u06cc\u0631 \u0645\u0633\u062a\u062d\u06a9\u0645 \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0633\u06d2 \u0628\u0686\u0627\u0646\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1\u0627\u06ba \u062a\u062d\u0641\u0638 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0648\u0626\u06cc \u06a9\u0627\u0631\u0648\u0628\u0627\u0631\u06cc \u0645\u0646\u0637\u0642 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06cc\u06c1 \u0627\u06cc\u06a9 \u0636\u0627\u0626\u0639 \u06a9\u0648\u0634\u0634 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u0641\u0646\u06a9\u0634\u0646 \u0645\u06cc\u06ba \u0633\u0631\u0648\u0631 \u06a9\u06cc \u0628\u06be\u06cc\u062c\u06cc \u06c1\u0648\u0626\u06cc \u0686\u06cc\u0632\u0648\u06ba \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0639\u0644\u0627\u0648\u06c1 \u06a9\u0648\u0626\u06cc \u0627\u0635\u0648\u0644 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06cc\u06c1 \u0627\u0686\u06be\u0627 \u062e\u06cc\u0627\u0644 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u0679\u0648\u0631 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a DTO \u0641\u0627\u0631\u0645 \u0648\u0627\u067e\u0633 \u06a9\u0631\u06d2 \u0627\u0648\u0631 \u06c1\u0633\u062a\u06cc \u06a9\u0648 \u0686\u06be\u0648\u0691 \u06a9\u0631 \u06a9\u06cc\u0633 \u06a9\u06d2 \u0648\u0627\u0642\u0639\u0627\u062a \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06d2\u06d4 \u0627\u0646 \u062a\u06c1\u0648\u06ba \u06a9\u0648 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0642\u062a \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0648\u0642\u062a \u062d\u0642\u06cc\u0642\u06cc \u0645\u0646\u0637\u0642 \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u0642\u06cc\u0627\u0633 \u0622\u0631\u0627\u0626\u06cc \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0646\u0627\u0646\u06d2 \u0645\u06cc\u06ba \u0648\u0642\u062a \u0636\u0627\u0626\u0639 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<h2 id=\"heading-wrapping-up\">\u062e\u062a\u0645<\/h2>\n<p>LEGO \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u06a9\u0648\u0688 \u06a9\u0648 \u062a\u0631\u062a\u06cc\u0628 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0648\u0686\u06cc\u06ba\u060c \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0622\u067e \u0627\u0646\u0633\u0679\u0627\u0644 \u06cc\u0627 \u06a9\u0627\u067e\u06cc \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u062a\u0639\u0645\u06cc\u0631 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0622\u067e \u0633\u0628 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u0622\u067e \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u06a9\u0633 \u0637\u0631\u062d \u062c\u0648\u0691\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0628\u0627\u062a \u06a9\u0627 \u062a\u0639\u06cc\u0646 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06a9\u06c1 \u06c1\u0631 \u062d\u0635\u06c1 \u06a9\u0646 \u062d\u0635\u0648\u06ba \u067e\u0631 \u0645\u0646\u062d\u0635\u0631 \u06c1\u06d2 \u0627\u0648\u0631 \u06a9\u0646 \u062d\u0635\u0648\u06ba \u06a9\u0648 \u062f\u0648\u0633\u0631\u06d2 \u062d\u0635\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u0645\u0646\u06d2 \u0644\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u06cc\u06c1 \u0627\u0635\u0648\u0644 \u0648\u0627\u0636\u062d \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06c1\u0645 \u06c1\u0631 \u062c\u0632\u0648 \u06a9\u06cc \u062f\u0627\u062e\u0644\u06cc \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u06a9\u0648 \u0646\u062c\u06cc \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u0627\u0646 \u06a9\u06d2 \u0627\u0631\u062f \u06af\u0631\u062f \u0627\u0635\u0644 \u06a9\u0644\u0627\u0633\u0632 \u0627\u0648\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u062f\u06cc\u06af\u0631 \u062d\u0635\u06d2 \u0635\u0631\u0641 \u0639\u0648\u0627\u0645\u06cc \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u06c1\u06cc \u062a\u0639\u0627\u0645\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u06cc\u06c1 \u06a9\u0646\u06a9\u0631\u06cc\u0679 \u06a9\u06d2 \u0679\u06a9\u0691\u0648\u06ba \u06a9\u0648 \u06a9\u0648\u0688 \u0628\u06cc\u0633 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u067e\u06cc\u062f\u0627 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u0648\u0627\u0636\u062d \u0627\u0633\u0645\u0628\u0644\u06cc \u067e\u0648\u0627\u0626\u0646\u0679 \u067e\u0631 \u0627\u06a9\u0679\u06be\u0627 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0648\u06c1 \u06c1\u06d2 \u062c\u0648 \u0622\u067e \u06a9\u0648 \u062d\u0627\u0635\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0622\u067e \u0627\u0646\u06c1\u06cc \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u062e\u0635\u0648\u0635\u06cc\u062a \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0645\u062e\u0635\u0648\u0635\u060c \u0627\u0686\u06be\u06cc \u0637\u0631\u062d \u0633\u06d2 \u062c\u0627\u0646\u0686 \u0634\u062f\u06c1 \u0634\u06a9\u0644\u06cc\u06ba (\u0627\u06cc\u0646\u0679\u06cc\u060c \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0633\u0632 \u0627\u0648\u0631 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc) \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u06d4<\/p>\n<p>\u0622\u062c \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u062c\u06af\u06c1 \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u0648\u06cc\u062c\u06cc\u0679 \u06a9\u06cc \u0633\u062c\u0627\u0648\u0679 \u06a9\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0648 \u0627\u067e\u0646\u06d2 \u0648\u06cc\u062c\u06cc\u0679 \u0645\u06cc\u06ba \u062f\u0631\u0622\u0645\u062f \u06a9\u0631\u0646\u0627 \u06c1\u06d2\u06d4 <code>SurfaceCard<\/code>- \u0627\u0633\u0679\u0627\u0626\u0644 \u06a9\u0627 \u062c\u0632\u0648\u06d4 \u0627\u06af\u0644\u06cc \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0633\u0631\u0648\u0633 \u06a9\u0644\u0627\u0633 \u0644\u06a9\u06be\u06cc\u06ba \u062a\u0648 \u0627\u0633\u06d2 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u062e\u0644\u0627\u0635\u06c1 \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u0633 \u06c1\u06cc\u0646\u0688 \u0628\u06a9 \u0645\u06cc\u06ba \u0628\u0627\u0642\u06cc \u0633\u0628 \u06a9\u0686\u06be - \u0641\u0646\u06a9\u0634\u0646\u0644 \u0645\u0627\u0688\u06cc\u0648\u0644\u0632\u060c \u0633\u0631\u0648\u0633 \u0644\u0648\u06a9\u06cc\u0679\u0631\u060c \u0645\u0627\u0688\u06cc\u0648\u0644\u0631 \u0645\u0648\u0646\u0648\u0631\u067e\u0648\u0632\u060c \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0644\u06cc\u0626\u0631\u0632 - \u06cc\u06c1 \u0648\u06c1\u06cc \u0639\u0627\u062f\u0627\u062a \u06c1\u06cc\u06ba \u062c\u0648 \u0628\u0691\u06d2 \u067e\u06cc\u0645\u0627\u0646\u06d2 \u067e\u0631 \u062f\u06c1\u0631\u0627\u0626\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-references\">\u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a<\/h2>\n<p><strong>\u0631\u0627\u0628\u0631\u0679 \u0633\u06cc \u0645\u0627\u0631\u0679\u0646 \u06a9\u0627 \u06a9\u0644\u06cc\u0646 \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u0628\u0644\u0627\u06af:<\/strong> https:\/\/blog.cleancoder.com\/uncle-bob\/2012\/08\/13\/the-clean-architecture.html<\/p>\n<p><strong>\u0641\u0644\u0679\u0631 \u06a9\u06cc \u0622\u0641\u06cc\u0634\u0644 \u0627\u06cc\u067e \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631 \u06af\u0627\u0626\u06cc\u0688:<\/strong> https:\/\/docs.flutter.dev\/app-architecture<\/p>\n<p><strong>\u0641\u0644\u0679\u0631 \u06a9\u06cc \u0622\u0631\u06a9\u06cc\u0679\u06cc\u06a9\u0686\u0631\u0644 \u0688\u06cc\u0632\u0627\u0626\u0646 \u067e\u06cc\u0679\u0631\u0646 \u06a9\u06cc \u062a\u0631\u06a9\u06cc\u0628:<\/strong> https:\/\/docs.flutter.dev\/app-architecture\/design-patterns<\/p>\n<p><strong>get_it \u067e\u06cc\u06a9\u06cc\u062c \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a:<\/strong> https:\/\/pub.dev\/packages\/get_it<\/p>\n<p><strong>go_router \u067e\u06cc\u06a9\u06cc\u062c \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a:<\/strong> https:\/\/pub.dev\/packages\/go_router<\/p>\n<p><strong>flutter_bloc \u067e\u06cc\u06a9\u06cc\u062c \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a:<\/strong> https:\/\/pub.dev\/packages\/flutter_bloc<\/p>\n<p><strong>dio \u067e\u06cc\u06a9\u06cc\u062c \u062f\u0633\u062a\u0627\u0648\u06cc\u0632\u0627\u062a:<\/strong> https:\/\/pub.dev\/packages\/dio<\/p>\n<p><strong>\u0645\u06cc\u0644\u0648\u0633\u060c \u0688\u0627\u0631\u0679 \u0627\u0648\u0631 \u0641\u0644\u0679\u0631 \u0633\u0646\u06af\u0644 \u0631\u06cc\u067e\u0648\u0632\u0679\u0631\u06cc \u06a9\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0679\u0648\u0644:<\/strong> https:\/\/melos.invertase.dev\/<\/p>\n<p><strong>\u0645\u0624\u062b\u0631 \u0688\u0627\u0631\u0679\u060c \u0631\u0633\u0645\u06cc \u0627\u0646\u062f\u0627\u0632 \u0627\u0648\u0631 \u0633\u0627\u062e\u062a \u06a9\u06d2 \u0631\u06c1\u0646\u0645\u0627 \u062e\u0637\u0648\u0637:<\/strong> https:\/\/dart.dev\/valid-dart<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u06c1\u0631 \u0627\u06cc\u06a9 \u0646\u06d2 \u0627\u067e\u0646\u06cc \u0628\u0627\u0644\u063a \u0632\u0646\u062f\u06af\u06cc \u0645\u06cc\u06ba \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u0633\u06cc\u0679 \u06a9\u06d2 \u0628\u063a\u06cc\u0631 \u062f\u0648 LEGO \u0627\u06cc\u0646\u0679\u0648\u06ba \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0648\u0691\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06cc\u0646\u0679 \u06a9\u0648 \u062f\u0648\u0633\u0631\u06cc \u0627\u06cc\u0646\u0679 \u067e\u0631 \u062f\u0628\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u06cc\u06c1 \u062c\u06af\u06c1 \u067e\u0631 \u06a9\u0644\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0622\u067e \u0646\u06d2 \u0634\u0627\u06cc\u062f \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0633\u0648\u0686\u0627 \u06c1\u0648 \u06af\u0627 \u06a9\u06c1 \u0627\u06cc\u0646\u0679 \u06a9\u06cc\u0633\u06d2 \u0628\u0646\u062a\u06cc \u06c1\u06d2\u060c \u06a9\u0648\u0646 \u0633\u0627 \u067e\u0644\u0627\u0633\u0679\u06a9 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":29275,"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-29274","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\/29274","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=29274"}],"version-history":[{"count":1,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29274\/revisions"}],"predecessor-version":[{"id":29276,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/29274\/revisions\/29276"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media\/29275"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=29274"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=29274"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=29274"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}