{"id":74788,"date":"2024-08-26T06:52:59","date_gmt":"2024-08-26T03:22:59","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/"},"modified":"2024-08-26T06:52:59","modified_gmt":"2024-08-26T03:22:59","slug":"clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/","title":{"rendered":"\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0648 BLoC \u062f\u0631 \u0641\u0644\u0627\u062a\u0631: \u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062c\u0627\u0645\u0639 \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646 \u0648 \u0645\u062a\u062e\u0635\u0635\u0627\u0646"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n            Flutter \u0631\u0648\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0648\u0628 \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0645\u062a\u062d\u0648\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627\u060c \u0628\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc\u060c \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0648 BLoC (\u062c\u0632\u0621 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc) \u0627\u0644\u06af\u0648 \u0648\u0627\u0631\u062f \u0628\u0627\u0632\u06cc \u0645\u06cc \u0634\u0648\u062f \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0627\u0633\u0627\u0633\u06cc \u0648 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0648 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u0628\u062a\u062f\u06cc \u0648 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u062f\u0631\u06a9 \u06a9\u0646\u0646\u062f.<\/p>\n<p>  \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0686\u06cc\u0633\u062a\u061f<br \/>\n\u0686\u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<br \/>\n\u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<br \/>\n\u0645\u0642\u062f\u0645\u0647 \u0627\u06cc \u0628\u0631 \u0627\u0644\u06af\u0648\u06cc BLoC<br \/>\n\u0686\u0631\u0627 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9\u061f<\/p>\n<p>\u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Flutter \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC<\/p>\n<p>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<br \/>\n\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<br \/>\n\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<br \/>\n\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (BLoC)<\/p>\n<p>\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u06a9\u0627\u0645\u0644<br \/>\n\u062a\u0633\u062a \u0645\u0639\u0645\u0627\u0631\u06cc<br \/>\n\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0646\u06a9\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/p>\n<p>  1. \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0686\u06cc\u0633\u062a\u061f<\/p>\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0637 \u0631\u0627\u0628\u0631\u062a \u0633\u06cc \u0645\u0627\u0631\u062a\u06cc\u0646 (\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0639\u0645\u0648 \u0628\u0627\u0628 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f). \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc Clean Code Architecture \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u0647\u0627. \u0627\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627 \u0628\u0647 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f \u0644\u0627\u06cc\u0647 \u0647\u0627\u060c \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0645\u0634\u062e\u0635\u06cc \u062f\u0627\u0631\u0646\u062f. \u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0647\u0627 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<p>\u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (UI)<\/p>\n<p>\u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 (\u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631)<\/p>\n<p>\u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647 (\u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0647\u0627)<\/p>\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u06cc\u0646 \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0627\u0632 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a \u0645\u0627\u0646\u0646\u062f \u0686\u0627\u0631\u0686\u0648\u0628\u200c\u0647\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u067e\u0627\u06cc\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u06cc\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647\u060c \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u0646\u062f \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u062a\u0631\u060c \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u062a\u0631.<\/p>\n<p>  \u0627\u0635\u0648\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9<\/p>\n<p>\u062a\u0641\u06a9\u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc \u0647\u0627: \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u06a9\u062f \u0628\u0627\u06cc\u062f \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0627\u0633\u062a\u0642\u0644\u0627\u0644: \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 UI\u060c \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u06cc\u0627 \u0647\u0631 \u0686\u0627\u0631\u0686\u0648\u0628 \u062e\u0627\u0631\u062c\u06cc \u0628\u0627\u0634\u062f.<\/p>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc: \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0627\u0632 \u0639\u0646\u0627\u0635\u0631 \u062e\u0627\u0631\u062c\u06cc \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u0622\u0646 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0627\u0633\u062a.<\/p>\n<p>  2. \u0686\u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<\/p>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 Flutter \u0627\u0645\u06a9\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u0633\u0631\u06cc\u0639 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u062a\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u0646\u062f \u062f\u0644\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Code Architecture \u062f\u0631 Flutter \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>\u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc: \u062a\u0641\u06a9\u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0631\u0648\u06cc \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u062a\u0623\u062b\u06cc\u0631 \u0646\u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u062f.<\/p>\n<p>\u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc: \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0634\u062f \u0645\u06cc \u06a9\u0646\u062f\u060c Clean Architecture \u06af\u0633\u062a\u0631\u0634 \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062c\u062f\u062f \u0628\u062e\u0634 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u06cc \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc: \u0628\u0627 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u062f\u0648\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u06cc\u0627 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647\u060c \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0645\u0639\u0646\u06cc \u062f\u0627\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/p>\n<p>  3. \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<\/p>\n<p>\u062f\u0631 Clean Code Architecture\u060c \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0627\u0635\u0644\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<p>  1. \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 (\u0647\u0633\u062a\u0647)<\/p>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u062a \u0642\u0644\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627. \u0634\u0627\u0645\u0644:<\/p>\n<p>\u0646\u0647\u0627\u062f\u0647\u0627: \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062f\u0627\u0631\u062a \u0633\u0627\u062f\u0647 \u06a9\u0647 \u0645\u062f\u0644 \u0647\u0627\u06cc \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f.<\/p>\n<p>\u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647: \u062a\u0639\u0627\u0645\u0644 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u0637\u0642 \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631 \u0645\u06cc \u06af\u06cc\u0631\u0646\u062f.<\/p>\n<p>\u0645\u062e\u0627\u0632\u0646: \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0647\u0627\u06cc \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u06a9\u0647 \u0646\u062d\u0648\u0647 \u0648\u0627\u06a9\u0634\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\/\/ entities\/user_entity.dart<br \/>\nclass UserEntity {<br \/>\n  final String id;<br \/>\n  final String name;<\/p>\n<p>  UserEntity({required this.id, required this.name});<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\/\/ usecases\/get_user_usecase.dart<br \/>\nclass GetUserUseCase {<br \/>\n  final UserRepository repository;<\/p>\n<p>  GetUserUseCase(this.repository);<\/p>\n<p>  FutureUserEntity&gt; execute(String userId) {<br \/>\n    return repository.getUser(userId);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  2. \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/p>\n<p>\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u0645\u062e\u0632\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u062f\u0631 \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0634\u0627\u0645\u0644:<\/p>\n<p>\u0645\u062f\u0644 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647: \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc \u0634\u062f\u0647 \u0627\u0632 API \u0647\u0627 \u06cc\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p>\u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0634\u0628\u06a9\u0647\u060c \u067e\u0627\u06cc\u06af\u0627\u0647 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0648 \u063a\u06cc\u0631\u0647.<\/p>\n<p>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u062e\u0632\u0646: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u06cc \u0639\u06cc\u0646\u06cc \u0645\u062e\u0632\u0646.<\/p>\n<p>\/\/ data\/models\/user_model.dart<br \/>\nclass UserModel {<br \/>\n  final String id;<br \/>\n  final String name;<\/p>\n<p>  UserModel({required this.id, required this.name});<\/p>\n<p>  factory UserModel.fromJson(MapString, dynamic&gt; json) {<br \/>\n    return UserModel(<br \/>\n      id: json[&#8216;id&#8217;],<br \/>\n      name: json[&#8216;name&#8217;],<br \/>\n    );<br \/>\n  }<\/p>\n<p>  MapString, dynamic&gt; toJson() {<br \/>\n    return {<br \/>\n      &#8216;id&#8217;: id,<br \/>\n      &#8216;name&#8217;: name,<br \/>\n    };<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\/\/ data\/repositories\/user_repository_impl.dart<br \/>\nclass UserRepositoryImpl implements UserRepository {<br \/>\n  final RemoteDataSource remoteDataSource;<\/p>\n<p>  UserRepositoryImpl(this.remoteDataSource);<\/p>\n<p>  @override<br \/>\n  FutureUserEntity&gt; getUser(String userId) async {<br \/>\n    final userModel = await remoteDataSource.fetchUser(userId);<br \/>\n    return UserEntity(id: userModel.id, name: userModel.name);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  3. \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647<\/p>\n<p>\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0634\u0627\u0645\u0644 UI \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc \u0645\u0646\u0637\u0642 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0627\u0644\u06af\u0648\u06cc BLoC \u0645\u0627 \u0627\u0632 BLoC \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0636\u0639\u06cc\u062a \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\/\/ presentation\/bloc\/user_bloc.dart<br \/>\nclass UserBloc extends BlocUserEvent, UserState&gt; {<br \/>\n  final GetUserUseCase getUserUseCase;<\/p>\n<p>  UserBloc(this.getUserUseCase) : super(UserInitial());<\/p>\n<p>  @override<br \/>\n  StreamUserState&gt; mapEventToState(UserEvent event) async* {<br \/>\n    if (event is GetUserEvent) {<br \/>\n      yield UserLoading();<br \/>\n      try {<br \/>\n        final user = await getUserUseCase.execute(event.userId);<br \/>\n        yield UserLoaded(user);<br \/>\n      } catch (e) {<br \/>\n        yield UserError(&#8220;Couldn&#8217;t fetch user&#8221;);<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  4. \u0645\u0642\u062f\u0645\u0647 \u0627\u06cc \u0628\u0631 \u0627\u0644\u06af\u0648\u06cc BLoC<\/p>\n<p>BLoC (\u062c\u0632\u0621 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc) \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0644\u062a \u0627\u0633\u062a \u06a9\u0647 \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642 \u0627\u0631\u0627\u0626\u0647 \u0631\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u062f\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0644\u0627\u062a\u0631 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u0644\u06af\u0648\u06cc BLoC \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<p>\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627: \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06cc\u0627\u0644\u0627\u062a: \u0648\u0636\u0639\u06cc\u062a \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627.<\/p>\n<p>BLoC: \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0646\u06af\u0627\u0634\u062a \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0628\u0647 \u0627\u06cc\u0627\u0644\u062a \u0647\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0645\u0632\u06cc\u062a \u0627\u0635\u0644\u06cc BLoC \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u0645. BLoC \u0628\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u06af\u0648\u0634 \u0645\u06cc \u062f\u0647\u062f (\u0645\u0627\u0646\u0646\u062f \u0641\u0634\u0627\u0631 \u062f\u0627\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0647\u0627) \u0648 \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 UI \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0622\u0646\u0647\u0627 \u06af\u0648\u0634 \u062f\u0647\u062f.<\/p>\n<p>\/\/ Event<br \/>\nabstract class UserEvent {}<\/p>\n<p>class GetUserEvent extends UserEvent {<br \/>\n  final String userId;<\/p>\n<p>  GetUserEvent(this.userId);<br \/>\n}<\/p>\n<p>\/\/ State<br \/>\nabstract class UserState {}<\/p>\n<p>class UserInitial extends UserState {}<\/p>\n<p>class UserLoading extends UserState {}<\/p>\n<p>class UserLoaded extends UserState {<br \/>\n  final UserEntity user;<\/p>\n<p>  UserLoaded(this.user);<br \/>\n}<\/p>\n<p>class UserError extends UserState {<br \/>\n  final String message;<\/p>\n<p>  UserError(this.message);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  5. \u0686\u0631\u0627 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9\u061f<\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062c\u062f\u0627\u06cc\u06cc \u0648\u0627\u0636\u062d \u0628\u06cc\u0646 UI \u0648 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc\u060c \u062a\u0633\u062a \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f. BLoC \u0645\u0633\u0626\u0648\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0646\u062a\u0642\u0627\u0644\u200c\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u062c\u0627\u0631\u06cc \u0627\u0633\u062a\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u06a9\u0647 BLoC \u0641\u0642\u0637 \u0628\u0627 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648 \u0645\u062e\u0627\u0632\u0646\u060c \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0631\u062f.<\/p>\n<p>  6. \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0641\u0644\u0627\u062a\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC \u0628\u0633\u0627\u0632\u06cc\u0645. \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 API \u0648\u0627\u06a9\u0634\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/p>\n<p>lib\/<br \/>\n\u251c\u2500\u2500 data\/<br \/>\n\u2502   \u251c\u2500\u2500 models\/<br \/>\n\u2502   \u251c\u2500\u2500 repositories\/<br \/>\n\u2502   \u2514\u2500\u2500 datasources\/<br \/>\n\u251c\u2500\u2500 domain\/<br \/>\n\u2502   \u251c\u2500\u2500 entities\/<br \/>\n\u2502   \u2514\u2500\u2500 usecases\/<br \/>\n\u251c\u2500\u2500 presentation\/<br \/>\n\u2502   \u251c\u2500\u2500 bloc\/<br \/>\n\u2502   \u2514\u2500\u2500 screens\/<br \/>\n\u2514\u2500\u2500 main.dart<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0622\u0646 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f UserEntity \u0648 UserRepository.<\/p>\n<p>\/\/ domain\/entities\/user_entity.dart<br \/>\nclass UserEntity {<br \/>\n  final String id;<br \/>\n  final String name;<\/p>\n<p>  UserEntity({required this.id, required this.name});<br \/>\n}<\/p>\n<p>\/\/ domain\/repositories\/user_repository.dart<br \/>\nabstract class UserRepository {<br \/>\n  FutureUserEntity&gt; getUser(String userId);<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0628\u0639\u062f\u060c \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f GetUserUseCase \u0628\u0631\u0627\u06cc \u0645\u062d\u0635\u0648\u0631 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631<\/p>\n<p>\/\/ domain\/usecases\/get_user_usecase.dart<br \/>\nclass GetUserUseCase {<br \/>\n  final UserRepository repository;<\/p>\n<p>  GetUserUseCase(this.repository);<\/p>\n<p>  FutureUserEntity&gt; execute(String userId) {<br \/>\n    return repository.getUser(userId);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/p>\n<p>\u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f UserModel \u0648 \u0645\u062e\u0632\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\/\/ data\/models\/user_model.dart<br \/>\nclass UserModel {<br \/>\n  final String id;<br \/>\n  final String name;<\/p>\n<p>  UserModel({required this.id, required this.name});<\/p>\n<p>  factory UserModel.fromJson(MapString, dynamic&gt; json) {<br \/>\n    return UserModel(<br \/>\n      id: json[&#8216;id&#8217;],<br \/>\n      name: json[&#8216;name&#8217;],<br \/>\n    );<br \/>\n  }<br \/>\n}<\/p>\n<p>\/\/ data\/repositories\/user_repository_impl.dart<br \/>\nclass UserRepositoryImpl implements UserRepository {<br \/>\n  final RemoteDataSource remoteDataSource;<\/p>\n<p>  UserRepositoryImpl(this.remoteDataSource);<\/p>\n<p>  @override<br \/>\n  FutureUserEntity&gt; getUser(String userId) async {<br \/>\n    final userModel = await remoteDataSource.fetchUser(userId);<br \/>\n    return UserEntity(id: userModel.id, name: userModel.name);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f RemoteDataSource \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0634\u0628\u06a9\u0647<\/p>\n<p>\/\/ data\/datasources\/remote_data_source.dart<br \/>\nclass RemoteDataSource {<br \/>\n  FutureUserModel&gt; fetchUser(String userId<\/p>\n<p>) async {<br \/>\n    \/\/ Fake network request for simplicity<br \/>\n    await Future.delayed(Duration(seconds: 2));<br \/>\n    return UserModel(id: userId, name: &#8216;John Doe&#8217;);<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (BLoC)<\/p>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f UserBloc \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/p>\n<p>\/\/ presentation\/bloc\/user_bloc.dart<br \/>\nclass UserBloc extends BlocUserEvent, UserState&gt; {<br \/>\n  final GetUserUseCase getUserUseCase;<\/p>\n<p>  UserBloc(this.getUserUseCase) : super(UserInitial());<\/p>\n<p>  @override<br \/>\n  StreamUserState&gt; mapEventToState(UserEvent event) async* {<br \/>\n    if (event is GetUserEvent) {<br \/>\n      yield UserLoading();<br \/>\n      try {<br \/>\n        final user = await getUserUseCase.execute(event.userId);<br \/>\n        yield UserLoaded(user);<br \/>\n      } catch (e) {<br \/>\n        yield UserError(&#8220;Couldn&#8217;t fetch user&#8221;);<br \/>\n      }<br \/>\n    }<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc UI<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c UI \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f BlocBuilder \u0628\u0631\u0627\u06cc \u06af\u0648\u0634 \u062f\u0627\u062f\u0646 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062d\u0627\u0644\u062a<\/p>\n<p>\/\/ presentation\/screens\/user_screen.dart<br \/>\nclass UserScreen extends StatelessWidget {<br \/>\n  @override<br \/>\n  Widget build(BuildContext context) {<br \/>\n    return Scaffold(<br \/>\n      appBar: AppBar(title: Text(&#8216;User Profile&#8217;)),<br \/>\n      body: BlocProvider(<br \/>\n        create: (context) =&gt; UserBloc(GetUserUseCase(UserRepositoryImpl(RemoteDataSource()))),<br \/>\n        child: UserProfile(),<br \/>\n      ),<br \/>\n    );<br \/>\n  }<br \/>\n}<\/p>\n<p>class UserProfile extends StatelessWidget {<br \/>\n  @override<br \/>\n  Widget build(BuildContext context) {<br \/>\n    return BlocBuilderUserBloc, UserState&gt;(<br \/>\n      builder: (context, state) {<br \/>\n        if (state is UserInitial) {<br \/>\n          return Center(child: Text(&#8216;Press the button to fetch user data.&#8217;));<br \/>\n        } else if (state is UserLoading) {<br \/>\n          return Center(child: CircularProgressIndicator());<br \/>\n        } else if (state is UserLoaded) {<br \/>\n          return Center(child: Text(&#8216;User: ${state.user.name}&#8217;));<br \/>\n        } else if (state is UserError) {<br \/>\n          return Center(child: Text(state.message));<br \/>\n        }<br \/>\n        return Container();<br \/>\n      },<br \/>\n    );<br \/>\n  }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  7. \u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u06a9\u0627\u0645\u0644<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06a9\u062f \u06a9\u0627\u0645\u0644 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Clean Architecture \u0648 BLoC \u062f\u0631 Flutter \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p>  \u0627\u0635\u0644\u06cc.\u062f\u0627\u0631\u062a<\/p>\n<p>void main() {<br \/>\n  runApp(MaterialApp(<br \/>\n    home: UserScreen(),<br \/>\n  ));<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  8. \u062a\u0633\u062a \u0645\u0639\u0645\u0627\u0631\u06cc<\/p>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u0627\u06cc\u0646 \u0627\u0633\u062a \u0622\u0632\u0645\u0648\u0646 \u067e\u0630\u06cc\u0631\u06cc. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645 GetUserUseCase \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc \u0631\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>void main() {<br \/>\n  final mockUserRepository = MockUserRepository();<br \/>\n  final getUserUseCase = GetUserUseCase(mockUserRepository);<\/p>\n<p>  test(&#8216;should return user when called with a valid ID&#8217;, () async {<br \/>\n    \/\/ Arrange<br \/>\n    final user = UserEntity(id: &#8216;1&#8217;, name: &#8216;John Doe&#8217;);<br \/>\n    when(mockUserRepository.getUser(any)).thenAnswer((_) async =&gt; user);<\/p>\n<p>    \/\/ Act<br \/>\n    final result = await getUserUseCase.execute(&#8216;1&#8217;);<\/p>\n<p>    \/\/ Assert<br \/>\n    expect(result, user);<br \/>\n  });<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  9. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0646\u06a9\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/p>\n<p>\u0627\u0632 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0633\u062a\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f get_it \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631.<\/p>\n<p>\u0627\u0632 \u06a9\u0648\u067e\u0644\u06cc\u0646\u06af \u0645\u062d\u06a9\u0645 \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f: \u0647\u0645\u06cc\u0634\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0628\u0647 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u0645\u0627\u0646\u0646\u062f Flutter\u060c API \u0647\u0627 \u06cc\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0633\u062a\u06af\u06cc \u0646\u062f\u0627\u0631\u062f.<\/p>\n<p>\u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0647\u0627: \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f \u062a\u0627 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632 \u062d\u0641\u0638 \u0634\u0648\u062f.<\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/p>\n<p>Clean Code Architecture \u0648 \u0627\u0644\u06af\u0648\u06cc BLoC \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc Flutter \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u06a9\u0647 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u060c \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634\u200c\u067e\u0630\u06cc\u0631 \u0647\u0633\u062a\u0646\u062f. \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u0635\u0648\u0644 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0647\u0645 \u0645\u0628\u062a\u062f\u06cc\u0627\u0646 \u0648 \u0647\u0645 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u0648 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u0627\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0632\u06cc\u0628\u0627\u06cc\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062f\u0631 \u0622\u0646 \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a \u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0648 \u0645\u062f\u0648\u0644\u0627\u0631 \u0628\u0648\u062f\u0646. \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0634\u0645\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0648 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06a9\u0647 \u06af\u0633\u062a\u0631\u0634 \u06cc\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0628\u062e\u0634 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0628\u0627 \u0631\u0634\u062f \u0622\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0641\u0627\u0647\u06cc\u0645 \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0646 \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0686\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0648\u0686\u06a9 \u06cc\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0632\u0631\u06af \u062f\u0631 \u0633\u0637\u062d \u0633\u0627\u0632\u0645\u0627\u0646\u06cc \u0628\u0627\u0634\u06cc\u062f\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u0646\u0648\u0634\u062a\u0646 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f. \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u06a9\u062f<\/p>\n<div data-article-id=\"1973099\" id=\"article-body\">\n<p>Flutter \u0631\u0648\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0648\u0628 \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0645\u062a\u062d\u0648\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627\u060c \u0628\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc\u060c \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 <strong>\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<\/strong> \u0648 <strong>BLoC (\u062c\u0632\u0621 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc)<\/strong> \u0627\u0644\u06af\u0648 \u0648\u0627\u0631\u062f \u0628\u0627\u0632\u06cc \u0645\u06cc \u0634\u0648\u062f \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0627\u0633\u0627\u0633\u06cc \u0648 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0627\u06cc\u0646 \u062f\u0648 \u0627\u0644\u06af\u0648\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u0644\u06cc\u062f\u06cc \u0631\u0627\u0647\u0646\u0645\u0627\u06cc\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0645\u0628\u062a\u062f\u06cc \u0648 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u062f \u062a\u0627 \u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646\u0647\u0627 \u0631\u0627 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u062f\u0631\u06a9 \u06a9\u0646\u0646\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%81%D9%87%D8%B1%D8%B3%D8%AA_%D9%85%D8%B7%D8%A7%D9%84%D8%A8\" >\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#1_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >1. \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0686\u06cc\u0633\u062a\u061f<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D8%A7%D8%B5%D9%88%D9%84_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%BE%D8%A7%DA%A9\" >\u0627\u0635\u0648\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#2_%DA%86%D8%B1%D8%A7_%D8%A7%D8%B2_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9_%D8%AF%D8%B1_%D9%81%D9%84%D8%A7%D8%AA%D8%B1_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\" >2. \u0686\u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#3_%D9%84%D8%A7%DB%8C%D9%87_%D9%87%D8%A7%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9\" >3. \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#1_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D9%85%D9%86%D9%87_%D9%87%D8%B3%D8%AA%D9%87\" >1. \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 (\u0647\u0633\u062a\u0647)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#2_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\" >2. \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#3_%D9%84%D8%A7%DB%8C%D9%87_%D8%A7%D8%B1%D8%A7%D8%A6%D9%87\" >3. \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#4_%D9%85%D9%82%D8%AF%D9%85%D9%87_%D8%A7%DB%8C_%D8%A8%D8%B1_%D8%A7%D9%84%DA%AF%D9%88%DB%8C_BLoC\" >4. \u0645\u0642\u062f\u0645\u0647 \u0627\u06cc \u0628\u0631 \u0627\u0644\u06af\u0648\u06cc BLoC<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#5_%DA%86%D8%B1%D8%A7_BLoC_%D8%A8%D8%A7_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%BE%D8%A7%DA%A9%D8%9F\" >5. \u0686\u0631\u0627 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#6_%D8%B3%D8%A7%D8%AE%D8%AA%D9%86_%DB%8C%DA%A9_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86_%D9%81%D9%84%D8%A7%D8%AA%D8%B1_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_Clean_Architecture_%D9%88_BLoC\" >6. \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0641\u0644\u0627\u062a\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\" >\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D9%85%D9%86%D9%87\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%A7%D8%B1%D8%A7%D8%A6%D9%87_BLoC\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (BLoC)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_UI\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc UI<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#7_%D9%86%D9%85%D9%88%D9%86%D9%87_%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\" >7. \u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u06a9\u0627\u0645\u0644<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D8%A7%D8%B5%D9%84%DB%8C%D8%AF%D8%A7%D8%B1%D8%AA\" >\u0627\u0635\u0644\u06cc.\u062f\u0627\u0631\u062a<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#8_%D8%AA%D8%B3%D8%AA_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\" >8. \u062a\u0633\u062a \u0645\u0639\u0645\u0627\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#9_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B1%D9%88%D8%B4_%D9%87%D8%A7_%D9%88_%D9%86%DA%A9%D8%A7%D8%AA_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87\" >9. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0646\u06a9\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/nabfollower.com\/blog\/clean-code-architecture-and-bloc-in-flutter-a-comprehensive-guide-for-beginners-and-experts-33k8\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\" >\u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%81%D9%87%D8%B1%D8%B3%D8%AA_%D9%85%D8%B7%D8%A7%D9%84%D8%A8\"><\/span>\n<p>  \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li><strong>\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0686\u06cc\u0633\u062a\u061f<\/strong><\/li>\n<li><strong>\u0686\u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<\/strong><\/li>\n<li><strong>\u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<\/strong><\/li>\n<li><strong>\u0645\u0642\u062f\u0645\u0647 \u0627\u06cc \u0628\u0631 \u0627\u0644\u06af\u0648\u06cc BLoC<\/strong><\/li>\n<li><strong>\u0686\u0631\u0627 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9\u061f<\/strong><\/li>\n<li>\n<strong>\u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 Flutter \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC<\/strong><\/p>\n<ul>\n<li>\u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<\/li>\n<li>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<\/li>\n<li>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/li>\n<li>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (BLoC)<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u06a9\u0627\u0645\u0644<\/strong><\/li>\n<li><strong>\u062a\u0633\u062a \u0645\u0639\u0645\u0627\u0631\u06cc<\/strong><\/li>\n<li><strong>\u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0646\u06a9\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<\/strong><\/li>\n<\/ol>\n<hr\/>\n<p><\/p>\n<h2><span class=\"ez-toc-section\" id=\"1_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  1. \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>\u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<\/strong> \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0637\u0631\u0627\u062d\u06cc \u0646\u0631\u0645 \u0627\u0641\u0632\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062a\u0648\u0633\u0637 <strong>\u0631\u0627\u0628\u0631\u062a \u0633\u06cc \u0645\u0627\u0631\u062a\u06cc\u0646<\/strong> (\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0639\u0645\u0648 \u0628\u0627\u0628 \u0634\u0646\u0627\u062e\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f). \u0647\u062f\u0641 \u0627\u0635\u0644\u06cc Clean Code Architecture \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f <strong>\u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0646\u06af\u0631\u0627\u0646\u06cc \u0647\u0627<\/strong>. \u0627\u06cc\u0646 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627 \u0628\u0647 \u062a\u0642\u0633\u06cc\u0645 \u0645\u06cc \u06a9\u0646\u062f <strong>\u0644\u0627\u06cc\u0647 \u0647\u0627<\/strong>\u060c \u0647\u0631 \u06a9\u062f\u0627\u0645 \u0645\u0633\u0626\u0648\u0644\u06cc\u062a \u0645\u0634\u062e\u0635\u06cc \u062f\u0627\u0631\u0646\u062f. \u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0647\u0627 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<ul>\n<li>\n<strong>\u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647<\/strong> (UI)<\/li>\n<li>\n<strong>\u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<\/strong> (\u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631)<\/li>\n<li>\n<strong>\u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/strong> (\u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0647\u0627)<\/li>\n<\/ul>\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0627\u06cc\u0646 \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f <strong>\u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0627\u0632 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a<\/strong> \u0645\u0627\u0646\u0646\u062f \u0686\u0627\u0631\u0686\u0648\u0628\u200c\u0647\u0627\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u067e\u0627\u06cc\u06af\u0627\u0647\u200c\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u06cc\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647\u060c \u06a9\u062f \u0634\u0645\u0627 \u0631\u0627 \u0645\u06cc\u200c\u0633\u0627\u0632\u0646\u062f <strong>\u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u062a\u0631\u060c \u0642\u0627\u0628\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062c\u062f\u062f \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u062a\u0631<\/strong>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B5%D9%88%D9%84_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%BE%D8%A7%DA%A9\"><\/span>\n<p>  \u0627\u0635\u0648\u0644 \u06a9\u0644\u06cc\u062f\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>\n<strong>\u062a\u0641\u06a9\u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc \u0647\u0627<\/strong>: \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u06a9\u062f \u0628\u0627\u06cc\u062f \u0645\u0633\u0626\u0648\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062a\u0641\u0627\u0648\u062a\u06cc \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u0646\u062f.<\/li>\n<li>\n<strong>\u0627\u0633\u062a\u0642\u0644\u0627\u0644<\/strong>: \u0645\u0646\u0637\u0642 \u0627\u0635\u0644\u06cc \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f \u0645\u0633\u062a\u0642\u0644 \u0627\u0632 UI\u060c \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u06cc\u0627 \u0647\u0631 \u0686\u0627\u0631\u0686\u0648\u0628 \u062e\u0627\u0631\u062c\u06cc \u0628\u0627\u0634\u062f.<\/li>\n<li>\n<strong>\u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc<\/strong>: \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0627\u0632 \u0639\u0646\u0627\u0635\u0631 \u062e\u0627\u0631\u062c\u06cc \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0646\u0648\u0634\u062a\u0646 \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0631\u0627\u06cc \u0622\u0646 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0627\u0633\u062a.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"2_%DA%86%D8%B1%D8%A7_%D8%A7%D8%B2_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9_%D8%AF%D8%B1_%D9%81%D9%84%D8%A7%D8%AA%D8%B1_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%DA%A9%D9%86%DB%8C%D9%85%D8%9F\"><\/span>\n<p>  2. \u0686\u0631\u0627 \u0627\u0632 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9 \u062f\u0631 \u0641\u0644\u0627\u062a\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 Flutter \u0627\u0645\u06a9\u0627\u0646 \u062a\u0648\u0633\u0639\u0647 \u0633\u0631\u06cc\u0639 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u062a\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f. \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u0646\u062f \u062f\u0644\u06cc\u0644 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Code Architecture \u062f\u0631 Flutter \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<ul>\n<li>\n<strong>\u0642\u0627\u0628\u0644\u06cc\u062a \u0646\u06af\u0647\u062f\u0627\u0631\u06cc<\/strong>: \u062a\u0641\u06a9\u06cc\u06a9 \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f \u06a9\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u0631\u0648\u06cc \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u062f\u06cc\u06af\u0631 \u062a\u0623\u062b\u06cc\u0631 \u0646\u0645\u06cc\u200c\u06af\u0630\u0627\u0631\u062f.<\/li>\n<li>\n<strong>\u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc<\/strong>: \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0634\u062f \u0645\u06cc \u06a9\u0646\u062f\u060c Clean Architecture \u06af\u0633\u062a\u0631\u0634 \u0642\u0627\u0628\u0644\u06cc\u062a \u0647\u0627 \u0631\u0627 \u0628\u062f\u0648\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u062c\u062f\u062f \u0628\u062e\u0634 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af\u06cc \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc<\/strong>: \u0628\u0627 \u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u062f\u0648\u0646 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u06cc\u0627 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647\u060c \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0645\u0639\u0646\u06cc \u062f\u0627\u0631 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"3_%D9%84%D8%A7%DB%8C%D9%87_%D9%87%D8%A7%DB%8C_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%DA%A9%D8%AF_%D9%BE%D8%A7%DA%A9\"><\/span>\n<p>  3. \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f \u067e\u0627\u06a9<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 Clean Code Architecture\u060c \u0633\u0647 \u0644\u0627\u06cc\u0647 \u0627\u0635\u0644\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D9%85%D9%86%D9%87_%D9%87%D8%B3%D8%AA%D9%87\"><\/span>\n<p>  1. <strong>\u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<\/strong> (\u0647\u0633\u062a\u0647)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0627\u0633\u062a <strong>\u0642\u0644\u0628 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627<\/strong>. \u0634\u0627\u0645\u0644:<\/p>\n<ul>\n<li>\n<strong>\u0646\u0647\u0627\u062f\u0647\u0627<\/strong>: \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062f\u0627\u0631\u062a \u0633\u0627\u062f\u0647 \u06a9\u0647 \u0645\u062f\u0644 \u0647\u0627\u06cc \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u0646\u062f.<\/li>\n<li>\n<strong>\u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647<\/strong>: \u062a\u0639\u0627\u0645\u0644 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0646\u0637\u0642 \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0628\u0631 \u0645\u06cc \u06af\u06cc\u0631\u0646\u062f.<\/li>\n<li>\n<strong>\u0645\u062e\u0627\u0632\u0646<\/strong>: \u0642\u0631\u0627\u0631\u062f\u0627\u062f\u0647\u0627\u06cc \u0627\u0646\u062a\u0632\u0627\u0639\u06cc \u06a9\u0647 \u0646\u062d\u0648\u0647 \u0648\u0627\u06a9\u0634\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ entities\/user_entity.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserEntity<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">id<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">name<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserEntity<\/span><span class=\"p\">({<\/span><span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ usecases\/get_user_usecase.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">GetUserUseCase<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">UserRepository<\/span> <span class=\"n\">repository<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">GetUserUseCase<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">repository<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserEntity<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">repository<\/span><span class=\"o\">.<\/span><span class=\"na\">getUser<\/span><span class=\"p\">(<\/span><span class=\"n\">userId<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"2_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\"><\/span>\n<p>  2. <strong>\u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0631\u0627\u0628\u0637 \u0647\u0627\u06cc \u0645\u062e\u0632\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u062f\u0631 \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f. \u0634\u0627\u0645\u0644:<\/p>\n<ul>\n<li>\n<strong>\u0645\u062f\u0644 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647<\/strong>: \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u0627\u06a9\u0634\u06cc \u0634\u062f\u0647 \u0627\u0632 API \u0647\u0627 \u06cc\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0647\u0633\u062a\u0646\u062f.<\/li>\n<li>\n<strong>\u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647<\/strong>: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0634\u0628\u06a9\u0647\u060c \u067e\u0627\u06cc\u06af\u0627\u0647 \u0647\u0627\u06cc \u062f\u0627\u062f\u0647 \u0645\u062d\u0644\u06cc \u0648 \u063a\u06cc\u0631\u0647.<\/li>\n<li>\n<strong>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u062e\u0632\u0646<\/strong>: \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0647\u0627\u06cc \u0639\u06cc\u0646\u06cc \u0645\u062e\u0632\u0646.\n<\/li>\n<\/ul>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ data\/models\/user_model.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserModel<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">id<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">name<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserModel<\/span><span class=\"p\">({<\/span><span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">});<\/span>\n\n  <span class=\"kd\">factory<\/span> <span class=\"n\">UserModel<\/span><span class=\"o\">.<\/span><span class=\"na\">fromJson<\/span><span class=\"p\">(<\/span><span class=\"kt\">Map<\/span><span class=\"p\"><span class=\"kt\">String<\/span><span class=\"p\">,<\/span> <span class=\"kd\">dynamic<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">json<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">UserModel<\/span><span class=\"p\">(<\/span>\n      <span class=\"nl\">id:<\/span> <span class=\"n\">json<\/span><span class=\"p\">[<\/span><span class=\"s\">'id'<\/span><span class=\"p\">],<\/span>\n      <span class=\"nl\">name:<\/span> <span class=\"n\">json<\/span><span class=\"p\">[<\/span><span class=\"s\">'name'<\/span><span class=\"p\">],<\/span>\n    <span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"kt\">Map<\/span><span class=\"p\"><span class=\"kt\">String<\/span><span class=\"p\">,<\/span> <span class=\"kd\">dynamic<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">toJson<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"p\">{<\/span>\n      <span class=\"s\">'id'<\/span><span class=\"o\">:<\/span> <span class=\"n\">id<\/span><span class=\"p\">,<\/span>\n      <span class=\"s\">'name'<\/span><span class=\"o\">:<\/span> <span class=\"n\">name<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">};<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ data\/repositories\/user_repository_impl.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserRepositoryImpl<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">UserRepository<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">RemoteDataSource<\/span> <span class=\"n\">remoteDataSource<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserRepositoryImpl<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">remoteDataSource<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserEntity<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">getUser<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">)<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">userModel<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">remoteDataSource<\/span><span class=\"o\">.<\/span><span class=\"na\">fetchUser<\/span><span class=\"p\">(<\/span><span class=\"n\">userId<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">UserEntity<\/span><span class=\"p\">(<\/span><span class=\"nl\">id:<\/span> <span class=\"n\">userModel<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"nl\">name:<\/span> <span class=\"n\">userModel<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"3_%D9%84%D8%A7%DB%8C%D9%87_%D8%A7%D8%B1%D8%A7%D8%A6%D9%87\"><\/span>\n<p>  3. <strong>\u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647<\/strong><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u0646 \u0644\u0627\u06cc\u0647 \u0634\u0627\u0645\u0644 <strong>UI<\/strong> \u0648 <strong>\u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/strong> \u0645\u0646\u0637\u0642 \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 <strong>\u0627\u0644\u06af\u0648\u06cc BLoC<\/strong> \u0645\u0627 \u0627\u0632 BLoC \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0636\u0639\u06cc\u062a \u0648 \u062a\u0639\u0627\u0645\u0644 \u0628\u0627 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ presentation\/bloc\/user_bloc.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserBloc<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Bloc<\/span><span class=\"p\"><span class=\"n\">UserEvent<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserState<\/span><span class=\"p\">&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">GetUserUseCase<\/span> <span class=\"n\">getUserUseCase<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserBloc<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserUseCase<\/span><span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"n\">UserInitial<\/span><span class=\"p\">());<\/span>\n\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Stream<\/span><span class=\"p\"><span class=\"n\">UserState<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">mapEventToState<\/span><span class=\"p\">(<\/span><span class=\"n\">UserEvent<\/span> <span class=\"n\">event<\/span><span class=\"p\">)<\/span> <span class=\"kd\">async<\/span><span class=\"o\">*<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">event<\/span> <span class=\"k\">is<\/span> <span class=\"n\">GetUserEvent<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"k\">yield<\/span> <span class=\"n\">UserLoading<\/span><span class=\"p\">();<\/span>\n      <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">getUserUseCase<\/span><span class=\"o\">.<\/span><span class=\"na\">execute<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"o\">.<\/span><span class=\"na\">userId<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">yield<\/span> <span class=\"n\">UserLoaded<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">yield<\/span> <span class=\"n\">UserError<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Couldn't fetch user\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"4_%D9%85%D9%82%D8%AF%D9%85%D9%87_%D8%A7%DB%8C_%D8%A8%D8%B1_%D8%A7%D9%84%DA%AF%D9%88%DB%8C_BLoC\"><\/span>\n<p>  4. \u0645\u0642\u062f\u0645\u0647 \u0627\u06cc \u0628\u0631 \u0627\u0644\u06af\u0648\u06cc BLoC<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>BLoC (\u062c\u0632\u0621 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc)<\/strong> \u06cc\u06a9 \u0627\u0644\u06af\u0648\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0627\u0644\u062a \u0627\u0633\u062a \u06a9\u0647 \u062c\u062f\u0627 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642 \u0627\u0631\u0627\u0626\u0647 \u0631\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u062f\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0641\u0644\u0627\u062a\u0631 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f. \u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc \u0627\u0644\u06af\u0648\u06cc BLoC \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632:<\/p>\n<ul>\n<li>\n<strong>\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627<\/strong>: \u0627\u0642\u062f\u0627\u0645\u0627\u062a\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u06cc\u0627 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u0627\u06cc\u0627\u0644\u0627\u062a<\/strong>: \u0648\u0636\u0639\u06cc\u062a \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627.<\/li>\n<li>\n<strong>BLoC<\/strong>: \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0631\u0627 \u0628\u0627 \u0646\u06af\u0627\u0634\u062a \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u0628\u0647 \u0627\u06cc\u0627\u0644\u062a \u0647\u0627 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul>\n<p>\u0645\u0632\u06cc\u062a \u0627\u0635\u0644\u06cc BLoC \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0645\u0627 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0631\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u062c\u062f\u0627 \u06a9\u0646\u06cc\u0645. BLoC \u0628\u0647 \u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627 \u06af\u0648\u0634 \u0645\u06cc \u062f\u0647\u062f (\u0645\u0627\u0646\u0646\u062f \u0641\u0634\u0627\u0631 \u062f\u0627\u062f\u0646 \u062f\u06a9\u0645\u0647 \u0647\u0627) \u0648 \u062d\u0627\u0644\u062a \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0645\u0646\u062a\u0634\u0631 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 UI \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0622\u0646\u0647\u0627 \u06af\u0648\u0634 \u062f\u0647\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ Event<\/span>\n<span class=\"kd\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserEvent<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">GetUserEvent<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">UserEvent<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">GetUserEvent<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">userId<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ State<\/span>\n<span class=\"kd\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserState<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserInitial<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">UserState<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserLoading<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">UserState<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserLoaded<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">UserState<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">UserEntity<\/span> <span class=\"n\">user<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserLoaded<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">user<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserError<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">UserState<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">message<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserError<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">message<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"5_%DA%86%D8%B1%D8%A7_BLoC_%D8%A8%D8%A7_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C_%D9%BE%D8%A7%DA%A9%D8%9F\"><\/span>\n<p>  5. \u0686\u0631\u0627 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BLoC \u0628\u0627 \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u062f <strong>\u062c\u062f\u0627\u06cc\u06cc \u0648\u0627\u0636\u062d \u0628\u06cc\u0646 UI \u0648 \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc<\/strong>\u060c \u062a\u0633\u062a \u0648 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u06a9\u062f \u0631\u0627 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f. BLoC \u0645\u0633\u0626\u0648\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u0646\u062a\u0642\u0627\u0644\u200c\u0647\u0627\u06cc \u062d\u0627\u0644\u062a \u0648 \u0642\u0648\u0627\u0646\u06cc\u0646 \u062a\u062c\u0627\u0631\u06cc \u0627\u0633\u062a\u060c \u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0644\u0627\u06cc\u0647\u200c\u0647\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u06a9\u0647 BLoC \u0641\u0642\u0637 \u0628\u0627 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0636\u0631\u0648\u0631\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u06a9\u062f\u060c \u0645\u0627\u0646\u0646\u062f \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648 \u0645\u062e\u0627\u0632\u0646\u060c \u062a\u0639\u0627\u0645\u0644 \u062f\u0627\u0631\u062f.<\/p>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"6_%D8%B3%D8%A7%D8%AE%D8%AA%D9%86_%DB%8C%DA%A9_%D8%A7%D9%BE%D9%84%DB%8C%DA%A9%DB%8C%D8%B4%D9%86_%D9%81%D9%84%D8%A7%D8%AA%D8%B1_%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_Clean_Architecture_%D9%88_BLoC\"><\/span>\n<p>  6. \u0633\u0627\u062e\u062a\u0646 \u06cc\u06a9 \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0641\u0644\u0627\u062a\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Flutter \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC \u0628\u0633\u0627\u0632\u06cc\u0645. \u0645\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0627\u0632 \u06cc\u06a9 API \u0648\u0627\u06a9\u0634\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1_%D9%BE%D8%B1%D9%88%DA%98%D9%87\"><\/span>\n<p>  \u0633\u0627\u062e\u062a\u0627\u0631 \u067e\u0631\u0648\u0698\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>lib\/\n\u251c\u2500\u2500 data\/\n\u2502   \u251c\u2500\u2500 models\/\n\u2502   \u251c\u2500\u2500 repositories\/\n\u2502   \u2514\u2500\u2500 datasources\/\n\u251c\u2500\u2500 domain\/\n\u2502   \u251c\u2500\u2500 entities\/\n\u2502   \u2514\u2500\u2500 usecases\/\n\u251c\u2500\u2500 presentation\/\n\u2502   \u251c\u2500\u2500 bloc\/\n\u2502   \u2514\u2500\u2500 screens\/\n\u2514\u2500\u2500 main.dart\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D9%85%D9%86%D9%87\"><\/span>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u0645\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0622\u0646 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <code>UserEntity<\/code> \u0648 <code>UserRepository<\/code>.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ domain\/entities\/user_entity.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserEntity<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">id<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">name<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserEntity<\/span><span class=\"p\">({<\/span><span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ domain\/repositories\/user_repository.dart<\/span>\n<span class=\"kd\">abstract<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">UserRepository<\/span> <span class=\"p\">{<\/span>\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserEntity<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">getUser<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f\u060c \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>GetUserUseCase<\/code> \u0628\u0631\u0627\u06cc \u0645\u062d\u0635\u0648\u0631 \u06a9\u0631\u062f\u0646 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ domain\/usecases\/get_user_usecase.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">GetUserUseCase<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">UserRepository<\/span> <span class=\"n\">repository<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">GetUserUseCase<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">repository<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserEntity<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">execute<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">repository<\/span><span class=\"o\">.<\/span><span class=\"na\">getUser<\/span><span class=\"p\">(<\/span><span class=\"n\">userId<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%AF%D8%A7%D8%AF%D9%87\"><\/span>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u062f\u0627\u062f\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <code>UserModel<\/code> \u0648 \u0645\u062e\u0632\u0646 \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ data\/models\/user_model.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserModel<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">id<\/span><span class=\"p\">;<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"kt\">String<\/span> <span class=\"n\">name<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserModel<\/span><span class=\"p\">({<\/span><span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"kd\">required<\/span> <span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">});<\/span>\n\n  <span class=\"kd\">factory<\/span> <span class=\"n\">UserModel<\/span><span class=\"o\">.<\/span><span class=\"na\">fromJson<\/span><span class=\"p\">(<\/span><span class=\"kt\">Map<\/span><span class=\"p\"><span class=\"kt\">String<\/span><span class=\"p\">,<\/span> <span class=\"kd\">dynamic<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">json<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">UserModel<\/span><span class=\"p\">(<\/span>\n      <span class=\"nl\">id:<\/span> <span class=\"n\">json<\/span><span class=\"p\">[<\/span><span class=\"s\">'id'<\/span><span class=\"p\">],<\/span>\n      <span class=\"nl\">name:<\/span> <span class=\"n\">json<\/span><span class=\"p\">[<\/span><span class=\"s\">'name'<\/span><span class=\"p\">],<\/span>\n    <span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"c1\">\/\/ data\/repositories\/user_repository_impl.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserRepositoryImpl<\/span> <span class=\"kd\">implements<\/span> <span class=\"n\">UserRepository<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">RemoteDataSource<\/span> <span class=\"n\">remoteDataSource<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserRepositoryImpl<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">remoteDataSource<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserEntity<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">getUser<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span><span class=\"p\">)<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">userModel<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">remoteDataSource<\/span><span class=\"o\">.<\/span><span class=\"na\">fetchUser<\/span><span class=\"p\">(<\/span><span class=\"n\">userId<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">UserEntity<\/span><span class=\"p\">(<\/span><span class=\"nl\">id:<\/span> <span class=\"n\">userModel<\/span><span class=\"o\">.<\/span><span class=\"na\">id<\/span><span class=\"p\">,<\/span> <span class=\"nl\">name:<\/span> <span class=\"n\">userModel<\/span><span class=\"o\">.<\/span><span class=\"na\">name<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0627 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f <code>RemoteDataSource<\/code> \u0628\u0631\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc \u0634\u0628\u06a9\u0647<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ data\/datasources\/remote_data_source.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">RemoteDataSource<\/span> <span class=\"p\">{<\/span>\n  <span class=\"n\">Future<\/span><span class=\"p\"><span class=\"n\">UserModel<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">fetchUser<\/span><span class=\"p\">(<\/span><span class=\"kt\">String<\/span> <span class=\"n\">userId<\/span>\n\n<span class=\"p\">)<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Fake network request for simplicity<\/span>\n    <span class=\"k\">await<\/span> <span class=\"n\">Future<\/span><span class=\"o\">.<\/span><span class=\"na\">delayed<\/span><span class=\"p\">(<\/span><span class=\"n\">Duration<\/span><span class=\"p\">(<\/span><span class=\"nl\">seconds:<\/span> <span class=\"mi\">2<\/span><span class=\"p\">));<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">UserModel<\/span><span class=\"p\">(<\/span><span class=\"nl\">id:<\/span> <span class=\"n\">userId<\/span><span class=\"p\">,<\/span> <span class=\"nl\">name:<\/span> <span class=\"s\">'John Doe'<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%84%D8%A7%DB%8C%D9%87_%D8%A7%D8%B1%D8%A7%D8%A6%D9%87_BLoC\"><\/span>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0627\u0631\u0627\u0626\u0647 (BLoC)<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>UserBloc<\/code> \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u062f\u0648\u0644\u062a\u06cc<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ presentation\/bloc\/user_bloc.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserBloc<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">Bloc<\/span><span class=\"p\"><span class=\"n\">UserEvent<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserState<\/span><span class=\"p\">&gt;<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">GetUserUseCase<\/span> <span class=\"n\">getUserUseCase<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"n\">UserBloc<\/span><span class=\"p\">(<\/span><span class=\"k\">this<\/span><span class=\"o\">.<\/span><span class=\"na\">getUserUseCase<\/span><span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"k\">super<\/span><span class=\"p\">(<\/span><span class=\"n\">UserInitial<\/span><span class=\"p\">());<\/span>\n\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Stream<\/span><span class=\"p\"><span class=\"n\">UserState<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">mapEventToState<\/span><span class=\"p\">(<\/span><span class=\"n\">UserEvent<\/span> <span class=\"n\">event<\/span><span class=\"p\">)<\/span> <span class=\"kd\">async<\/span><span class=\"o\">*<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">event<\/span> <span class=\"k\">is<\/span> <span class=\"n\">GetUserEvent<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"k\">yield<\/span> <span class=\"n\">UserLoading<\/span><span class=\"p\">();<\/span>\n      <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n        <span class=\"kd\">final<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">getUserUseCase<\/span><span class=\"o\">.<\/span><span class=\"na\">execute<\/span><span class=\"p\">(<\/span><span class=\"n\">event<\/span><span class=\"o\">.<\/span><span class=\"na\">userId<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">yield<\/span> <span class=\"n\">UserLoaded<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"n\">e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">yield<\/span> <span class=\"n\">UserError<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Couldn't fetch user\"<\/span><span class=\"p\">);<\/span>\n      <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h3><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%A7%D8%AF%D9%87_%D8%B3%D8%A7%D8%B2%DB%8C_UI\"><\/span>\n<p>  \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc UI<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06a9\u0646\u0648\u0646\u060c UI \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f <code>BlocBuilder<\/code> \u0628\u0631\u0627\u06cc \u06af\u0648\u0634 \u062f\u0627\u062f\u0646 \u0628\u0647 \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062d\u0627\u0644\u062a<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"c1\">\/\/ presentation\/screens\/user_screen.dart<\/span>\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserScreen<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">StatelessWidget<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Widget<\/span> <span class=\"n\">build<\/span><span class=\"p\">(<\/span><span class=\"n\">BuildContext<\/span> <span class=\"n\">context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">Scaffold<\/span><span class=\"p\">(<\/span>\n      <span class=\"nl\">appBar:<\/span> <span class=\"n\">AppBar<\/span><span class=\"p\">(<\/span><span class=\"nl\">title:<\/span> <span class=\"n\">Text<\/span><span class=\"p\">(<\/span><span class=\"s\">'User Profile'<\/span><span class=\"p\">)),<\/span>\n      <span class=\"nl\">body:<\/span> <span class=\"n\">BlocProvider<\/span><span class=\"p\">(<\/span>\n        <span class=\"nl\">create:<\/span> <span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">UserBloc<\/span><span class=\"p\">(<\/span><span class=\"n\">GetUserUseCase<\/span><span class=\"p\">(<\/span><span class=\"n\">UserRepositoryImpl<\/span><span class=\"p\">(<\/span><span class=\"n\">RemoteDataSource<\/span><span class=\"p\">()))),<\/span>\n        <span class=\"nl\">child:<\/span> <span class=\"n\">UserProfile<\/span><span class=\"p\">(),<\/span>\n      <span class=\"p\">),<\/span>\n    <span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">class<\/span> <span class=\"nc\">UserProfile<\/span> <span class=\"kd\">extends<\/span> <span class=\"n\">StatelessWidget<\/span> <span class=\"p\">{<\/span>\n  <span class=\"nd\">@override<\/span>\n  <span class=\"n\">Widget<\/span> <span class=\"n\">build<\/span><span class=\"p\">(<\/span><span class=\"n\">BuildContext<\/span> <span class=\"n\">context<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">BlocBuilder<\/span><span class=\"p\"><span class=\"n\">UserBloc<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserState<\/span><span class=\"p\">&gt;(<\/span>\n      <span class=\"nl\">builder:<\/span> <span class=\"p\">(<\/span><span class=\"n\">context<\/span><span class=\"p\">,<\/span> <span class=\"n\">state<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">state<\/span> <span class=\"k\">is<\/span> <span class=\"n\">UserInitial<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n          <span class=\"k\">return<\/span> <span class=\"n\">Center<\/span><span class=\"p\">(<\/span><span class=\"nl\">child:<\/span> <span class=\"n\">Text<\/span><span class=\"p\">(<\/span><span class=\"s\">'Press the button to fetch user data.'<\/span><span class=\"p\">));<\/span>\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">state<\/span> <span class=\"k\">is<\/span> <span class=\"n\">UserLoading<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n          <span class=\"k\">return<\/span> <span class=\"n\">Center<\/span><span class=\"p\">(<\/span><span class=\"nl\">child:<\/span> <span class=\"n\">CircularProgressIndicator<\/span><span class=\"p\">());<\/span>\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">state<\/span> <span class=\"k\">is<\/span> <span class=\"n\">UserLoaded<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n          <span class=\"k\">return<\/span> <span class=\"n\">Center<\/span><span class=\"p\">(<\/span><span class=\"nl\">child:<\/span> <span class=\"n\">Text<\/span><span class=\"p\">(<\/span><span class=\"s\">'User: <\/span><span class=\"si\">${state.user.name}<\/span><span class=\"s\">'<\/span><span class=\"p\">));<\/span>\n        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">state<\/span> <span class=\"k\">is<\/span> <span class=\"n\">UserError<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n          <span class=\"k\">return<\/span> <span class=\"n\">Center<\/span><span class=\"p\">(<\/span><span class=\"nl\">child:<\/span> <span class=\"n\">Text<\/span><span class=\"p\">(<\/span><span class=\"n\">state<\/span><span class=\"o\">.<\/span><span class=\"na\">message<\/span><span class=\"p\">));<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Container<\/span><span class=\"p\">();<\/span>\n      <span class=\"p\">},<\/span>\n    <span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/span><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"7_%D9%86%D9%85%D9%88%D9%86%D9%87_%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  7. \u0646\u0645\u0648\u0646\u0647 \u06a9\u062f \u06a9\u0627\u0645\u0644<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06a9\u062f \u06a9\u0627\u0645\u0644 \u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0627 Clean Architecture \u0648 BLoC \u062f\u0631 Flutter \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<h3><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B5%D9%84%DB%8C%D8%AF%D8%A7%D8%B1%D8%AA\"><\/span>\n<p>  \u0627\u0635\u0644\u06cc.\u062f\u0627\u0631\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"n\">runApp<\/span><span class=\"p\">(<\/span><span class=\"n\">MaterialApp<\/span><span class=\"p\">(<\/span>\n    <span class=\"nl\">home:<\/span> <span class=\"n\">UserScreen<\/span><span class=\"p\">(),<\/span>\n  <span class=\"p\">));<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"8_%D8%AA%D8%B3%D8%AA_%D9%85%D8%B9%D9%85%D8%A7%D8%B1%DB%8C\"><\/span>\n<p>  8. \u062a\u0633\u062a \u0645\u0639\u0645\u0627\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0645\u0639\u0645\u0627\u0631\u06cc \u067e\u0627\u06a9 \u0627\u06cc\u0646 \u0627\u0633\u062a <strong>\u0622\u0632\u0645\u0648\u0646 \u067e\u0630\u06cc\u0631\u06cc<\/strong>. \u0628\u06cc\u0627\u06cc\u06cc\u062f \u062a\u0633\u062a \u0647\u0627\u06cc \u0648\u0627\u062d\u062f \u0628\u0646\u0648\u06cc\u0633\u06cc\u0645 <code>GetUserUseCase<\/code> \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0627\u0646\u062a\u0638\u0627\u0631 \u0645\u06cc \u0631\u0648\u062f \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight dart\"><code><span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">mockUserRepository<\/span> <span class=\"o\">=<\/span> <span class=\"n\">MockUserRepository<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">final<\/span> <span class=\"n\">getUserUseCase<\/span> <span class=\"o\">=<\/span> <span class=\"n\">GetUserUseCase<\/span><span class=\"p\">(<\/span><span class=\"n\">mockUserRepository<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"n\">test<\/span><span class=\"p\">(<\/span><span class=\"s\">'should return user when called with a valid ID'<\/span><span class=\"p\">,<\/span> <span class=\"p\">()<\/span> <span class=\"kd\">async<\/span> <span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Arrange<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">UserEntity<\/span><span class=\"p\">(<\/span><span class=\"nl\">id:<\/span> <span class=\"s\">'1'<\/span><span class=\"p\">,<\/span> <span class=\"nl\">name:<\/span> <span class=\"s\">'John Doe'<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">when<\/span><span class=\"p\">(<\/span><span class=\"n\">mockUserRepository<\/span><span class=\"o\">.<\/span><span class=\"na\">getUser<\/span><span class=\"p\">(<\/span><span class=\"n\">any<\/span><span class=\"p\">))<\/span><span class=\"o\">.<\/span><span class=\"na\">thenAnswer<\/span><span class=\"p\">((<\/span><span class=\"n\">_<\/span><span class=\"p\">)<\/span> <span class=\"kd\">async<\/span> <span class=\"o\">=<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">user<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"c1\">\/\/ Act<\/span>\n    <span class=\"kd\">final<\/span> <span class=\"n\">result<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">getUserUseCase<\/span><span class=\"o\">.<\/span><span class=\"na\">execute<\/span><span class=\"p\">(<\/span><span class=\"s\">'1'<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"c1\">\/\/ Assert<\/span>\n    <span class=\"n\">expect<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">});<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"9_%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86_%D8%B1%D9%88%D8%B4_%D9%87%D8%A7_%D9%88_%D9%86%DA%A9%D8%A7%D8%AA_%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87\"><\/span>\n<p>  9. \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627 \u0648 \u0646\u06a9\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\n<strong>\u0627\u0632 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong>: \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0633\u062a\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f <code>get_it<\/code> \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627 \u0628\u0647 \u0631\u0648\u0634\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631.<\/li>\n<li>\n<strong>\u0627\u0632 \u06a9\u0648\u067e\u0644\u06cc\u0646\u06af \u0645\u062d\u06a9\u0645 \u062e\u0648\u062f\u062f\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f<\/strong>: \u0647\u0645\u06cc\u0634\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0634\u0645\u0627 \u0628\u0647 \u0686\u0627\u0631\u0686\u0648\u0628 \u0647\u0627\u06cc \u062e\u0627\u0631\u062c\u06cc \u0645\u0627\u0646\u0646\u062f Flutter\u060c API \u0647\u0627 \u06cc\u0627 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0633\u062a\u06af\u06cc \u0646\u062f\u0627\u0631\u062f.<\/li>\n<li>\n<strong>\u062c\u062f\u0627\u0633\u0627\u0632\u06cc \u0644\u0627\u06cc\u0647 \u0647\u0627<\/strong>: \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc\u060c \u0645\u0646\u0637\u0642 \u062a\u062c\u0627\u0631\u06cc \u0648 \u062f\u0627\u062f\u0647 \u0647\u0627 \u062f\u0631 \u0644\u0627\u06cc\u0647 \u0647\u0627\u06cc \u062c\u062f\u0627\u06af\u0627\u0646\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f \u062a\u0627 \u06cc\u06a9 \u0645\u0639\u0645\u0627\u0631\u06cc \u062a\u0645\u06cc\u0632 \u062d\u0641\u0638 \u0634\u0648\u062f.<\/li>\n<\/ul>\n<hr\/>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87_%DA%AF%DB%8C%D8%B1%DB%8C\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647 \u06af\u06cc\u0631\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Clean Code Architecture \u0648 \u0627\u0644\u06af\u0648\u06cc BLoC \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc Flutter \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc\u200c\u06a9\u0646\u0646\u062f \u0648 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u0646\u062f \u06a9\u0647 \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631\u060c \u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634\u200c\u067e\u0630\u06cc\u0631 \u0647\u0633\u062a\u0646\u062f. \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u0627\u0635\u0648\u0644 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627\u060c \u0647\u0645 \u0645\u0628\u062a\u062f\u06cc\u0627\u0646 \u0648 \u0647\u0645 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627 \u062a\u062c\u0631\u0628\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0628\u0627 \u0633\u0627\u062e\u062a\u0627\u0631 \u0648 \u06a9\u06cc\u0641\u06cc\u062a \u0628\u0627\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0632\u06cc\u0628\u0627\u06cc\u06cc \u0648\u0627\u0642\u0639\u06cc \u0627\u06cc\u0646 \u0631\u0648\u06cc\u06a9\u0631\u062f \u062f\u0631 \u0622\u0646 \u0646\u0647\u0641\u062a\u0647 \u0627\u0633\u062a <strong>\u0627\u0646\u0639\u0637\u0627\u0641 \u067e\u0630\u06cc\u0631\u06cc \u0648 \u0645\u062f\u0648\u0644\u0627\u0631 \u0628\u0648\u062f\u0646<\/strong>. \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0634\u0645\u0627 \u0627\u0632 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u0648 \u0645\u0646\u0637\u0642 \u06a9\u0633\u0628 \u0648 \u06a9\u0627\u0631 \u0627\u0632 \u0645\u0646\u0627\u0628\u0639 \u062f\u0627\u062f\u0647 \u062c\u062f\u0627 \u0634\u062f\u0647 \u0627\u0633\u062a\u060c \u06a9\u0647 \u06af\u0633\u062a\u0631\u0634 \u06cc\u0627 \u0628\u0627\u0632\u0633\u0627\u0632\u06cc \u0628\u062e\u0634 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0631\u0627 \u0628\u0627 \u0631\u0634\u062f \u0622\u0646 \u0628\u0633\u06cc\u0627\u0631 \u0622\u0633\u0627\u0646 \u062a\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0647 \u0631\u0627\u062d\u062a\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0645\u0641\u0627\u0647\u06cc\u0645 \u0645\u0639\u0631\u0641\u06cc \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0622\u0646 \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f. \u0686\u0647 \u062f\u0631 \u062d\u0627\u0644 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0648\u0686\u06a9 \u06cc\u0627 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0632\u0631\u06af \u062f\u0631 \u0633\u0637\u062d \u0633\u0627\u0632\u0645\u0627\u0646\u06cc \u0628\u0627\u0634\u06cc\u062f\u060c \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clean Architecture \u0648 BLoC \u0634\u0645\u0627 \u0631\u0627 \u062f\u0631 \u0645\u0633\u06cc\u0631 \u0646\u0648\u0634\u062a\u0646 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u062f. <strong>\u0642\u0627\u0628\u0644 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u0648 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631<\/strong> \u06a9\u062f<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang Flutter \u0631\u0648\u0634\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0627 \u062f\u0631 \u0633\u0627\u062e\u062a \u0627\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u0647\u0627\u06cc \u0645\u0648\u0628\u0627\u06cc\u0644 \u0648 \u0648\u0628 \u0686\u0646\u062f \u067e\u0644\u062a\u0641\u0631\u0645\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0645\u062a\u062d\u0648\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc \u067e\u0631\u0648\u0698\u0647 \u0634\u0645\u0627\u060c \u0628\u0647 \u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0633\u0627\u062e\u062a\u0627\u0631\u06cc\u0627\u0641\u062a\u0647 \u0628\u0631\u0627\u06cc \u062d\u0641\u0638 \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631\u06cc\u060c \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u067e\u0630\u06cc\u0631\u06cc \u0646\u06cc\u0627\u0632 \u062f\u0627\u0631\u06cc\u062f. \u0627\u06cc\u0646\u062c\u0627\u0633\u062a \u06a9\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u06a9\u062f &hellip;<\/p>\n","protected":false},"author":2,"featured_media":74789,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-74788","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/74788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=74788"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/74788\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/74789"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=74788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=74788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=74788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}