рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╕рдорд╛рдЪрд╛рд░ рдореЗрд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рдЖрдпрд╛ рдХрд┐
рдлрд╝реНрд▓рдЯрд░ (1.9) рдХреА рдЕрдЧрд▓реА
рд░рд┐рд▓реАрдЬрд╝ рд░рд┐рд▓реАрдЬрд╝ рд╣реБрдИ , рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдЙрдкрд╣рд╛рд░реЛрдВ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╢реБрд░реБрдЖрддреА рд╕рдорд░реНрдерди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдкрд░ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реНрдкрдВрджрди рдХреЛ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдХреЗ рд╕рд╛рде рджреЗрдЦрддрд╛ рд╣реВрдВред рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП: рдлрд╝реНрд▓рдЯрд░ рдкрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рд╣реИред
рдРрд╕рд╛ "рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдВрдЧреВрдареА рд╣реИред"
рдПрдХ рджреЛ рджрд┐рди рд╕реЗ рдореЗрд░рд╛ рдорди рдмрджрд▓ рдЧрдпрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдПрдХ рддрд╛рд░рд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдЪреБрдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рд╣рдореЗрдВ рдЗрди рдкреАрдЯрд╛ рдкрдЯрд░рд┐рдпреЛрдВ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рд╕реНрд╡рд┐рдВрдЧ рдФрд░ рд╡реАрд░рддрд╛ рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛! рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд▓рдЧрднрдЧ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реБрдИред
рдХрдЯ рдХреЗ рддрд╣рдд - рдПрдХ рдХрд╣рд╛рдиреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдп рд░рд┐рдПрдХреНрдЯрд░ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлрд╝реНрд▓рдЯрд░ рдЯреВрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛, рд╕рд╛рде рд╣реА рддрдХрдиреАрдХ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рднрд╛рд╡ рднреАред

рдЗрд╕ рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реБрдП рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдЪреАрдЬрд╝ рдХреЗ рд╕реНрдкрдВрджрди рдХреЗ "рд╕реНрдкрд░реНрд╢" рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
- рджреВрд░рд╕реНрде рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз;
- рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг;
- рд╕рдВрдХреНрд░рдордг рдПрдирд┐рдореЗрд╢рди
- рд░рд╛рдЬреНрдп рдкреНрд░рдмрдВрдзрдХ - redux рдпрд╛ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреАред
рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмреИрдХрдПрдВрдб рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдУрдкрди рдПрдкреАрдЖрдИ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдирддреАрдЬрддрди, рдореИрдВ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдкрд░ рдмрд╕ рдЧрдпрд╛ -
рдПрдХреНрд╕рдПрдордПрд▓ рдФрд░ рдЬреЗрдПрд╕рдПрди, рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реАрдмреАрдЖрд░ рдкрд╛рдареНрдпрдХреНрд░рдо ред рдЦреИрд░, рдореИрдВрдиреЗ рдЕрдВрддрддрдГ рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ: рджреЛ рд╕реНрдХреНрд░реАрди рд╣реЛрдВрдЧреЗ, рдореБрдЦреНрдп рдПрдХ рдкрд░ рд╕реАрдмреАрдЖрд░ рд╡рд┐рдирд┐рдордп рджрд░ рдкрд░ рдореБрджреНрд░рд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрдм рдЖрдк рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░реАрди рдЦреЛрд▓рддреЗ рд╣реИрдВред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдЪреВрдБрдХрд┐
flutter create
рдХрдорд╛рдВрдб рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ / рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП (рдХреЗрд╡рд▓ рдореИрдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП
--macos
рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ), рдЖрдкрдХреЛ
рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╣реЛрдЧрд╛ , рдЬрд╣рд╛рдВ рдПрдХ рддреИрдпрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ,
example
рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╡рд╣рд╛рдВ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред
рдЪреВрдВрдХрд┐ рдбреЗрд╕реНрдХрдЯреЙрдк рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЕрднреА рднреА рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЕрдзреАрди рд╣реИ, рдлрд┐рд░ рднреА рдЖрдкрдХреЛ рдХрдИ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рджреМрдбрд╝реЗрдВ:
flutter channel master flutter upgrade
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдлрд╝реНрд▓рдЯрд░ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:
flutter config --enable-linux-desktop
рдпрд╛
flutter config --enable-macos-desktop
рдпрд╛
flutter config --enable-windows-desktop
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ
flutter doctor
рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдПрдХ рд╕рдорд╛рди рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рддреЛ, рджреГрд╢реНрдп рддреИрдпрд╛рд░ рд╣реИ, рд╣реЙрд▓ рдореЗрдВ рджрд░реНрд╢рдХ - рд╣рдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЦрд╝рд╛рдХрд╛
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдЖрдкрдХреА рдирдЬрд╝рд░ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓ рдХреЗ рдмрд╛рдж рдкрдХрдбрд╝рддреА рд╣реИ, рд╡рд╣ рд╣реИ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рд░реНрдХрдЕрдк рд▓реИрдВрдЧреНрд╡реЗрдЬ a la JSX рдХреА рдХрдореАред рд╕реНрдкрдВрджрди рдЖрдкрдХреЛ
рдбрд╛рд░реНрдЯ рдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рджреЛрдиреЛрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ: рджреЗрдЦреЛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рдХреЛрдб рдмреЛрдЭрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреЗ рдмреНрд░реИрдХреЗрдЯ рдШрдЯрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣реИрдВ!
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ:

рдФрд░ рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИ! рдпрд╣ рдЧрд▓рдд рдЬрдЧрд╣ рдкрд░ рдПрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рдПрдХ рд╕реБрдЦрдж (рдирд╣реАрдВ) рд╢рдЧрд▓ рдЖрдкрдХреЛ рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝реНрд▓рдЯрд░ рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдШрдЯрдХреЛрдВ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдХреЗ рдХрд╛рд░рдг, рдмрдбрд╝реЗ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрд╛рджрдХ рдХреЗ рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдЗрдВрдбреЗрдВрдЯ рдХрд╛рдлреА рддреЗрдЬрд╝реА рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрд╖реНрдардХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрдВрджрди рд╢реИрд▓реА рдореЗрдВ рд╕рдорд╛рди рдШрдЯрдХ рд╣реИрдВ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдирд╛ - рд╡рд┐рдЧреЗрдЯреНрд╕)ред
рдпрджрд┐
View
рдЕрдВрджрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрди рдмрдЯрди рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ, рддрд╛рдХрд┐ рд╡реЗ рдХрдВрдЯреЗрдирд░ рд╕реНрдкреЗрд╕ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ, рддреЛ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП
flexDirection: 'row'
рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
flexDirection: 'row'
рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ
View
рд▓рд┐рдП
flexDirection: 'row'
рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдмрдЯрди рдХреЗ рд▓рд┐рдП
flex: 1
рдЬреЛрдбрд╝реЗрдВ, рддреЛ рдлрд╝реНрд▓рдЯрд░ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдШрдЯрдХ рд╣реИ
Row
рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдкрдВрдХреНрддрд┐ рдФрд░ рдкреВрд░реЗ рдЙрдкрд▓рдмреНрдз рд╕реНрдерд╛рди рдкрд░ рдПрдХ рддрддреНрд╡ рдХреЗ "рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛" рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ:
Expanded
ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреЗ рдмрдЬрд╛рдп
<View style={{height: 100, width:300, flexDirection: 'row'}}> <Button title='A' style={{flex:1}}> <Button title='B' style={{flex:1}}> <Button title='C' style={{flex:1}}> </View>
рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:
Container( height: 100, width: 300, child: Row( children: <Widget>[ Expanded( child: RaisedButton( onPressed: () {}, child: Text('A'), ), ), Expanded( child: RaisedButton( onPressed: () {}, child: Text('B'), ), ), Expanded( child: RaisedButton( onPressed: () {}, child: Text('C'), ), ), ], ), )
рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛, рдпрд╣ рдирд╣реАрдВ рд╣реИ?
рдпрд╛, рдХрд╣реЗрдВ, рдЖрдк рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЧреЛрд▓ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдлреНрд░реЗрдо рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдореЗрдВ, рд╣рдо рдмрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
borderRadius: 5, borderWidth: 1, borderColor: '#ccc'
рд╕реНрдкрдВрджрди рдореЗрдВ, рд╣рдореЗрдВ рдХрдВрдЯреЗрдирд░ рддрд░реНрдХреЛрдВ рдореЗрдВ рдРрд╕рд╛ рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(5)), border: Border.all(width: 1, color: Color(0xffcccccc)) ),
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореЗрд░рд╛ рдорд╛рд░реНрдХрдЕрдк рдХреЛрдб рдХреА рд╡рд┐рд╢рд╛рд▓ рд╢реАрдЯ рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╢реИрддрд╛рди рдЕрдкрдирд╛ рдкреИрд░ рддреЛрдбрд╝ рджреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмрдбрд╝реЗ рдШрдЯрдХреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЯреВрдЯ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЕрд▓рдЧ рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХреЗ рд╡рд┐рдЬреЗрдЯ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВред
рджреВрд╕рд░реЗ, рд╡реАрдПрд╕ рдХреЛрдб рдореЗрдВ рдлрд╝реНрд▓рдЯрд░ рдкреНрд▓рдЧрдЗрди рдмрд╣реБрдд рдорджрдж рдХрд░рддрд╛ рд╣реИ - рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдХреЛрд╖реНрдардХ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рд╣реА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╣реЛрддреА рд╣реИ (рдФрд░ рд╡реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ), рдЬреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рднреНрд░рдорд┐рдд рди рд╣реЛрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдкреНрд▓рд╕ рдСрдЯреЛ-рд╕реНрд╡рд░реВрдкрдг рдЙрдкрдХрд░рдг - рдЖрдзреЗ рдШрдВрдЯреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рд╕рдордп-рд╕рдордп рдкрд░
Ctrl+Shift+I
рдХреЛ рдХреЛрдб рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдбрд╛рд░реНрдЯ рднрд╛рд╖рд╛ рдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрдЦрдж рд╣реЛ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рджрд┐рди рдХреЗ рдЕрдВрдд рддрдХ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрдпрд╛ред рдЕрд╕рд╛рдорд╛рдиреНрдп? рд╣рд╛рдВред рд▓реЗрдХрд┐рди рдЕрдкреНрд░рд┐рдп рдирд╣реАрдВред
рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз
рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ, рдХреБрдЫ рдПрдкреАрдЖрдИ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЖрдорддреМрд░ рдкрд░
fetch
рдХреЗ
fetch
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ
Promise
рд╣реИред
рд╕реНрдкрдВрджрди рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рд╕рдорд╛рди рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ HTTP рдкреИрдХреЗрдЬ рдХреЛ
pubspec.yaml
рдЬреЛрдбрд╝рд╛ (рдЬреЗрдПрд╕ рджреБрдирд┐рдпрд╛ рд╕реЗ
pubspec.yaml
рдПрдХ рдПрдирд╛рд▓реЙрдЧ) рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛:
Future<http.Response> getAnything() { return http.get(URL); }
Future
рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдорд┐рд╕ рдХреЗ рдЕрд░реНрде рдореЗрдВ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рдЦреИрд░, json рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ
fromJSON
/
toJSON
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк JSON /
toJSON
рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдореИрдВ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд╕реНрдкрдВрджрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдШреВрдо рд░рд╣рд╛ рд╣реИред рдареАрдХ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдРрд╕рд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ - рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рд╡рд┐рдВрдбреЛ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реНрд▓рдЯрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреА рдПрдХ рд╣реА рд╕реНрдХреНрд░реАрди рд╣реИред
рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ: рд╣рдо рдПрдХ рд╕реНрдХреНрд░реАрди рд╡рд┐рдЬреЗрдЯ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдорд╛рдирдХ
Navigator
рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
RaisedButton( child: Text('Go to Detail'), onPressed: () { Navigator.of(context).push<void>(MaterialPageRoute(builder: (context) => DetailScreen())); }, )
рдпрджрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рд╕реНрдХреНрд░реАрди рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд╣реИ, рдФрд░ рдлрд┐рд░
pushNamed
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг:
class NavigationApp extends StatelessWidget {
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рд╕реНрдХреНрд░реАрди рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдиреАрдореЗрд╢рди рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
Navigator.of(context).push<void>(ScaleRoute(page: DetailScreen()));
рдпрд╣рд╛рдБ
ScaleRoute
рд╕рдВрдХреНрд░рдордг рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХреЗ рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ ред
рд░рд╛рдЬрдХреАрдп рдкреНрд░рдмрдВрдз
рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд┐рд╕реА рднреА рд╣рд┐рд╕реНрд╕реЗ рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред React Native рдореЗрдВ, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ (рдпрджрд┐ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ)
redux
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП, рдПрдХ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ - рд░реЗрдбрдХреНрд╕, рдПрдорд╡реАрд╕реА рдФрд░ рдПрдорд╡реАрдпреВ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред
рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рд░рдордиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ
Provider
рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐
ChangeNotifier
рд╡рд░реНрдЧ рдХреЛ
ChangeNotifier
, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ рдЙрдард╛ рд▓реЗрдВрдЧреЗред рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ
рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
provider
рдкреИрдХреЗрдЬ рдХреЛ
pubspec.yaml
рдФрд░ рдкреНрд░рджрд╛рддрд╛ рд╡рд░реНрдЧ рддреИрдпрд╛рд░ рдХрд░реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
import 'package:flutter/material.dart'; import 'package:rates_app/models/rate.dart'; class RateProvider extends ChangeNotifier { Rate currentrate; void setCurrentRate(Rate rate) { this.currentrate = rate; notifyListeners(); } }
рдпрд╣рд╛рдБ
Rate
рдореЗрд░реА рдореБрджреНрд░рд╛ рдореЙрдбрд▓ рд╡рд░реНрдЧ рд╣реИ (рдлрд╝реАрд▓реНрдб
name
,
code
,
value
, рдЖрджрд┐ рдХреЗ рд╕рд╛рде), рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рд╡рд╣ рдХреНрд╖реЗрддреНрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрдпрдирд┐рдд рдореБрджреНрд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдЧреА, рдФрд░
setCurrentRate
рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдорд╛рди
currentrate
ред
рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЖрд╡реЗрджрди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдХреЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ:
@override Widget build(BuildContext context) { return ChangeNotifierProvider( builder: (context) => RateProvider(),
рдпрд╣реА рд╣реИ, рдЕрдм рдпрджрд┐ рд╣рдо рдЪрдпрдирд┐рдд рдореБрджреНрд░рд╛ рдХреЛ рдмрдЪрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
Provider.of<RateProvider>(context).setCurrentRate(rate);
рдФрд░ рдЕрдЧрд░ рд╣рдо рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣:
var rate = Provider.of<RateProvider>(context).currentrate;
рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдФрд░ рдХреЛрдИ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ (Redux рдХреЗ рд╡рд┐рдкрд░реАрдд) рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдореЗрд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рд╣реИрдВ, рд╢реБрджреНрдз рд╡рд╛рдЗрдиред
рдЖрд╡реЗрджрди рдмрдирд╛рдПрдБ
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ,
flutter build <platform>
рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЬрдм рдореИрдВрдиреЗ
flutter build linux
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рдпрд╣ рд╕рдВрджреЗрд╢ рдорд┐рд▓рд╛:

"рдореБрдЭреЗ рджреБрдЦ рдирд╣реАрдВ рд╣реБрдЖ," рдореБрдЭреЗ рд▓рдЧрд╛, рдореИрдВ
build
рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд╡рдЬрди рд╕реЗ рдШрдмрд░рд╛ рдЧрдпрд╛ рдерд╛ - 287.5 рдПрдордмреА - рдФрд░ рдореЗрд░реА рдЖрддреНрдорд╛ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛ - рд╡реНрдпрд░реНрде рдореЗрдВред
build
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ - рдХрд▓реЗрдХреНрдЯрд░ рдиреЗ рдЧрд╛рдпрдм рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЦ рд▓рд┐рдпрд╛ред
рдереЛрдбрд╝рд╛ рд╢реЛрдз рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ
snapshot_blob.bin.d
рдлрд╝рд╛рдЗрд▓ рдереА, рдЬрд┐рд╕рдореЗрдВ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рд▓рд┐рдЦреЗ рдЧрдП рдереЗред рдореИрдВрдиреЗ рдЧреБрдо рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕ рд╕рдордп рд╕реНрдкрдВрджрди рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбреЗрд╕реНрдХрдЯреЙрдк рдХреЗ рд▓рд┐рдП рд░рд┐рд▓реАрдЬрд╝ рдмрд┐рд▓реНрдб рдХреИрд╕реЗ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╡реИрд╕реЗ рднреА, рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдПред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рдЗрд╕ рдорд╛рдЗрдирд╕ рдореЗрдВ рдЕрдкрдиреА рдЖрдБрдЦреЗрдВ рдмрдВрдж рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрд╡реЗрджрди рдЙрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рджрд┐рдЦрддрд╛ рд╣реИ
рдмреЛрдирд╕
рд╣рдо рд╡рд╛рджрд╛ рдХрд┐рдП рдЧрдП рдмреЛрдирд╕ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрд╡реЗрджрди рд▓рд┐рдЦрдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА рдХрд┐ рдЗрд╕реЗ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рд╕реЗрд▓ рдлреЛрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрдо рдмрд░реНрдмрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рд╕реАрдзрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╕ рдПрдХ рдирдпрд╛
pubspec.yaml
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛,
pubspec.yaml
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП
assets
,
fonts
рдФрд░
pubspec.yaml
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдПрдВ рдФрд░
AndroidManifest.xml
рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реА:
<uses-permission android:name="android.permission.INTERNET" />
рдЖрд╡реЗрджрди рдПрдХ рдЖрдзрд╛ рдХрд┐рдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓ рдЧрдпрд╛
рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд╡реЗрдм рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рд╡реЗрдм рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдереВрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди
рдЗрд╕ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЖрдпрд╛ред
рдирддреАрдЬрддрди, рд╕рдм рдХреБрдЫ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд╣реЛ рдЧрдпрд╛ - рдпрд╣ рдХреЗрд╡рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдореИрдиреБрдЕрд▓ рд╕реЗ рдирд┐рдЪреЛрдбрд╝:
flutter channel master flutter upgrade flutter config --enable-web cd <into project directory> flutter create . flutter run -d chrome
рддрдм рдореИрдВрдиреЗ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдмрд░реНрдмрд░ рддрд░реАрдХреЗ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреАрдВ рдФрд░ рдРрд╕реА рдкреНрд░рд╛рдкреНрдд рдХреА
рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдкреНрд░реЗрд╢рди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдкрдВрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рдерд╛, рдореИрдВрдиреЗ рд▓рдЧрд╛рддрд╛рд░ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдФрд░ рдпрд╣ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд╛рд░реНрдЯ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЕрддрд┐рд░реЗрдХ рдереЛрдбрд╝рд╛ рдкрд░реЗрд╢рд╛рди рдерд╛ред
рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╣рд╛рде (рдФрд░ рд╢рдВрдХреБ) рдереЛрдбрд╝рд╛ рд╕рд╛ рдЙрдард╛рдпрд╛, рддреЛ рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдкрд░ рдлрд╝реНрд▓рдЯрд░ рдХреЗ рдлрд╛рдпрджреЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗред рдореИрдВ рдХреБрдЫ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛ред
рднрд╛рд╖рд╛ рдбрд╛рд░реНрдЯ рдордЬрдмреВрдд рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдФрд░ рдЕрдЪреНрдЫреА рднрд╛рд╖рд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмрд╛рдж, рдпрд╣ рддрд╛рдЬреА рд╣рд╡рд╛ рдХреА рд╕рд╛рдВрд╕ рдХреА рддрд░рд╣ рдерд╛ред рдореБрдЭреЗ рдбрд░ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рдПрдХ рд╕реБрдЦрдж рдПрд╣рд╕рд╛рд╕ рдерд╛ред рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓реЛ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╣рдо рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдФрд░ рд╣рдореЗрд╢рд╛ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рдореИрдВ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рдореИрдЪрд╕реНрдЯрд┐рдХ рдкреНрд░реЙрдкрд░ рдкрд░ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкрдВрджрди рдХреЗ рд╕рд╛рде, рдореИрдВ рдЗрд╕ рднрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЧрдпрд╛, рдФрд░ рдпрджрд┐ рдХреАрдордд рдХреЛрдб рдЕрддрд┐рд░реЗрдХ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред
рдордВрдЪ ред рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ, рдЖрдк рдореВрд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЕрдЪреНрдЫрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рдЖрдкрдХреЛ рдХрднреА-рдХрднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрдЧреНрд╕ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдердХрд╛ рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдкрдВрджрди рдХреЗ рд╕рд╛рде, рдЖрдк рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рджреБрдГрд╕реНрд╡рдкреНрди рдХреА рддрд░рд╣ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЪреАрдЬреЗрдВ рдЗрддрдиреА рдЪрд┐рдХрдиреА рди рд╣реЛрдВ)ред
рдкрд░реНрдпрд╛рд╡рд░рдг ред рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЙрджрд╛рд╕ рд╣реИред Vscode рдкреНрд▓рдЧрдЗрдиреНрд╕ рд▓рдЧрд╛рддрд╛рд░ рдЧрд┐рд░рддреЗ рд╣реИрдВ, рдбрд┐рдмрдЧрд░ рдСрдкрд░реЗрдЯрд┐рд╡ рдХреЗ 16 рдЧреАрдЧрд╛ рдФрд░ рд╕реНрд╡реИрдк рдХреЗ 70 рдЧрд┐рдЧ рдХреЛ рдХрд╕рдХрд░ рдкрдХрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╕рдХрд░ рд▓рдЯрдХрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗ), рдФрд░ рд╕рдмрд╕реЗ рдЖрдо рддреНрд░реБрдЯрд┐ рд╕реБрдзрд╛рд░ рдкрд░рд┐рджреГрд╢реНрдп: "рдиреЛрдб_рдореЙрдбреНрдпреВрд▓реНрд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ, рдлрд┐рд░ рд╕реЗ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХрдИ рдмрд╛рд░ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред" рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреНрд▓рд╛рдЬрдб! рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ AndroidStudio рдФрд░ Xcode рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдЖрд░рдПрди 0.60 рдХреА рд░рд┐рд╣рд╛рдИ рдХреЗ рд╕рд╛рде рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛)ред
рдЗрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рдЦрд┐рд▓рд╛рдл, vscode рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдлрд╝реНрд▓рдЯрд░ рдкреНрд▓рдЧрдЗрди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдСрдЯреЛ-рд╕реНрд╡рд░реВрдкрдг рдХреЛрдбрд┐рдВрдЧ рд╢реИрд▓реА, рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдмрдЧрд░, рдЖрджрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдЕрдзрд┐рдХ рдкрд░рд┐рдкрдХреНрд╡ рдЙрдкрдХрд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред
рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд "рдПрдХ рдмрд╛рд░ рд╕реАрдЦреЛ, рд╣рд░ рдЬрдЧрд╣ рд▓рд┐рдЦреЛ" рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рд╕реАрдЦ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рддрд╣рдд рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓ рдХреА рдЕрдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ - рдлрд┐рд▓рд╣рд╛рд▓, рдирд╡реАрдирддрдо рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг 0.61 рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 1.0 рдХреЗ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдПрдВ рджреВрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред
рд╕реНрдкрдВрджрди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд▓рд┐рдЦреЗрдВ рдЬреИрд╕реЗ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦреЗрдВ, рд╣рд░ рдЬрдЧрд╣ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдФрд░ рднрд▓реЗ рд╣реА рдбреЗрд╕реНрдХрдЯреЙрдк рдлрд┐рд▓рд╣рд╛рд▓ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдм рднреА рдЕрд▓реНрдлрд╛ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдЙрд╕реА рдкрд░ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдХреЛрдб рдЖрдзрд╛рд░ рд░рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдПрдХ рдордЬрдмреВрдд рддрд░реНрдХ рд╣реИред
рдмреЗрд╢рдХ, рд╕реНрдкрдВрджрди рднреА рджреЛрд╖реЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдиреБрднрд╡ рдореБрдЭреЗ рдЙрдирдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рд╡рд╕реНрддреБрдирд┐рд╖реНрда рдореВрд▓реНрдпрд╛рдВрдХрди рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рдирд╡реАрдирддрд╛ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдореБрдХреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕реНрдкрдВрджрди рдиреЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕рдХреЗ рдмрдврд╝рдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдФрд░ рдЕрдЧрд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореИрдВ рдЗрд╕ рдкрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рддреИрдпрд╛рд░ рд╣реЛрдКрдВрдЧрд╛, рди рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдкрд░ред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб
GitHub рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
PS рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╢рд┐рдХреНрд╖рдХ рджрд┐рд╡рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдзрд╛рдИ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд╡рд╕рд░ рд▓реЗрддрд╛ рд╣реВрдВред