рдереЙрдЯ рдПрдХреНрд╕рдкреЗрд░рд┐рдореЗрдВрдЯ: рдлреНрд▓рдЯрд░ рдСрди рдЧреЛ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореИрдВрдиреЗ рдлрд╝реНрд▓рдЯрд░ рдХреА рдЦреЛрдЬ рдХреА - рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рдХреА рдПрдХ рдирдИ рд░реВрдкрд░реЗрдЦрд╛ - рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдерд╛, рдЬрд┐рд╕рдиреЗ рдкрд╣рд▓реЗ рдХрднреА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рд╕реНрдкрдВрджрди рд╕реНрд╡рдпрдВ рдбрд╛рд░реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреИрджрд╛ рд╣реБрдИ рднрд╛рд╖рд╛ рдФрд░ рдХрдВрд╕реЛрд▓ рд╡рд░реНрд▓реНрдб рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ - рдФрд░ рдЗрд╕рд╕реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╣рдореНрдо, рд▓реЗрдХрд┐рди рдлрд╝реНрд▓рдЯрд░ рдЧреЛ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!"ред


рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЧреЛ рдФрд░ рдбрд╛рд░реНрдЯ рджреЛрдиреЛрдВ рдХреЛ Google рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рджреЛрдиреЛрдВ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛рдПрдВ - рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдШреБрдорд╛рдПрдВ, рдЧреЛ рд╕реНрдкрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрддрдиреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реЛрдЧрд╛ред рдХреЛрдИ рдХрд╣реЗрдЧрд╛ - рдЧреЛ рдореЗрдВ рдХреЛрдИ рдХрдХреНрд╖рд╛рдПрдВ, рдЬреЗрдирд░рд┐рдХ рдФрд░ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИред


рддреЛ рдЪрд▓рд┐рдП рдмрд╣рд╛рдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ Flutter рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдХреЛрдб рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛?



рдбрд╛рд░реНрдЯ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?


рдореИрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж рд╕реЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдбрд╛рд░реНрдЯ рдХреЛ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЖрд╢рд╛ рдереА рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдХреЛ рджрдмрд╛ рджреЗрдЧрд╛ред рдорд╛рд░реНрдЪ 2015 рдореЗрдВ рдпрд╣ рдкрдврд╝рдХрд░ рдмрд╣реБрдд рджреБрдЦ рд╣реБрдЖ рдХрд┐ рдбрд╛рд░реНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХреНрд░реЛрдо рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред


рдбрд╛рд░реНрдЯ рд╣реА рдорд╣рд╛рди рд╣реИ! рдЦреИрд░, рдореВрд▓ рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рдж, рдХреЛрдИ рднреА рднрд╛рд╖рд╛ рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ, рдХрд╣реЗрдВ, рдЧреЛ, рдбрд╛рд░реНрдЯ рдЗрддрдирд╛ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрд╛рдлреА рдареАрдХ рд╣реИред рдЗрд╕рдореЗрдВ рд╕рднреА рдмреЛрдзрдЧрдореНрдп рдФрд░ рдмреЛрдзрдЧрдореНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ - рдХрдХреНрд╖рд╛рдПрдВ, рдЬреЗрдиреЗрд░рд┐рдХ, рдЕрдкрд╡рд╛рдж, рд╡рд╛рдпрджрд╛, рдПрд╕реНрдХрд┐рдВрдЯ-рд╡реЗрдЯ, рдИрд╡реЗрдВрдЯ рд▓реВрдк, рдЬреЗрдЖрдИрдЯреА / рдПрдУрдЯреА, рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░, рдлрд╝рдВрдХреНрд╢рди рдЕрдзрд┐рднрд╛рд░ - рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдХрд┐рд╕реА рднреА рдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдбрд╛рд░реНрдЯ рдореЗрдВ рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдЕрдиреБрдкрд╛рдд рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рд╕рдВрднрд╛рд╡рдирд╛ред рдбрд╛рд░реНрдЯ рдореЗрдВ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЪрд┐рдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реЛрддрд╛ рд╣реИ - рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕, рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред


рдпрд╣ рдбрд╛рд░реНрдЯ рдХреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдЗрд╕ рдкреНрд░рдЪреБрд░рддрд╛ рдХреЛ рдПрдХ рд╕рд░рд▓ "рд╣реИрд▓реЛ, рджреБрдирд┐рдпрд╛" рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдорд╛рд╕реНрдЯрд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред


  • рднрд╛рд╖рд╛ рдХреА рд╕рднреА "рд╡рд┐рд╢реЗрд╖" рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рднреНрд░рд╛рдордХ рдереАрдВ - "рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ", "рд╕реНрд╡рдд: рдЖрд░рдВрдн рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕", "рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕", рдЖрджрд┐ред
  • рд╕рдм рдХреБрдЫ "рдЫрд┐рдкрд╛ рд╣реБрдЖ" рднреНрд░рд╛рдордХ рдерд╛ - "рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рдЖрдпрд╛рдд рд╕реЗ рд╣реИ? рдпрд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ, рдХреЛрдб рдХреЛ рджреЗрдЦрдХрд░ рдЖрдк рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ", "рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдирд╣реАрдВ рд╣реИ? рдпрд╣ рд╡рд╣рд╛рдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ" рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ
  • рд╕рдм рдХреБрдЫ "рдЕрд╕реНрдкрд╖реНрдЯ" рдЙрд▓рдЭрди рдореЗрдВ - "рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдмрд┐рдирд╛ рдирд╛рдо рдХреЗ?", "рдЗрд╕реЗ рдХрд╛рдВрд╕реНрдЯ рдпрд╛ рдлрд╛рдЗрдирд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?", "рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛" рддреАрд░ рдХреЗ рд╕рд╛рде рдЫреЛрдЯрд╛ "", рдЖрджрд┐ред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рддреНрд░рд┐рдореВрд░реНрддрд┐ - "рд╡рд┐рд╢реЗрд╖", "рдЫрд┐рдкреА рд╣реБрдИ" рдФрд░ "рдЕрд╕реНрдкрд╖реНрдЯ" - рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд▓реЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рдЬрд╛рджреВ" рдХрд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╕рд╛рд░ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИред рдпреЗ рдХреЛрдб рдХреЗ рд▓реЗрдЦрди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИрдВред


рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд╣рд╛рдБ рдЧреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд░рдХреНрд╖рд╛ рдХрд╛ рдЬрдордХрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИред рдЧреЛ рд▓рдЧрднрдЧ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЬрд╛рджреВ рдХреЗ рдПрдХ рднрд╛рд╖рд╛ рд╣реИ - рдЗрд╕рдореЗрдВ "рдЫрд┐рдкреА", "рд╡рд┐рд╢реЗрд╖" рдФрд░ "рдЕрд╕реНрдкрд╖реНрдЯ" рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рд╕реЗ рдХрдо рд╣реИред рд▓реЗрдХрд┐рди рдЧреЛ рдореЗрдВ рдЗрд╕рдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред


рдЧреЛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?


рдЪреВрдБрдХрд┐ рд╣рдо Flutter рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ UI рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИ, рдЖрдЗрдП Go рдХреЛ UI рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрди рдХрд░рдиреЗ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпреВрдЖрдИ рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ рдЬрдмрд░рджрд╕реНрдд рдЪреБрдиреМрддреА рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреВрдЖрдИ рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ - рдбреЛрдореЗрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ - рдпреВрдЖрдИ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд┐рд▓рд╡рд╛рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЖрдк рдпрд╣ рд░рд╛рдп рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЧреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреАрдПрд╕рдПрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рднрд╛рд╖рд╛ рд╣реИред


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдЕрд░реНрде рд╣реИ рдПрдХ рдирдИ рднрд╛рд╖рд╛ - рдирд┐рдпрдо рдФрд░ рдХреНрд░рд┐рдпрд╛ - рдЬреЛ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рддреНрд░рдордп рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЙрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдбрд┐рдЬрд╛рдЗрдирд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд╛рде рд╣реА рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдХрдареЛрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрдЯрди рдХреЛ рдХреБрдЫ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕ рдмрдЯрди рдореЗрдВ рдЖрдЗрдХрди рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдмрдЯрди рдХреЛ рдмрдЯрди рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред


рд╕рд╛рде рд╣реА, рдпреВрдЖрдИ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛рдПрдВ рдЕрдХреНрд╕рд░ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╣реЛрддреА рд╣реИрдВ - "рдореБрдЭреЗ рдЬреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗ рд░рд╣реА рд╣реИ, рдФрд░ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рдЦреБрдж рд╕рдордЭреЗрдВ рдХрд┐ рдХрд┐рд╕ рдХреЛрдб рд╕реЗ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИред


рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рджреГрд╖реНрдЯрд┐ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЧреЛ рдирд╣реАрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓рдЯрд░ рдСрди рдЧреЛ рд▓рд┐рдЦрдирд╛ рдПрдХ рдФрд░ рдХрд╛рдо рд╣реЛрдЧрд╛!


рдУрдбрд╝рд╛ рдлрдбрд╝рдлрдбрд╝рд╛рд╣рдЯ


рдпрджрд┐ рдЖрдк рд╕реНрдкрдВрджрди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдХреЛ рд╢реИрдХреНрд╖рд┐рдХ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдкрдВрджрди, рдПрдХ рд╢рдХ рдХреЗ рдмрд┐рдирд╛, рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЦреЗрд▓ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдЙрд▓рдЯ рджреЗрддрд╛ рд╣реИред рдФрд░, рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рди рдХреЗрд╡рд▓ рдореЛрдмрд╛рдЗрд▓ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реЗрдВрдбрд░рд░реНрд╕ (рдлрд╝реНрд▓рдЯрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдореНрдмреЗрдбрд░реНрд╕) рд╣реИрдВ, рдЬреЛ рдлрд╝реНрд▓рдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЗрд╢реА рдбреЗрдХреНрд╕реНрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред


рдпрд╣ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ, рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╛рдЗрди (рдФрд░ рди рдХреЗрд╡рд▓) рдкрд░ рд╕реБрдВрджрд░ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдорд╣рд╛рди рдФрд░ рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп рдФрд░ рдЙрддреНрдХреГрд╖реНрдЯ рдЯреНрдпреВрдирд┐рдВрдЧ рд╣реИ (рдпрджрд┐ рдЖрдкрдХреЛ go build/run/test рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рдкрд╕рдВрдж рд╣реИ, рддреЛ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВред рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рдЕрдиреБрднрд╡ рдорд┐рд▓реЗрдЧрд╛)ред


рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯрд╛ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП) рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрд╣реБрдд рдорд╣рд╛рди рд╣реИ (рдЖрд╡реЗрджрди рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдирд╣реАрдВ рдерд╛) - рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд╕рд╛ рдЖрдЙрдЯрд╕реЛрд░реНрд╕ рдХрд░рдирд╛ рдФрд░ рднреБрдЧрддрд╛рди рдХрд░рдирд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ 20 рд╡рд░реНрд╖реЛрдВ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓, рд▓реЗрдХрд┐рди рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓рд╛ рд▓реЗрдЦрди рдФрд░ рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдЕрд╕рдВрднрд╡ рдХрд╛рд░реНрдп рдерд╛ред рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╣рдореЗрд╢рд╛ рдмрдХрд╡рд╛рд╕ рд░рд╣рд╛ рд╣реИред


рдлреНрд▓рдЯрд░ рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ 3 рдмрдЬреЗ рджреЛрдкрд╣рд░ рдореЗрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛, рдЬрдмрдХрд┐ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реАрдЦрдирд╛ред рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ рдореБрдЭрд╕реЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЧреЛ рдХреА рдЦреЛрдЬ рдХреА рдереА, рддрдм 5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдирдИ рддрдХрдиреАрдХ рдХреА рдЦреЛрдЬ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рд╕рдорд╛рди рд╡реГрджреНрдзрд┐ рджреЗрдЦреА рдЧрдИ рдереАред рдЙрд╕ рдкрд▓ рдиреЗ рдореЗрд░реА рдЬрд┐рдВрджрдЧреА рдмрджрд▓ рджреАред


рдЗрд╕рд▓рд┐рдП рдореИрдВ рдлрд╝реНрд▓рдЯрд░ рд╕реАрдЦрдиреЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ ред


рд╕реНрдкрдВрджрди рдкрд░ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб"


рдЬрдм рдЖрдк flutter create рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ flutter create , рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖рдХ, рдкрд╛рда, рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред



рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЧреЛ рдкрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдкрдВрджрди рдкрд░ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рд▓рдЧрднрдЧ рд╕рднреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рдПрдВ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдХреЛрдб рджреЗрдЦреЗрдВ (рдпрд╣ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИ):


 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); final String title; @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); } } 

рдЖрдЗрдП рднрд╛рдЧреЛрдВ рдореЗрдВ рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдЧреЛ рдкрд░ рдХреНрдпрд╛ рдФрд░ рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред


рд╣рдо рдЧреЛ рдкрд░ рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВ


рд╢реБрд░реБрдЖрдд рд╕рд░рд▓ рдФрд░ рд╕реАрдзреА рд╣реЛрдЧреА - рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ main() рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдкрд░рд┐рд╡рд░реНрддрди рд▓рдЧрднрдЧ рд╡рд╛рдХреНрдпрдЧрдд рд╣реИ:


 package hello import "github.com/flutter/flutter" func main() { app := NewApp() flutter.Run(app) } 

рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ MyApp() рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп MyApp() - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдХрд┐ MyApp рдирд╛рдордХ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИ - рд╣рдо рдмрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ NewApp() ред рд╡рд╣ рдПрдХ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдХреИрд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рд╡рд┐рдЬреЗрдЯ рдХрдХреНрд╖рд╛рдПрдВ


рд╕реНрдкрдВрджрди рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╡рд┐рдЧреЗрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╕реНрдкрдВрджрди рдХреЗ рдбрд╛рд░реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдкрдВрджрди рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдХрдХреНрд╖рд╛рдПрдВ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИред


рдЧреЛ рдореЗрдВ рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╡рд░реНрдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреБрдирд┐рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдо рдкрджрд╛рдиреБрдХреНрд░рдо рднреА рдирд╣реАрдВ рд╣реИред рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛-рдЙрдиреНрдореБрдЦ рдУрдУрдкреА рдореЙрдбрд▓ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рджреБрдирд┐рдпрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЕрдВрддрд░-рдЧреНрд░рд╛рдл рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдЕрд░рд╛рдЬрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╢реНрд░реЗрдгреА рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдЕрдкрдардиреАрдп рдФрд░ рдЕрдирд╛рдбрд╝реА рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИрдВред



рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреЛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдиреЗ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЗрд╕ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рдиреА рдЙрдард╛рдИ рдФрд░ рдЧреЛ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдУрдУрдкреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рд╕рдВрдпреЛрдЧ рд╕реЗ рдирд╣реАрдВ, рдУрдУрдкреА рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛, рдПрд▓рди рдХреЗ, рдХреЗ рдХрд░реАрдм рдирд┐рдХрд▓рд╛, рдорди рдореЗрдВ рдерд╛ ред


рдЧреЛ рдореЗрдВ рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ - рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ:


 type MyApp struct { // ... } 

рд╕реНрдкрдВрджрди рдХреЗ рдбрд╛рд░реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, MyApp рдХреЛ StatelessWidget рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ build рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рджреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:


  1. рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ ( MyApp ) рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдЧреБрдг / рддрд░реАрдХреЗ рджреЗрдВ
  2. рдлрд╝реНрд▓рд░реНрдЯ рдХреЛ рдмрд┐рд▓реНрдб / рд░реЗрдВрдбрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ

рдореБрдЭреЗ рдлрд╝реНрд▓рдЯрд░ рдХреЗ рдЗрдВрдЯрд░реНрдирд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдЗрдЯрдо рдирдВрдмрд░ 1 рдкреНрд░рд╢реНрди рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЧреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреВрдард╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реИ: рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдкреНрд░рдХрд╛рд░:


 type MyApp struct { flutter.Core // ... } 

рдпрд╣ рдХреЛрдб рд╣рдорд╛рд░реЗ flutter.Core рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ MyApp рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕реЗ Widget рдмрдЬрд╛рдп Core рдХрд╣рд╛, рдХреНрдпреЛрдВрдХрд┐, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯрд╛рдЗрдк рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╣рдорд╛рд░реЗ MyApp рдЕрднреА рддрдХ MyApp рд╡рд┐рдЬреЗрдЯ рдирд╣реАрдВ рдмрдирд╛рддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣ рдирд╛рдо рдЧреЛрдлрд░рдЬреЗрдПрд╕ рд╡реЗрдХреНрдЯреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдРрд╕рд╛ рд╣реА, рдЧреЛ)ред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд╡реЗрдХреНрдЯреА рдФрд░ рдлреНрд▓рдЯрд░ рдХреЗ рдмреАрдЪ рд╕рдорд╛рдирддрд╛ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред


рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ - build() рдкрджреНрдзрддрд┐ build() рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди, рдЬреЛ рдлрд╝реНрд▓рдЯрд░ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ - рдЧреЛ рдореЗрдВ рднреА рдмрд╕ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЧреЛ рдкрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╕реНрдкрдВрджрди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд╣реАрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ:


flutter.go:


 type Widget interface { Build(ctx BuildContext) Widget } 

рдФрд░ рдЕрдм рд╣рдорд╛рд░рд╛ main.go:


 type MyApp struct { flutter.Core // ... } // Build renders the MyApp widget. Implements Widget interface. func (m *MyApp) Build(ctx flutter.BuildContext) flutter.Widget { return flutter.MaterialApp() } 

рд╣рдо рдпрд╣рд╛рдВ рдХреБрдЫ рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:


  • рдХреЛрдб рдХреБрдЫ рдФрд░ рдЕрдзрд┐рдХ BuildContext - BuildContext , Widget рдФрд░ MaterialApp рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдЖрдпрд╛рдд рдХреЛ flutter рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
  • рдХреЛрдб рдереЛрдбрд╝рд╛ рдХрдо рдирд┐рд░рд╛рдзрд╛рд░ рд╣реИ - рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ extends Widget рдпрд╛ @override
  • Build() рд╡рд┐рдзрд┐ рдПрдХ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЧреЛ рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ "рдкреНрд░рдЪрд╛рд░"ред рдбрд╛рд░реНрдЯ рдореЗрдВ, рдкреНрд░рдЪрд╛рд░ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдирд╛рдо рдЕрдВрдбрд░рд╕реНрдХреЛрд░ (_) рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рддреЛ, рд╣рдорд╛рд░реЗ flutter.Core рдкрд░ Go рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ flutter.Core рдЯрд╛рдЗрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ flutter.Widget рд▓рд╛рдЧреВ рдХрд░рдирд╛ flutter.Widget ред flutter.Widget рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЖрдЧреЗ рдЦреБрджрд╛рдИ рдХреАред


рд░рд╛рдЬреНрдп


рдпрд╣ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереА, рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рд╕реНрдкрдВрджрди рдореЗрдВ рдЙрд▓рдЭрд╛ рджрд┐рдпрд╛ред рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реИрдВ - StatelessWidget рдФрд░ StatefulWidget ред рдореЗрд░реЗ рд▓рд┐рдП, рдПрдХ "рд╕реНрдЯреЗрдЯрд▓реЗрд╕ рд╡рд┐рдЬреЗрдЯ" рдПрдХ рд╣реА рд╡рд┐рдЬреЗрдЯ рд╣реИ, рдмрд╕ рдмрд┐рдирд╛, рд╣рдореНрдо, рдбреЗрдЯрд╛, рд░рд╛рдЬреНрдп - рдПрдХ рдирдП рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХреНрдпреЛрдВ рдЖрддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддрд╛ рд╣реВрдВред


рд▓реЗрдХрд┐рди рдЖрдЧреЗ - рдФрд░, рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреНрдп рд╡рд░реНрдЧ ( StatefulWidget ) рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдРрд╕рд╛ рдЬрд╛рджреВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЖрдИрдбреАрдИ рдЖрдкрдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБ рдирд╣реАрдВ):


 class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold() } } 

рд╣рдореНрдо, рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред


рдореВрд▓ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдп рдпрд╣ рд╣реИ: рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рдЬреЛрдбрд╝реЗрдВ - рдПрдХ рдХрд╛рдЙрдВрдЯрд░, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдФрд░ рдлрд╝реНрд▓рдЯрд░ рдЗрдВрдЬрди рдХреЛ рдмрддрд╛рдПрдВ рдХрд┐ рдЬрдм рд╣рдордиреЗ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ (рдмреНрд░реВрдХреНрд╕ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрдЯрд┐рд▓рддрд╛)ред


рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЖрдХрд╕реНрдорд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдбрд╛рд░реНрдЯ рдкрд░ рд╕реНрдкрдВрджрди рдПрдХ рдирдП State рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЬреЗрдирд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, _MyHomePageState рд╡рд░реНрдЧ _MyHomePageState , рдЬреЛ State MyApp рдХреА State MyApp ... рдареАрдХ рд╣реИ, рдЖрдк рдЕрднреА рднреА рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ build() рдкрджреНрдзрддрд┐ рдХреНрдпреЛрдВ рд╣реИ, рди рдХрд┐ рд╡рд╣ рд╡рд░реНрдЧ рдЬреЛ рд╡рд┐рдЬреЗрдЯ рд╣реИ? рдмреНрд░рд░реНрд░тАжред


рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рд╕реНрдкрдВрджрди рдПрдлрдПрдХреНрдпреВ рдореЗрдВ рд╣реИ рдФрд░ рд▓рдШреБ рдЙрддреНрддрд░ рдХреЛ рдпрд╣рд╛рдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╡рд░рдг рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - StatefulWidget рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдмрдЧ рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╢реНрд░реЗрдгреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрд╣ рдХреНрд▓рд╛рд╕-рдУрд░рд┐рдПрдВрдЯреЗрдб OOP рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рд╢рд┐рдХред


рд╣рдо рдЧреЛ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ "рд░рд╛рдЬреНрдп" рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ - State ред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ рд░рд╛рдЬреНрдп рд╣реИ - рдпреЗ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рднрд╛рд╖рд╛ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╣рдореЗрдВ рдпрд╣ рд╕рд╛рд░ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред рдПрдХ рдФрд░ рд╕рдорд╛рди рдЗрдХрд╛рдИ рдмрдирд╛рдирд╛ рдХреЗрд╡рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛ред


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЪреБрдиреМрддреА рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдкрдВрджрди рдХреЛ рд░рд╛рдЬреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕рд╛рд░ рд╣реИ, рд╕рдм рдХреЗ рдмрд╛рдж)ред рдФрд░ рдЕрдЧрд░ рд╣рдо рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди ( setState() ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрдВрдЬрди рдХреЛ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрдм рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╕рднреА рд░рд╛рдЬрдХреАрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдФрд░ рднреА рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд╣реЛрдЧрд╛:


 type MyHomePage struct { flutter.Core counter int } // Build renders the MyHomePage widget. Implements Widget interface. func (m *MyHomePage) Build(ctx flutter.BuildContext) flutter.Widget { return flutter.Scaffold() } // incrementCounter increments widgets's counter by one. func (m *MyHomePage) incrementCounter() { m.counter++ flutter.Rerender(m) // or m.Rerender() // or m.NeedsUpdate() } 

рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╛рдордХрд░рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ - рдореБрдЭреЗ рдЗрд╕рдХреА рдкреНрд░рддреНрдпрдХреНрд╖рддрд╛ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП NeedsUpdate() рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ ( flutter.Core рд╕реЗ рдкреНрд░рд╛рдкреНрдд), рд▓реЗрдХрд┐рди рд╡реИрд╢реНрд╡рд┐рдХ flutter.Rerender() рд╡рд┐рдзрд┐ рднреА рдЕрдЪреНрдЫреА рд▓рдЧрддреА рд╣реИред рдпрд╣ рд╕рдЪ рд╣реИ, рдпрд╣ рдЧрд▓рдд рдЕрд░реНрде рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬреЗрдЯ рддреБрд░рдВрдд рддреБрд░рдВрдд рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдЕрдкрдбреЗрдЯ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛, рдФрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдЖрд╡реГрддреНрддрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЖрд╡реГрддреНрддрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИ - рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдлрд╝реНрд▓рдЯрд░ рдЗрдВрдЬрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рд┐рд░реНрдл рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд┐рдирд╛ рдЬреЛрдбрд╝реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ:


  • рдирдП рдкреНрд░рдХрд╛рд░
  • рдЬреЗрдирд░рд┐рдХ
  • рдкрдврд╝рдиреЗ / рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо
  • рд╡рд┐рд╢реЗрд╖ рдирдИ рдУрд╡рд░рд░рд╛рдЗрдб рд╡рд┐рдзрд┐рдпрд╛рдБ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдкреАрдЖрдИ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдмрд╕ рдХрд╛рдЙрдВрдЯрд░ рдмрдврд╝рд╛рдПрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд░реЗрдВрдЧреЗ) рдФрд░ рдлрд╝реНрд▓рдЯрд░ рдХреЛ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред рдпрд╣ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╣рдо рд╕рд┐рд░реНрдл setState рдХрд╣рддреЗ рд╣реИрдВ - рдЬреЛ рдХрд┐ рд░рд╛рдЬреНрдп рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди (wtf?) рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ, рднрд╛рд╖рд╛рдУрдВ рдФрд░ рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рдЫрд┐рдкреЗ рд╣реБрдП рдЬрд╛рджреВ рдХреЛ рдХреЛрдб рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛, рдХреЛрдб рд╕рд░рд▓ рдФрд░ рджреЛ рдмрд╛рд░ рдЫреЛрдЯрд╛ рд╣реИред


рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯреНрд╕ рдореЗрдВ рд╕реНрдЯреЗрдЯ рд╡рд┐рдЬреЗрдЯреНрд╕


рд╡рд┐рд╖рдп рдХреА рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рдЬреЗрдЯ рдореЗрдВ "рд╕реНрдЯреЗрдЯ рд╡рд┐рдЬреЗрдЯ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', home: MyHomePage(title: 'Flutter Demo Home Page'), ); } 

MyHomePage рдпрд╣рд╛рдВ рдПрдХ "рд░рд╛рдЬреНрдп рд╡рд┐рдЬреЗрдЯ" (рдЗрд╕рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рд╣реИ), рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди MyHomePage() рдХреЙрд▓ рдХрд░рдХреЗ рдмрдирд╛рддреЗ рд╣реИрдВ ... рд░реБрдХреЛ, рдХреНрдпрд╛?


build() рдХреЛ рд╡рд┐рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрднрд╡рддрдГ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрдИ рдмрд╛рд░ред рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдЬреЗрдЯ рдХреНрдпреЛрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реНрдкрдВрджрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдЗрд╕ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди / рд╕реНрдЯреЗрдЯ рдореИрдиреЗрдЬрдореЗрдВрдЯ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Widget рдФрд░ State рдмреАрдЪ рдЗрд╕ рдЕрд▓рдЧрд╛рд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рдЫрд┐рдкреА рд╣реБрдИ рдЪреАрдЬреЗрдВ, рдЕрдзрд┐рдХ!)ред рдпрд╣ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд╛рдЬреНрдп, рдЕрдЧрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдЬреЗрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рджреВ рдЕрджреГрд╢реНрдп рд░реВрдк рд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдХреЛрдб рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдореИрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЗрд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреБрд░рд╛рдИ рдорд╛рдирддрд╛ рд╣реВрдВ, рдЗрд╕реЗ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдЙрдЪрд┐рдд рдард╣рд░рд╛рдпрд╛ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдФрд╕рдд рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдпрд╣ рдЬрд╛рджреВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд▓рдЯрд░ рдХреЛрдб рдирд╣реАрдВ рдкрдврд╝реЗрдЧрд╛, рдФрд░ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдФрд░ рдХреНрдпрд╛ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред


рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЫрд┐рдкреЗ рд╣реБрдП рдЬрд╛рджреВ рдЯреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣реВрдВрдЧрд╛, рдФрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рджреГрд╢реНрдп рдЖрд░рдВрднреАрдХрд░рдг рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдорддрд▓рдм рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдирд┐рд░рд╛рдзрд╛рд░ рдХреЛрдб рд╣реЛред рдбрд╛рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝реНрд▓рдЯрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЬрд╛рджреВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдПрдХ рд╣реА рджрд░реНрд╢рди рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рдореЗрдВ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦреВрдВрдЧрд╛:


 // MyApp is our top application widget. type MyApp struct { flutter.Core homePage *MyHomePage } // NewMyApp instantiates a new MyApp widget func NewMyApp() *MyApp { app := &MyApp{} app.homePage = &MyHomePage{} return app } // Build renders the MyApp widget. Implements Widget interface. func (m *MyApp) Build(ctx flutter.BuildContext) flutter.Widget { return m.homePage } // MyHomePage is a home page widget. type MyHomePage struct { flutter.Core counter int } // Build renders the MyHomePage widget. Implements Widget interface. func (m *MyHomePage) Build(ctx flutter.BuildContext) flutter.Widget { return flutter.Scaffold() } // incrementCounter increments app's counter by one. func (m *MyHomePage) incrementCounter() { m.counter++ flutter.Rerender(m) } 

рдпрд╣ рдХреЛрдб рдбрд╛рд░реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЦреЛ рджреЗрддрд╛ рд╣реИ, рдЕрдЧрд░ рдореИрдВ рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рд╕реЗ homePage рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдирд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдПрдХ рдХреЗ рдмрдЬрд╛рдп рддреАрди рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ рд╣рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛, рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдореЗрдореЛрд░реА рдЖрд╡рдВрдЯрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдХрд┐рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ - рдЖрдкрдХреЗ рд╣рд╛рде рдХреА рд╣рдереЗрд▓реА рдореЗрдВ рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИред


рд╡реИрд╕реЗ, рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рд╕реНрдЯреЗрдЯрдлреБрд▓рдмрд░реНрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рд╣реИ, рдЬреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЬрд╛рджреВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдордХреНрдЦреА рдкрд░ рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рдбреАрдПрд╕рдПрд▓


рдЕрдм рдЪрд▓рд┐рдП рдордЬрд╝реЗрджрд╛рд░ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рд▓реЗрддреЗ рд╣реИрдВред рд╣рдо Go рдкрд░ рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ? рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рд╕рд╛рдл-рд╕реБрдерд░рд╛, рд░рд┐рдлрд▓реЗрдХреНрдЯрд░ рдФрд░ рдмрджрд▓рд╛рд╡ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд┐рдХ рд░рд┐рд╢реНрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ (рд╡рд┐рдЧреЗрдЯреНрд╕ рдЬреЛ рдиреЗрддреНрд░рд╣реАрди рд╣реИрдВ, рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдордирдорд╛рдирд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдШрдЯрдирд╛ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреА рддрд░рд╣ рдХреЛрдбред


рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд╛рд░реНрдЯ рдкрд░ рд╡рд┐рдХрд▓реНрдк рдХрд╛рдлреА рд╕реБрдВрджрд░ рдФрд░ рд╢рд╛рдирджрд╛рд░ рд╣реИ:


 return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text('You have pushed the button this many times:'), Text( '$_counter', style: Theme.of(context).textTheme.display1, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); 

рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЬреЛ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ ред


рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ


рдпрджрд┐ рдЖрдк рдЗрд╕ рд╢рдмреНрдж рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ "рд╕реНрдерд┐рддрд┐" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИ:


 Foo(arg1, arg2, arg3) 

, рдФрд░ рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдХреЙрд▓ рдореЗрдВ рдЙрдирдХреЗ рдирд╛рдо рд╕реЗ рддрдп рд╣реЛрддрд╛ рд╣реИ:


 Foo(name: arg1, description: arg2, size: arg3) 

рдпрд╣ рдкрд╛рда рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рдХреЛрдб рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХреНрд▓рд┐рдХ рдФрд░ рдЪрд╛рд▓ рдмрдЪрд╛рддрд╛ рд╣реИ, рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред


рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡реЗ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВред рдКрдкрд░ рдХреЗ рд╕рдорд╛рди рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛:


 return Scaffold( AppBar( Text(widget.title), ), Center( Column( MainAxisAlignment.center, <Widget>[ Text('You have pushed the button this many times:'), Text( '$_counter', Theme.of(context).textTheme.display1, ), ], ), ), FloatingActionButton( _incrementCounter, 'Increment', Icon(Icons.add), ), ); 

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рд╣реИ рдирд╛? рдпрд╣ рд╕рдордЭрдирд╛ рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ (рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдорддрд▓рдм рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рд╣реИ), рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣рдореЗрдВ рдЪреБрдирдиреЗ рдореЗрдВ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕рд╛рдордЧреНрд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП FloatingActionButton рдирд╣реАрдВ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛, рд╣рдореЗрдВ рдпрд╛ рддреЛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд╕рд╛рде рдЬрд╛рджреВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕ рд╡рд┐рдЬреЗрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдФрд░ рдЪреВрдВрдХрд┐ рдЧреЛ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдХреЛрдИ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЧреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рдЬрд╛рдУ рд╡рд┐рдЬреЗрдЯ рдкреЗрдбрд╝


рд╕рдВрд╕реНрдХрд░рдг 1


рдЖрдЗрдП рд╕реНрдХреИрдлреЛрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрд╡рд░рдг рд╣реИред рдЗрд╕рдХреЗ рдХрдИ рдЧреБрдг рд╣реИрдВ - appBar, drawe, home, bottomNavigationBar, floActionBar - рдФрд░ рдпреЗ рд╕рднреА рд╡рд┐рдЬреЗрдЯ рд╣реИрдВред рд╡рд┐рдЬреЗрдЯ рдЯреНрд░реА рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рдЬреЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЦреИрд░, рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХрдХрд░рдг рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред


рдЪрд▓реЛ рдорд╛рдереЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:


 return flutter.NewScaffold( flutter.NewAppBar( flutter.Text("Flutter Go app", nil), ), nil, nil, flutter.NewCenter( flutter.NewColumn( flutter.MainAxisCenterAlignment, nil, []flutter.Widget{ flutter.Text("You have pushed the button this many times:", nil), flutter.Text(fmt.Sprintf("%d", m.counter), ctx.Theme.textTheme.display1), }, ), ), flutter.FloatingActionButton( flutter.NewIcon(icons.Add), "Increment", m.onPressed, nil, nil, ), ) 

рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдпреВрдЖрдИ рдХреЛрдб рдирд╣реАрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред flutter рд╢рдмреНрдж рд╣рд░ рдЬрдЧрд╣ рд╣реИ рдФрд░ рдкреВрдЫрддрд╛ рд╣реИред рдЗрд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдкреИрдХреЗрдЬ material рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рдерд╛, flutter рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рд░ рдирд╣реАрдВ), рдЕрдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпреЗ nil рдПрд╕ рд╣рд░ рдЬрдЧрд╣ рдЦреБрд▓реЗ рддреМрд░ рдкрд░ рднреНрд░рдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рд╕рдВрд╕реНрдХрд░рдг 2


рдЪреВрдВрдХрд┐, рдлрд┐рд░ рднреА, рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб flutter рдкреИрдХреЗрдЬ рд╕реЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ / рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдиреЗ рдирд╛рдо рд╕реНрдерд╛рди рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рдбреЙрдЯ рдЖрдпрд╛рдд" рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдкреИрдХреЗрдЬ рдирд╛рдо рдХреЛ "рдЫрд┐рдкрд╛рдПрдВ":


 import . "github.com/flutter/flutter" 

рдЕрдм flutter.Text рдХреА flutter.Text рд╣рдо рд╕рд┐рд░реНрдл Text рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдЖрдпрд╛рдд рд╣рд░ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдЪрдореБрдЪ рд╣реЛрдЧрд╛ред рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рд╕реЗ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЖрдпрд╛рдд рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЧреЛрдХреЗрдирд╡реЗ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрджреНрднреБрдд рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:


 return NewScaffold( NewAppBar( Text("Flutter Go app", nil), ), nil, nil, NewCenter( NewColumn( MainAxisCenterAlignment, nil, []Widget{ Text("You have pushed the button this many times:", nil), Text(fmt.Sprintf("%d", m.counter), ctx.Theme.textTheme.display1), }, ), ), FloatingActionButton( NewIcon(icons.Add), "Increment", m.onPressed, nil, nil, ), ) 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рдиреАрд▓-рдПрд╕ рдФрд░ рдЕрдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ ...ред


рд╕рдВрд╕реНрдХрд░рдг 3


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреЛрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛) рддреЛ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЧреЛ ( рдорд╛рд░реНрдЯрд┐рдиреА , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдкрд░ рдХрдИ рд╢реБрд░реБрдЖрддреА HTTP рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдмрд╣реБрдд рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЦреЛ рджреЗрддрд╛ рд╣реИ, рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдорд╛ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рдЬрд╛рджреВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 return NewScaffold( NewAppBar( Text("Flutter Go app"), ), NewCenter( NewColumn( MainAxisCenterAlignment, []Widget{ Text("You have pushed the button this many times:"), Text(fmt.Sprintf("%d", m.counter), ctx.Theme.textTheme.display1), }, ), ), FloatingActionButton( NewIcon(icons.Add), "Increment", m.onPressed, ), ) 

рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдбрд╛рд░реНрдЯ рд╕реЗ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╛рдорд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдХрдореА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдВрдЦ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддреА рд╣реИред


рд╕рдВрд╕реНрдХрд░рдг 4


рдЖрдЗрдП рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рд╣рдЯреЗрдВ рдФрд░ рдЦреБрдж рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдбрд╛рд░реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдиреЗрддреНрд░рд╣реАрди рд░реВрдк рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмреЛрдирд╕ рд╣реЛрдЧрд╛ - рдРрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд╝реНрд▓рд░реНрдЯ рдСрди рдбрд╛рд░реНрдЯ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ)ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рд╕рд┐рд░реНрдл рдирдИ рд╡рд╕реНрддреБрдПрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред


рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?


 scaffold := NewScaffold() scaffold.AppBar = NewAppBar(Text("Flutter Go app")) column := NewColumn() column.MainAxisAlignment = MainAxisCenterAlignment counterText := Text(fmt.Sprintf("%d", m.counter)) counterText.Style = ctx.Theme.textTheme.display1 column.Children = []Widget{ Text("You have pushed the button this many times:"), counterText, } center := NewCenter() center.Child = column scaffold.Home = center icon := NewIcon(icons.Add), fab := NewFloatingActionButton() fab.Icon = icon fab.Text = "Increment" fab.Handler = m.onPressed scaffold.FloatingActionButton = fab return scaffold 

, " ", . -, тАУ , . -, , .


, UI GTK Qt . , , Qt 5:


  QGridLayout *layout = new QGridLayout(this); layout->addWidget(new QLabel(tr("Object name:")), 0, 0); layout->addWidget(m_objectName, 0, 1); layout->addWidget(new QLabel(tr("Location:")), 1, 0); m_location->setEditable(false); m_location->addItem(tr("Top")); m_location->addItem(tr("Left")); m_location->addItem(tr("Right")); m_location->addItem(tr("Bottom")); m_location->addItem(tr("Restore")); layout->addWidget(m_location, 1, 1); QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); layout->addWidget(buttonBox, 2, 0, 1, 2); 

, - . , , , .


5


, тАУ -. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 func Build() Widget { return NewScaffold(ScaffoldParams{ AppBar: NewAppBar(AppBarParams{ Title: Text(TextParams{ Text: "My Home Page", }), }), Body: NewCenter(CenterParams{ Child: NewColumn(ColumnParams{ MainAxisAlignment: MainAxisAlignment.center, Children: []Widget{ Text(TextParams{ Text: "You have pushed the button this many times:", }), Text(TextParams{ Text: fmt.Sprintf("%d", m.counter), Style: ctx.textTheme.display1, }), }, }), }), FloatingActionButton: NewFloatingActionButton( FloatingActionButtonParams{ OnPressed: m.incrementCounter, Tooltip: "Increment", Child: NewIcon(IconParams{ Icon: Icons.add, }), }, ), }) } 

! , . ...Params , . , , Go , , .


-, ...Params , . (proposal) тАФ " " . , FloatingActionButtonParameters{...} {...} . :


 func Build() Widget { return NewScaffold({ AppBar: NewAppBar({ Title: Text({ Text: "My Home Page", }), }), Body: NewCenter({ Child: NewColumn({ MainAxisAlignment: MainAxisAlignment.center, Children: []Widget{ Text({ Text: "You have pushed the button this many times:", }), Text({ Text: fmt.Sprintf("%d", m.counter), Style: ctx.textTheme.display1, }), }, }), }), FloatingActionButton: NewFloatingActionButton({ OnPressed: m.incrementCounter, Tooltip: "Increment", Child: NewIcon({ Icon: Icons.add, }), }, ), }) } 

Dart! .


6


, . , , , , .


, , , -, тАУ :


 button := NewButton(). WithText("Click me"). WithStyle(MyButtonStyle1) 

рдпрд╛


 button := NewButton(). Text("Click me"). Style(MyButtonStyle1) 

Scaffold- :


 // Build renders the MyHomePage widget. Implements Widget interface. func (m *MyHomePage) Build(ctx flutter.BuildContext) flutter.Widget { return NewScaffold(). AppBar(NewAppBar(). Text("Flutter Go app")). Child(NewCenter(). Child(NewColumn(). MainAxisAlignment(MainAxisCenterAlignment). Children([]Widget{ Text("You have pushed the button this many times:"), Text(fmt.Sprintf("%d", m.counter)). Style(ctx.Theme.textTheme.display1), }))). FloatingActionButton(NewFloatingActionButton(). Icon(NewIcon(icons.Add)). Text("Increment"). Handler(m.onPressed)) } 

Go тАУ , . Dart-, :


  • ""

New...() тАУ , . , тАФ " , , , , , , тАУ " .


, , 5- 6- .



"hello, world" Flutter Go:


main.go


 package hello import "github.com/flutter/flutter" func main() { flutter.Run(NewMyApp()) } 

app.go:


 package hello import . "github.com/flutter/flutter" // MyApp is our top application widget. type MyApp struct { Core homePage *MyHomePage } // NewMyApp instantiates a new MyApp widget func NewMyApp() *MyApp { app := &MyApp{} app.homePage = &MyHomePage{} return app } // Build renders the MyApp widget. Implements Widget interface. func (m *MyApp) Build(ctx BuildContext) Widget { return m.homePage } 

home_page.go:


 package hello import ( "fmt" . "github.com/flutter/flutter" ) // MyHomePage is a home page widget. type MyHomePage struct { Core counter int } // Build renders the MyHomePage widget. Implements Widget interface. func (m *MyHomePage) Build(ctx BuildContext) Widget { return NewScaffold(ScaffoldParams{ AppBar: NewAppBar(AppBarParams{ Title: Text(TextParams{ Text: "My Home Page", }), }), Body: NewCenter(CenterParams{ Child: NewColumn(ColumnParams{ MainAxisAlignment: MainAxisAlignment.center, Children: []Widget{ Text(TextParams{ Text: "You have pushed the button this many times:", }), Text(TextParams{ Text: fmt.Sprintf("%d", m.counter), Style: ctx.textTheme.display1, }), }, }), }), FloatingActionButton: NewFloatingActionButton( FloatingActionButtonParameters{ OnPressed: m.incrementCounter, Tooltip: "Increment", Child: NewIcon(IconParams{ Icon: Icons.add, }), }, ), }) } // incrementCounter increments app's counter by one. func (m *MyHomePage) incrementCounter() { m.counter++ flutter.Rerender(m) } 

!


рдирд┐рд╖реНрдХрд░реНрд╖


Vecty


, , Vecty . , , , , Vecty DOM/CSS/JS, Flutter , 120 . , Vecty , Flutter Go Vecty .


Flutter


тАУ , . Flutter, .


Go


" Flutter Go?" "" , , , , , Flutter, , , "" . , Go .


, Go . . Go, , , -. тАУ , , .


Go. тАУ , .


Flutter


, Flutter , , . "/ " , Dart ( , , ). Dart, , (, ) DartVM V8, Flutter тАУ Flutter -.


, . . , , 1.0 . , - .


game changer, Flutter , , .


UI тАУ Flutter, .


рд╕рдВрджрд░реНрдн


Source: https://habr.com/ru/post/hi435960/


All Articles