рдШреЛрдбрд╝реЗ рдиреЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХреА, рд▓реЗрдХрд┐рди рд╕рд╛рдореВрд╣рд┐рдХ рдЦреЗрдд рдХреЗ рдЕрдзреНрдпрдХреНрд╖ рдирд╣реАрдВ рдмрдиреЗ



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

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

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

рдЖрд╡реЗрджрди 3 рд╕реНрдХреНрд░реАрди рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред


рдЯрд╛рдЗрдорд░ рдСрдкрд░реЗрд╢рди рд╕реНрдХреНрд░реАрди


рд╡рд░реНрдХрдЖрдЙрдЯ рд╣рд┐рд╕реНрдЯреНрд░реА рд╕реНрдХреНрд░реАрди


рдЯрд╛рдЗрдорд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдХреНрд░реАрди

рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХ рдЬреЛ рдореЗрд░реА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВрдЧреЗ:
- рд▓реЗрдЖрдЙрдЯ
- рдХрд╕реНрдЯрдо рджреГрд╢реНрдп
- рдпреВрдЖрдИ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ
- рдбреЗрдЯрд╛рдмреЗрд╕
- рдиреЗрдЯрд╡рд░реНрдХ
- рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ

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

рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЪрдпрди


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

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



рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛


рджреЗрд╢реА рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди .storyboard (iOS) рдФрд░ .xml (Android), рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ Podfile (iOS) рдФрд░ рдЧреНрд░реИрдбрд▓ (Android), рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓реЗрдВ .swift (iOS) рдФрд░ .kt (Android) рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЖрдЙрдЯ рдлрд╝рд╛рдЗрд▓ рд╣реИред


Android рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд░рдЪрдирд╛


IOS рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛

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

рдлрд╝реНрд▓рдЯрд░ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рдкреИрдХреЗрдЬ .json (рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡) рдФрд░ pubspec.yaml (рдлрд╝реНрд▓рдЯрд░) рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрдХ рдФрд░ .js (рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡) рдФрд░ .dart (рдлрд╝реНрд▓рдЯрд░) рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рднреА рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рднреА рд╣реЛрддреЗ рд╣реИрдВред


рд╕реНрдкрдВрджрди рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрд░рдЪрдирд╛


рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░

рдореЗрдХрдЕрдк


рджреЗрд╢реА рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рд╣реИрдВред рдпрд╣ рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред


рджреЗрд╢реА Android рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░


рджреЗрд╢реА iOS рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рдПрдбрд┐рдЯрд░

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


рд╕реНрдкрдВрджрди рдореЗрдВ рдЧрд░реНрдо рд░рд┐рдмреВрдЯ


рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рд╣реЙрдЯ рд░рд┐рдмреВрдЯ

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

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

рдкреНрд░рддреНрдпреЗрдХ рдЪрдпрдирд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЯрд╛рдЗрдорд░ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг:


рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдЯрд╛рдЗрдорд░ рд╕реНрдХреНрд░реАрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ


IOS рдкрд░ рдЯрд╛рдЗрдорд░ рд╕реНрдХреНрд░реАрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ

рд╕реНрдкрдВрджрди рдЯрд╛рдЗрдорд░ рд╕реНрдХреНрд░реАрди рдХрд╛ рд▓реЗрдЖрдЙрдЯ

@override Widget build(BuildContext context) { return Scaffold( body: Stack( children: <Widget>[ new Container( color: color, child: new Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Text( " ${getTextByType(trainingModel.type)}", style: new TextStyle( fontWeight: FontWeight.bold, fontSize: 24.0), ), new Text( "${trainingModel.timeSec}", style: TextStyle( fontWeight: FontWeight.bold, fontSize: 56.0), ), new Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: <Widget>[ Text( " ${trainingModel.setCount}", style: TextStyle( fontWeight: FontWeight.bold, fontSize: 24.0), ), Text( " ${trainingModel.cycleCount}", style: TextStyle( fontWeight: FontWeight.bold, fontSize: 24.0), ), ], ), ], ), padding: const EdgeInsets.all(20.0), ), new Center( child: CustomPaint( painter: MyCustomPainter( //0.0 trainingModel.getPercent()), size: Size.infinite, ), ) ], )); } 

рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдиреЗрдЯрд┐рд╡ рдЯрд╛рдЗрдорд░ рд╕реНрдХреНрд░реАрди рд▓реЗрдЖрдЙрдЯ

  render() { return ( <View style={{ flex: 20, flexDirection: 'column', justifyContent: 'space-between', alignItems: 'stretch', }}> <View style={{height: 100}}> <Text style={{textAlign: 'center', fontSize: 24}}> {this.state.value.type} </Text> </View> <View style={styles.container}> <CanvasTest data={this.state.value} style={styles.center}/> </View> <View style={{height: 120}}> <View style={{flex: 1}}> <View style={{flex: 1, padding: 20,}}> <Text style={{fontSize: 24}}>  {this.state.value.setCount} </Text> </View> <View style={{flex: 1, padding: 20,}}> <Text style={{textAlign: 'right', fontSize: 24}}>  {this.state.value.cycleCount} </Text> </View> </View> </View> </View> ); } 

рдХрд╕реНрдЯрдо рджреГрд╢реНрдп


рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛ рдХрд┐ рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рдШрдЯрдХ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣реА рд╣реИ, рд╡рд░реНрдЧреЛрдВ, рд╣рд▓рдХреЛрдВ рдФрд░ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рдпреВрдЖрдИ рдбреНрд░рд╛ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЯрд╛рдЗрдорд░ рд╕рдВрдХреЗрддрдХ рдПрдХ рдРрд╕рд╛ рджреГрд╢реНрдп рд╣реИред



рджреЗрд╢реА рдЖрдИрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА, рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдпрд░ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛рдиреБрд╕рд╛рд░ рдХреБрдЫ рднреА рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  let shapeLayer = CAShapeLayer() var angle = (-Double.pi / 2 - 0.000001 + (Double.pi * 2) * percent) let circlePath = UIBezierPath(arcCenter: CGPoint(x: 100, y: 100), radius: CGFloat(95), startAngle: CGFloat(-Double.pi / 2), endAngle: CGFloat(angle), clockwise: true) shapeLayer.path = circlePath.cgPa 

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

  @Override protected void onDraw(Canvas canvas) { pathCircleOne = new Path(); pathCircleOne.addArc(rectForCircle, -90, value * 3.6F); canvas.drawPath(pathCircleBackground, paintCircleBackground); } 

рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ CustomPainter рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдФрд░ рдкреЗрдВрдЯ (рдХреИрдирд╡рд╕ рдХреИрдирд╡рд╛рд╕, рдЖрдХрд╛рд░ рдЖрдХрд╛рд░) рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдХреИрдирд╡рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ - рдЕрд░реНрдерд╛рдд, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

  @override void paint(Canvas canvas, Size size) { Path path = Path() ..addArc( Rect.fromCircle( radius: size.width / 3.0, center: Offset(size.width / 2, size.height / 2), ), -pi * 2 / 4, pi * 2 * _percent / 100); canvas.drawPath(path, paint); } 

рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдХреЗрд╡рд▓ js рдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдФрд░ рдпрд╣ рджреЗрд╢реА ui рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рдХреИрдирд╡рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХреИрдирд╡рд╛рд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

  handleCanvas = (canvas) => { if (canvas) { var modelTimer = this.state.value; const context = canvas.getContext('2d'); context.arc(75, 75, 70, -Math.PI / 2, -Math.PI / 2 - 0.000001 - (Math.PI * 2) * (modelTimer.timeSec / modelTimer.maxValue), false); } } 

UI рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдХрд░рдирд╛




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

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return countCell } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { return cell } 

рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП, рд╡реЗ RecyclerView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрд╕реА рддрд░рд╣ рдХреЗ iOS рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

 class MyAdapter(private val myDataset: Array<String>) : RecyclerView.Adapter<MyAdapter.MyViewHolder>() { override fun onBindViewHolder(holder: MyViewHolder, position: Int) { holder.textView.text = myDataset[position] } override fun getItemCount() = myDataset.size } 

рд╕реНрдкрдВрджрди рдХреЗ рд▓рд┐рдП, рд╡реЗ рдПрдХ рд╕реВрдЪреА рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рд▓реНрдбрд░ рдореЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

 new ListView.builder( itemCount: getCount() * 2, itemBuilder: (BuildContext context, int i) { return new HistoryWidget( Key("a ${models[index].workTime}"), models[index]); }, ) 

React Native рдПрдХ ListView рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдореЗрдВ рд╣рдо рддрддреНрд╡реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд░реЗрдВрдбрд░рд░реЛ рдореЗрдВ, рд╣рдо рдПрдХ рд╕реЗрд▓ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рддрддреНрд╡ рдЖрдпрд╛ рд╣реИред

 <ListView dataSource={this.state.dataSource} renderRow={(data) => <HistoryItem data={data}/>} /> 

рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ


рдЬрдм рдореИрдВрдиреЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕реА рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рд╕реЗ рднрдпрднреАрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред IOS рдореЗрдВ - рдпрд╣ рдЬреАрд╕реАрдбреА, рдСрдкрд░реЗрд╢рди рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ - AsyncTask, Loader, Coroutine, React Native - Promise, Async / Await рдореЗрдВ, Flutter-Future, Stream рдореЗрдВред рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрднреА рднреА рдЕрд▓рдЧ рд╣реИред
рдкреНрд░рд┐рдп Rx рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрд╕рдХреЗ рдкреНрдпрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣ рдЙрди рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдлреЙрд░реНрдо рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ: рдЖрд░рдПрдХреНрд╕рдбрд╛рд░реНрдЯ, рдЖрд░рдПрдХреНрд╕рдЬрд╛рд╡, рдЖрд░рдПрдХреНрд╕рдЬреЗ, рдЖрд░рдПрдХреНрд╕рд╕реНрд╡рд┐рдлреНрдЯред

RxJava

  Observable.interval(1, TimeUnit.SECONDS) .subscribe(object : Subscriber<Long>() { fun onCompleted() { println("onCompleted") } fun onError(e: Throwable) { println("onError -> " + e.message) } fun onNext(l: Long?) { println("onNext -> " + l!!) } }) 

RxSwift

 Observable<Int>.interval(1.0, scheduler: MainScheduler.instance) .subscribe(onNext: { print($0) }) 

RxDart

  Stream.fromIterable([1, 2, 3]) .transform(new IntervalStreamTransformer(seconds: 1)) .listen((i) => print("$i sec"); 

RxJS

 Rx.Observable .interval(500 /* ms */) .timeInterval() .take(3) .subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }) 

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

рдбреЗрдЯрд╛рдмреЗрд╕


рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ, рдорд╛рдирдХ SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдирд╛ рд╕рдорд╛рдзрд╛рди рдореЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред Android рдЖрдорддреМрд░ рдкрд░ ORM рдХрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

IOS рдкрд░, Core Dataред рд╕реНрдкрдВрджрди рд╕реНрдХреНрдлрд╝рд▓рд╛рдЗрдЯ рд╕рдВрд╡реЗрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рд░рд┐рдпрд▓рдо рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдУрд░ рджреЗрдЦрдирд╛ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реИ, рдЬреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд░реНрдиреЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ iOS, Android, рдФрд░ React Native рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИред рд╕реНрдкрдВрджрди рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рджрд╛рдпрд░реЗ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

Android рдкрд░ рджрд╛рдпрд░реЗ

 RealmResults<Item> item = realm.where(Item.class) .lessThan("id", 2) .findAll(); 

IOS рдкрд░ рджрд╛рдпрд░реЗ

 let item = realm.objects(Item.self).filter("id < 2") 

рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдореЗрдВ рджрд╛рдпрд░реЗ

 let item = realm.objects('Item').filtered('id < 2'); 

рдХреА-рд╡реИрд▓реНрдпреВ рд╕реНрдЯреЛрд░реЗрдЬ


Native iOS рдпреВрдЬрд░рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреЗрд╢реА Android рдореЗрдВ, рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдПрдБред рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдФрд░ рд╕реНрдкрдВрджрди рдореЗрдВ, рдЖрдк рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕реНрдЯреЛрд░ (рд╢реЗрдпрд░реНрдбрдкреНрд░рд┐рдлрд░реЗрдВрд╕ (рдПрдВрдбреНрд░реЙрдЗрдб) рдФрд░ рдпреВрдЬрд░рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ (рдЖрдИрдУрдПрд╕)) рдХреЗ рд░реИрдкрд░ рд╣реИрдВред

рдПрдВрдбреНрд░реЙрдпрдб

 SharedPreferences sPref = getPreferences(MODE_PRIVATE); Editor ed = sPref.edit(); ed.putString("my key'", myValue); ed.commit(); 

рдЖрдИрдУрдПрд╕

 let defaults = UserDefaults.standard defaults.integer(forKey: "my key'") defaults.set(myValue, forKey: "my key") 

рд╕реНрдкрдВрджрди

 SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.getInt(my key') prefs.setInt(my key', myValue) 

рдореВрд▓ рдирд┐рд╡рд╛рд╕реА

 DefaultPreference.get('my key').then(function(value) {console.log(value)}); DefaultPreference.set('my key', myValue).then(function() {console.log('done')}); 

рдиреЗрдЯрд╡рд░реНрдХ


рджреЗрд╢реА рдЖрдИрдУрдПрд╕ рдФрд░ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдорд╛рдзрд╛рди рд╣реИрдВред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп Alamofire (iOS) рдФрд░ Retrofit (Android) рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓ рдФрд░ рд╕реНрдкрдВрджрди рдСрдирд▓рд╛рдЗрди рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╕реНрд╡рддрдВрддреНрд░ рдЧреНрд░рд╛рд╣рдХ рд╣реИрдВред рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдмрд╣реБрдд рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдПрдВрдбреНрд░реЙрдпрдб

 Retrofit.Builder() .baseUrl("https://timerble-8665b.firebaseio.com") .build() @GET("/messages.json") fun getData(): Observable<Map<String,RealtimeModel>> 

рдЖрдИрдУрдПрд╕

 let url = URL(string: "https://timerble-8665b.firebaseio.com/messages.json") Alamofire.request(url, method: .get) .responseJSON { response in тАж 

рд╕реНрдкрдВрджрди

 http.Response response = await http.get('https://timerble-8665b.firebaseio.com/messages.json') 

рдореВрд▓ рдирд┐рд╡рд╛рд╕реА

 fetch('https://timerble-8665b.firebaseio.com/messages.json') .then((response) => response.json()) 

рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕рдордп




рдореЗрд░реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рдордп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдИ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рд╢рд╛рдпрдж рдЧрд▓рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдПрдХ Android рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ iOS рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП, Flutter рдФрд░ Android рддрдХрдиреАрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ React Native рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рдкреНрд░рддреАрдд рд╣реЛрдЧрд╛ред

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


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

рд▓реЗрдЦ рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХреГрдкрдпрд╛ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдИрдореЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рд╕рдм рдХреБрдЫ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░ рджреВрдВрдЧрд╛ред

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


All Articles